Xtext:语法多选项

时间:2016-09-22 20:14:27

标签: xtext

由于Exp

中有多个选项,此示例语法无法编译
grammar org.xtext.example.mydsl.MyDsl with org.eclipse.xtext.common.Terminals   

generate myDsl "http://www.xtext.org/example/mydsl/MyDsl"

Model:
    (a+=ContrSpec)+
    (c+=Exp)+
;

ConstrName:
    name=ID
;

ContrSpec:
    'const' name=ConstrName ('('')')?
;

Exp:
    c=[ConstrName]|
    i=ID
;

语法图看起来像

       ID
     /    \
Exp--      --
     \    /
       ID

可以通过

来解决
 Exp:
    ->c=[ConstrName]|
    i=ID
;

但语法图保持不变。

  • 是否存在不同的方法来解决问题?
  • 语法图中的多个ID可以在以后导致问题吗?

更新1: 这至少解决了解析案例

Model:
    (a+=ContrSpec)+
    (b+=VarSpec)+
    (c+=Exp)+
;

Name:
    VarName | ConstrName
;

VarName:
    name=ID
;

ConstrName:
    name=ID
;

VarSpec:
    'var' name=VarName
;

ContrSpec:
    'const' name=ConstrName ('('')')?
;

Exp:
    el=[Name] ('()')? |
    is_int?='Int'
;

0 个答案:

没有答案