mam definicja reguły tak:antlr żeton priorytet
reference: volume':'first_page'-'last_page ;
volume: INTEGER;
first_page: INTEGER;
last_page: INTEGER;
INTEGER: [0-9]+;
FREE_TEXT_WORD: NON_SPACE+;
fragment NON_SPACE : ~[ \r\n\t];
względu na wejście "168: 321-331", myślałem, że to pasuje do odniesienia regułę. Ale w rzeczywistości cały ciąg jest tokenizowany jako FREE_TEXT_WORD.
Jak mogę dokonać INTEGER tokena mają pierwszeństwo nad FREE_TEXT_WORD w tym przypadku?
Dzięki.
-1: To nie działa tak, jak to wygląda. To, co faktycznie zrobiłeś, przekształca regułę na "FREE_TEXT_WORD: NON_SPACE;", która pozwala regule 'INTEGER' dopasować dane wejściowe, wymuszając regułę' FREE_TEXT_WORD' na * nigdy * dopasowując więcej niż jeden znak. –
@ 280Z28 Dzięki za komentarz. Byłem naprawdę pod wrażeniem, że był to problem chciwości, a mój szybki test rozwiązał problem PO, dlatego przesłałem odpowiedź. Jednak wczoraj kupiłem książkę, więc pozwól mi ją przetrawić przez jakiś czas. Utrzymam odpowiedź tutaj i ewentualnie zaktualizuję ją lub usuniemy. – auselen