2016-07-25 37 views
0

在使用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是否没有处理有效的构造?

回答

1

Xtext生成Antlr 3.x语法,Antlr 4语法不兼容。

+0

语法没有那么不同。只有树重写不再被允许,并且一些选项(如'greedy'或'k')不能再使用(因为它们对ALL(*)算法没有意义)。 –