私は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;
私の文法に何か問題がありますか?