Я записал следующее утверждение в грамматике ANTLR:
loopStatement
: 'loop' (statement|exit)* 'end' 'loop' ';'
;
Если я правильно понимаю, (statement|exit)*
означает, что у меня может быть statement
или exit statement
. То есть
то есть statement_1 exit_1
, или statement_1
, или statement_1 statement_2, exit_1
, верно?
Мой парсер работает, кроме случаев, когда нет оператора.
Например:
это работает:
loop
x:=x+1; <<< statement_1
exit when x=9; <<<<exit_1
end loop;
это также работает (нет exit
):
loop
x:=x+1; <<< statement_1
<<<<exit_1 (no exit)
end loop;
но это НЕ работает (нет statement
):
loop
<<< statement_1
exit when x=9; <<<<exit_1
end loop;
Что-то не так с моей грамматикой?