Итак, я пытаюсь разобрать следующий текстовый файл:
555 5555
С этой грамматикой:
grammar PEntry;
entry : Tab Number Nl;
Tab : '\t';
Nl : '\n';
Number : Num RSp Num RSp;
//Name : (RWord RSp)+;
fragment RWord : (~[\p{Z}])+;
fragment Num : [0-9]+;
fragment RSp : [\p{Z}]+;
Через командную строку вот так:
grun PEntry entry test.txt -gui
Что меня отталкивает, так это то, что, если вы оставите правило имени закомментированным, оно прекрасно его проанализирует, но если правило имени не закомментировано, произойдет следующая ошибка:
line 1:0 mismatched input '\t555 5555 ' expecting ' '
Почему это происходит, когда имя даже не указано в целевом правиле (записи)? В неконтекстной грамматике любые неиспользуемые правила, на которые не ссылается переменная start, вообще отсутствуют в языке, так что же отличает antlr?
Обновление: (~ [\ p {Z}]) + должно было быть [~ \ p {Z}] +, но не должно ли это правило по-прежнему не влиять на грамматику? Я хочу знать, есть ли способ, которым antlr анализирует правила, которые отличают его от CFG.