ANTLR остановка при первом появлении - PullRequest
0 голосов
/ 08 июня 2018

У меня есть следующие правила:

while: 'while' expr 'do' program;
if: 'if' expr 'then' program 'else' program;

Мне все равно, что содержит expr, так как я могу взять все там, пока then или do?

Я пытался:

expr: .*?~('then'|'do');

, но это не работает.Почему?

1 Ответ

0 голосов
/ 08 июня 2018

Если содержание и структура не имеют значения, используйте вместо этого поток токенов.Выполните итерацию по всем токенам (начиная с токена while, пока не встретите do (и перепрыгните через все вложенные циклы). Ваш анализатор гарантирует правильность ввода, поэтому тогда можно использовать поток токенов.

...