2013-10-27 18 views
7

C'è un modo per ottenere perl6 di generare un messaggio di errore se una grammatica non corrisponde? O almeno restituire la posizione degli ultimi dati elaborati? È abbastanza difficile correggere gli errori di sintassi se tutto ciò che ottengo dal parser è "nessuna corrispondenza".grammatiche perl6, segnalazione errori

risposta

11

Se la messa a fuoco genera messaggi per gli utenti della grammatica, vedere Generating Good Parse Errors from a Parser e Grammar::ErrorReporting.

Il resto di questa risposta riguarda il debug.

Innanzitutto, è possibile incorporare chiusure arbitrarie (codice) in Perle 6 regex. (Basta digitare { your code goes here } nel mezzo di un'espressione regolare.) Quindi potresti semplicemente cospargere le affermazioni { say ... } dove sono utili per il debug.

Ma ci sono opzioni migliori.

Si sta utilizzando la "batteria inclusa" distribuzione Rakudo Star? (Si dovrebbe essere a meno che non si abbia una buona ragione per non farlo.) In tal caso, è possibile aggiungere la riga use Grammar::Tracer; (come descritto nelle diapositive allo http://www.jnthn.net/papers/2011-yapceu-grammars.pdf) per ottenere una traccia completa di un'analisi.

La mia preferenza personale è quello di utilizzare il debugger Rakudo che fornisce tutto ciò di grammatica :: Tracer fa più un bel po 'più oltre (singolo passo, i punti di interruzione, ecc di tutto il codice Perl 6 tra cui espressioni regolari e grammatiche). Il debugger è stato introdotto in questo video.

Se hai altre domande, ti consiglio di visitare il sempre amichevole IRC channel #perl6.