Я хочу разобрать язык, на котором операторы разделяются EOL.Я попробовал это в грамматике лексера (скопировано из примера в документации):
EOL : ('\r'? '\n')+ ; // any number of consecutive linefeeds counts as a single EOL
, а затем использовал это в грамматике парсера:
stmt_sequence : (stmt EOL)* ;
Парсер отклонил код с операторамиразделенные одной или несколькими пустыми строками.
Однако, это было успешно:
EOL : '\r'? '\n' ;
stmt_sequence : (stmt EOL+)* ;
Я новичок в ANTLR.Кажется, что оба должны работать.Есть ли что-то в жадном / несжатом сканировании лексера, которого я не понимаю?
Я пробовал это как с 3.2, так и с 3.4;Я использую ANTLR IDE в Eclipse Indigo на OS X 10.6.
Спасибо.