ANTLR 4 で書かれたサンプル文法があります
query : select from ';' !? EOF!
理解しました
query : select from ';'
使い方
!? EOF!
文法で何を意味し、どのように機能しますか?
感嘆符は、生成された AST から特定のノードを除外する必要があることを示すために、ANTLR v3 文法で使用されます。ANTLR v4 には AST がないため、この構成は使用されなくなりました。
v3 と v4 の両方で、?
はルール (レクサーまたはパーサー) がオプションであることを示しEOF
、ファイルの終わりの定数を意味します。
要約すると';'!?
、オプションで a に一致';'
し、AST から除外されます。AndEOF!
の意味: ファイルの終わりに一致し、このトークンを AST から除外します。
したがって、v3 パーサー ルールは次のようになります。
query : select from ';'!? EOF!
v4 文法では次のようになります。
query : select from ';'? EOF