由于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'
;