単純な数式(いくつかのantlrの例のように)を解析および評価するための単純な文法(レクサーとパーサー)があり、単純な変数定義(つまり、浮動小数点値の割り当て)とこれらの変数の使用も可能であるとします。たとえば、次の処理が可能です。
r = 2.5;
PI = 3.14;
PI * r * r;
これは、より複雑な文法で使用されることになっています。実際、いくつかの異なるもの。問題は、上記のレクサーが基本的にすべての文字列をトークンタイプID、つまり潜在的な変数名として認識することですが、より複雑な文法には他のキーワードが含まれる場合があります。
私が行った場合
lexer grammar ComplexLexer;
import SimpleMathExprLexer;
// ...
IF : 'if'|'IF';
THEN : 'then'|'THEN';
// ...
その場合、IDがすでにこれらのキーワードと一致していることはそれほど役に立ちません。importステートメントをこれらのルールの下に移動するだけでは機能しません。これを回避する方法はありますか、それとも私が作曲を見るときに完全に間違った道を進んでいますか?