同じ文法で有効な日付と数値の両方を解析する最も簡単な (最短で、ルールが最も少なく、警告がない) 方法は何ですか? 私の問題は、有効な月 (1 ~ 12) に一致するレクサー ルールが、1 ~ 12 のすべての出現に一致することです。したがって、数値を一致させたい場合は、次のような解析ルールが必要です。
number: (MONTH|INT);
日と年のレクサー規則を追加すると、さらに複雑になります。次のような日付の解析ルールが必要です。
date: month '/' day ( '/' year )? -> ^('DATE' year month day);
同じツリー構造になる限り、月、日、年が解析規則であるかレクサー規則であるかは気にしません。また、他の場所で数字を認識できる必要があります。たとえば、次のようになります。
foo: STRING OP number -> ^(OP STRING number);
STRING: ('a'..'z')+;
OP: ('<'|'>');