Zaczynam korzystać z ANTLR i zauważyłem, że jest dość zmienny z jego regułami dla lexerów. Niezwykle frustrujące przykładem jest następujący:ANTLR 4.5 - Niedopasowane wejście "x" oczekiwanie "x"
grammar output;
test: FILEPATH NEWLINE TITLE ;
FILEPATH: ('A'..'Z'|'a'..'z'|'0'..'9'|':'|'\\'|'/'|' '|'-'|'_'|'.')+ ;
NEWLINE: '\r'? '\n' ;
TITLE: ('A'..'Z'|'a'..'z'|' ')+ ;
Ta gramatyka nie pasuje coś takiego:
c: \ test.txt
x
dziwne jeśli zmienię TITLE
być TITLE: 'x' ;
nadal tym razem nie powiedzie się komunikat o błędzie "niedopasowane wejście" x "oczekiwanie" x "", co jest bardzo mylące. Jeszcze dziwniej, jeśli zastąpię użycie TITLE
w test
z FILEPATH
cała sprawa działa (chociaż FILEPATH
będzie pasować więcej niż szukam, aby dopasować, więc ogólnie nie jest to poprawne rozwiązanie dla mnie).
Jestem bardzo zdezorientowany, dlaczego ANTLR popełnia tak ekstremalnie dziwne błędy, a następnie nagle działa bez wyraźnego powodu, gdy tasuje różne rzeczy.
To sprawia, że wiele sensu teraz, dzięki za odpowiedź! Byłoby miło mieć bardziej przydatny komunikat o błędzie, ale wiem, że może to być trudne lub nieuzasadnione. –
W czasie wykonywania analizator składni musi zakładać, że użytkownik jest świadomy swojego działania. Mimo to zgadzam się, że ostrzeżenie byłoby w porządku, gdyby dwie zasady leksykalne nakładały się w taki sposób. – CoronA
Świetne podsumowanie z referencji ANTLR! – Cody