Ich habe begonnen, ANTLR zu benutzen und habe festgestellt, dass es mit seinen Lexer-Regeln ziemlich unbeständig ist. Ein äußerst frustrierend Beispiel ist das folgende:ANTLR 4.5 - Nicht übereinstimmender Eingang 'x' erwartet 'x'
grammar output;
test: FILEPATH NEWLINE TITLE ;
FILEPATH: ('A'..'Z'|'a'..'z'|'0'..'9'|':'|'\\'|'/'|' '|'-'|'_'|'.')+ ;
NEWLINE: '\r'? '\n' ;
TITLE: ('A'..'Z'|'a'..'z'|' ')+ ;
Diese Grammatik wird so etwas wie nicht überein:
c: \ test.txt
x
Merkwürdig, wenn ich TITLE
ändern TITLE: 'x' ;
es noch sein versäumt es diesmal, eine Fehlermeldung zu geben, die sagt: "nicht übereinstimmende Eingabe 'x' erwartet 'x'" was sehr verwirrend ist. Noch seltsamer, wenn ich die Verwendung von TITLE
in test
durch FILEPATH
ersetze, funktioniert die ganze Sache (obwohl FILEPATH
mehr zusammenpassen wird, als ich suche, um zusammenzupassen, so ist es im Allgemeinen keine gültige Lösung für mich).
Ich bin sehr verwirrt darüber, warum ANTLR so extrem seltsame Fehler gibt und dann plötzlich ohne ersichtlichen Grund arbeitet, wenn man Dinge herumschlurft.
Das sehr viel Sinn macht jetzt, danke für deine Antwort! Es wäre jedoch nett, eine hilfreichere Fehlermeldung zu haben, aber ich weiß, dass das schwierig oder unangemessen sein kann. –
Zur Laufzeit muss der Parser davon ausgehen, dass sich der Benutzer dessen Verhaltens bewusst ist. Dennoch stimme ich zu, dass eine Warnung in Ordnung wäre, wenn sich zwei Lexer-Regeln auf diese Weise überschneiden würden. – CoronA
Große Zusammenfassung von ANTLR Referenz! – Cody