我一直在研究一种语法很长一段时间,但现在当我在一个大型代码库上尝试它时,我遇到了这个烦人的问题。当我试图解析一个 ID 时,例如“INDEX”,并且我有另一个查找“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。关于如何解决这个问题的任何想法?