2013-10-11 31 views
1

我正在使用xText爲新語言編寫新的eclipse插件。但是,當我試圖生成代碼的Antlr給我這樣的警告:「決定可以匹配輸入如''?'」在xText中使用多種替代方法:1,2「

Decision can match input such as "'?'" using multiple alternatives: 1, 2 

我敢肯定,評論太多的代碼,這個問題是在下面的代碼剪斷後:

... 
Expression: 
    operatorExpr=OperatorExpr (condExpr=CondExpr)? 
    |exprPrimary=ExprPrimary (condExpr=CondExpr)? 
; 

CondExpr: 
    '?' 
; 


ExprPrimary: 
    Identifier 
; 

OperatorExpr: 
    '+' expression=Expression 
; 
... 

哪有我解決了警告?

回答

2

如果你有這樣的表達:+x?,它可以分析兩種方法:

Expression 
-> operatorExpr : OperatorExpr 
    -> + 
    -> expression : Expression 
     -> exprPrimary : ExprPrimary = x 
-> condExpr : ? 

Expression 
-> operatorExpr : OperatorExpr 
    -> + 
    -> expression : Expression 
     -> exprPrimary : ExprPrimary = x 
     -> condExpr : ? 

的condExpr可以在上面表達或內部之一設置。

要解決這個問題,您可能只在您的主規則中保留第二個condExpr。無論如何,這是默認的方式xtext將解決你的歧義(意思是用你當前的語法,它會選擇第二個解析)。

如果你這樣做的其他方式,只留下第一個condExpr,你會得到兩個問題:1)語法仍然曖昧與內OperatorExpression(++x?爲例)的OperatorExpression,和2)x?將不再匹配。

相關問題