文法はオプションなしでANTLRv3で機能します。
kオプションは、ANTLRを従来のLL(k)解析に制限します。バックトラックとは、パーサーがどのルールを使用するかを予測できない場合、単に試行し、バックトラックして再試行することを意味します。ANTLRが特定の文法の先読みDFAを構築できない場合に使用する必要があるバックトラッキングオプション。ANTLR v3は、正規表現からDFAを非常に簡単に構築できますが、再帰的なルールには問題があります。たとえば、この文法は機能します。
start: recursive_rule ';'
| recursive_rule ':'
;
recursive_rule : (ID)* '%'
;
以下のこの文法は同じですが、再帰によって表現されます。ANTLRはそのためのDFAを構築できないため(実際には理由はわかりません)、バックトラックをオンに切り替える必要があります。
start options {backtrack=true;} : recursive_rule ';'
| recursive_rule ':'
;
recursive_rule : ID recursive_rule
|'%'
;
kオプションは、パーサーのパフォーマンスを向上させるために使用されます。LL(*)をLL(k)に制限する他の理由はわかりません。