私は長い間文法に取り組んできましたが、今では大きなコードベースでそれを試してみると、この厄介な問題が発生します。「INDEX」などのIDを解析しようとして、「INDEX」を検索する別のルールがある場合、パーサーは失敗します。問題を説明するための文法例を作成しました。
public variable : '@' ID '=' STRING;
index : INDEX;
WS : (' '|'\r'|'\t'|'\u000C'|'\n') {Skip();};
INDEX : 'INDEX';
ID : ('a'..'z'|'A'..'Z'|'_') ('a'..'z'|'A'..'Z'|'0'..'9'|'_')*;
STRING : '\'' ( ESC_SEQ | ~('\\'|'\'') )* '\'';
したがって、「」を解析しようとすると@some = 'some'
、正常に機能しますが、「@index = 'some'
」は私に{<mismatched token: [@1,1:5='index',<8>,1:1], resync=@index='some'>}
出力はC#のASTです。これを解決する方法について何かアイデアはありますか?