Учитывая следующее ANTLR 4.1 грамматика, с одной линией намеренно закомментированными ...ANTLR несовпадающий вход '<EOF>'
grammar Foobar;
//whyDoesThisRuleHelp : expression ;
expression : operand | binaryOperation ;
binaryOperation : operand WS BINARY_OPERATOR WS expression ;
operand : LETTER ;
BINARY_OPERATOR : 'EQ' ;
LETTER : [a-z] ;
WS : [ \n]+ ;
.. почему echo -n "a EQ b" | grun Foobar expression
производит
line 1:6 mismatched input '<EOF>' expecting WS
.. но если мы раскомментируемblock : expression ;
линия выше grun
не производит ошибок?
Я верю вам, но в моем правиле 'whyDoesThisRuleHelp' нет явного EOF. Есть ли интересная (или образовательная) причина, почему правило без явного EOF также решает проблему? Благодарю. (Я читал [о проблеме, о которой вы говорили] (https://github.com/antlr/antlr4/issues/118), но ничего не понимал LOL) –
@JaredBeck Это происходит не каждый раз, когда вы отсутствуете «EOF». Ваши две грамматики (один с одним и без строки прокомментировал) показывают один случай, когда это происходит, и один случай, когда этого не происходит. –