2

私は長い間文法に取り組んできましたが、今では大きなコードベースでそれを試してみると、この厄介な問題が発生します。「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です。これを解決する方法について何かアイデアはありますか?

4

2 に答える 2

1

変数名レクサールールを作成できますか?

public VARIABLENAME : '@' ID

このようにキーワードは引き続き機能しますが、変数名に干渉することはありません。

variableルールは次のように変更されます。

public variable : VARIABLENAME '=' STRING;
于 2012-09-24T08:54:05.567 に答える
0

「INDEX」ルールなしで文法を使用し、ASTトラバーサルのC#コードでこのルールを手動で確認してください。

于 2012-09-24T08:08:23.967 に答える