Gibt es eine Möglichkeit, perl6 eine Fehlermeldung zu erhalten, wenn eine Grammatik nicht übereinstimmt? Oder zumindest die Position der letzten verarbeiteten Daten zurückgeben? Es ist ziemlich schwierig, Syntaxfehler zu beheben, wenn alles, was ich vom Parser bekomme, "keine Übereinstimmung" ist.perl6 Grammatiken, Fehlermeldung
Antwort
Wenn Ihr Fokus Nachrichten für Benutzer Ihrer Grammatik generiert, siehe Generating Good Parse Errors from a Parser und Grammar::ErrorReporting.
Der Rest dieser Antwort ist über Debugging.
Zuerst können Sie beliebige Verschlüsse (Code) in Perl 6-Regexes einbetten. (Geben Sie einfach { your code goes here }
in der Mitte eines regulären Ausdrucks ein.) Sie können also einfach die Anweisungen { say ... }
streuen, die für das Debugging hilfreich sind.
Aber es gibt bessere Möglichkeiten.
Verwenden Sie die Rakudo Star-Distribution "Batterien enthalten"? (Sie sollten es sein, es sei denn, Sie haben einen guten Grund, dies nicht zu tun.) Wenn dies der Fall ist, können Sie die Zeile use Grammar::Tracer;
(wie in den Folien unter http://www.jnthn.net/papers/2011-yapceu-grammars.pdf beschrieben) hinzufügen, um eine vollständige Ablaufverfolgung einer Analyse zu erhalten.
Meine persönliche Präferenz ist es, den Rakudo Debugger zu verwenden, der alles bietet, was Grammar :: Tracer tut und noch viel mehr (Einzelschritte, Breakpoints usw. von allen Perl 6 Codes einschließlich Regexes und Grammatiken). Der Debugger wird in diesem video eingeführt.
Wenn Sie weitere Fragen haben, empfehle ich Ihnen besuchen Sie die immer freundlich IRC channel #perl6.
- 1. Kontextfreie Grammatiken
- 2. Parsing Grammatiken mit OCaml
- 3. Perl6 installierte Module
- 4. Perl6 optionale Funktionsflags
- 5. Perlbrew für Perl6
- 6. Mit einfachen Boost :: Spirit Grammatiken?
- 7. "perldoc -f" für Perl6/Rakudo
- 8. Perl6: impliziter und expliziter Import
- 9. Perl6 API mit Slang :: SQL
- 10. Mehrere YACC-Grammatiken in einem Programm
- 11. Gibt es Open Source-Verilog-Grammatiken?
- 12. Bison-Grammatiken in kleinere Grammatik-Dateien aufteilen
- 13. Case-unempfindlichen Hash-Schlüssel in Regexp :: Grammatiken
- 14. Generieren von n-Anweisungen aus kontextfreien Grammatiken
- 15. Sind rekursive Boost-Spirit-Grammatiken erlaubt?
- 16. Rakudo (Perl6): Was funktioniert noch nicht?
- 17. Packen und Entpacken Datenstruktur mit Perl6
- 18. Perl6: Warum verhält sich substr-rw so?
- 19. Perl6: Wie liest man STDIN Rohdaten?
- 20. Was ist ein Zweig in Perl6?
- 21. Erste und folgt dem nicht-Terminals in zwei Grammatiken
- 22. Grammatik-Editor-Dienstprogramm für kontextfreie Grammatiken in Java
- 23. Sind die Grammatiken in Java7 spec wirklich äquivalent?
- 24. Werden fließende Schnittstellen durch kontextfreie oder reguläre Grammatiken beschrieben?
- 25. Microsoft Speech Recognition Engine Zwischen den Grammatiken wechseln
- 26. Generieren von Grammatiken aus einer Sprache (formale Sprachen und Automatentheorie)
- 27. Geschichte des abschließenden Kommas in Grammatiken der Programmiersprache
- 28. jquery Fehlermeldung
- 29. BUGs Fehlermeldung
- 30. PDO-Fehlermeldung?