私の Antlr3 文法には、次のような「重複する」レクサー ルールがいくつかあります。
NAT: ('0' .. '9')+ ;
INT: ('+' | '-')? ('0' .. '9')+ ;
BITVECTOR: ('0' | '1')* ;
100110や123などのトークンは、これらのルールの複数に一致する可能性がありますが、どのルールにする必要があるかは常にコンテキストによって決定されます。例:
s: a | b | c ;
a: '<' NAT '>' ;
b: '{' INT '}' ;
c: '[' BITVECTOR ']' ;
入力{17}は{、INT、および}と一致するはずですが、レクサーは17が NAT トークンであるとすでに判断しています。この動作を防ぐにはどうすればよいですか? バックトラックオプションは既に true に設定されていますが、パーサー ルールにのみ影響するようです。