在使用XText时,我遇到了一个问题,我不确定Antlr4或XText是否有问题,或者我是否错过了一些东西。我知道Antlr4不被Xtext支持,但似乎这种特殊情况不应该导致问题。简单的Xtext示例生成Antlr4不喜欢的语法 - 应该责怪谁?
下面是一个简单的Xtext文件:
grammar com.github.jsculley.antlr4.Test with org.eclipse.xtext.common.Terminals
generate test "http://www.github.com/jsculley/antlr4/test"
aRule:
name=STRING
;
STRING在XTEXT规则定义从org.eclipse.xtext.common.Terminals:
terminal STRING :
'"' ('\\' . /* 'b'|'t'|'n'|'f'|'r'|'u'|'"'|"'"|'\\' */ | !('\\'|'"'))* '"' |
"'" ('\\' . /* 'b'|'t'|'n'|'f'|'r'|'u'|'"'|"'"|'\\' */ | !('\\'|"'"))* "'"
;
所生成的Antlr语法具有以下规则:
RULE_STRING : ('"' ('\\' .|~(('\\'|'"')))* '"'|'\'' ('\\' .|~(('\\'|'\'')))* '\'');
Antlr 3.5.2工具对此规则没有问题,但Antlr4工具吐出o UT斯达康以下错误:
error(50): InternalTest.g:102:29: syntax error: '(' came as a complete surprise to me while looking for lexer rule element
error(50): InternalTest.g:102:62: syntax error: '(' came as a complete surprise to me while looking for lexer rule element
error(50): InternalTest.g:102:74: syntax error: mismatched input ')' expecting SEMI while matching a lexer rule
error(50): InternalTest.g:106:25: syntax error: '(' came as a complete surprise to me while looking for lexer rule element
error(50): InternalTest.g:106:36: syntax error: mismatched input ')' expecting SEMI while matching a lexer rule
Antlr4每个“〜”操作后不喜欢多余的(貌似uneccessary)套组周围的括号。所以问题是,Xtext是否会生成一个错误的语法,或者Antlr4是否没有处理有效的构造?
语法没有那么不同。只有树重写不再被允许,并且一些选项(如'greedy'或'k')不能再使用(因为它们对ALL(*)算法没有意义)。 –