2

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

4

2 回答 2

1

你能创建一个变量名词法分析器规则吗?

public VARIABLENAME : '@' ID

这样关键字仍然可以工作,但不会干扰变量名。

variable规则将被修改为:

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

Try to use your grammar without "INDEX" rule and check this rule manually in your C# code of AST traversal.

于 2012-09-24T08:08:23.967 回答