Проблема ANTLR4 с грамматикой сбалансированных скобок - PullRequest
0 голосов
/ 24 апреля 2020

Я провожу некоторые эксперименты с ANTLR4 с этой грамматикой:

srule   
    :  '(' srule ')'
    | srule srule
    | '(' ')';

эта грамматика предназначена для языка сбалансированных скобок. Проблема в том, что когда я запускаю antlr с этой строкой: (()))(

Эта строка явно неверна, но antlr просто возвращает это AST

Кажется, что она останавливается, когда она находит неверные скобки, но сообщение об ошибке не возвращается. Я хотел бы узнать больше об этом поведении. Спасибо

1 Ответ

1 голос
/ 24 апреля 2020

Анализатор распознает (())) и затем останавливается. Если вы хотите заставить синтаксический анализатор потреблять все токены, «закрепите» свое тестовое правило токеном EOF:

parse_all
 : srule EOF
 ;

Кстати, всегда полезно включить токен EOF в точка входа (правило входа) вашей грамматики.

...