【发布时间】:2011-12-05 15:39:20
【问题描述】:
在我的 DSL 中,变量是动态的,它们是在第一次为它们分配值时创建的。所以这是一个有效的代码:
a = 0
b = 2 // new variable created
a = 3 // existing variable reassigned
我幼稚的做法是有这样的规则
Identifier:
ID; // ID from Terminals
Assignable:
{Assignable} ref=[Identifier|ID] |
{Assignable} newVar=Identifier;
它不起作用,抱怨“以下替代方案永远无法匹配:2”。可以理解,因为生成的 Antlr 调试语法包含一个规则:
ruleAssignable: ruleIdentifier | ruleIdentifier;
([Identifier|ID] 的诀窍来自对question on cross-referencing 的回复。我只是在没有完全理解的情况下复制了它:)我还尝试了解它是如何在 Xbase 语法中解决的:
{XAssignment} /* (declaringType=[types::JvmDeclaredType] '::')? */ feature=[types::JvmIdentifiableElement|ValidID] OpSingleAssign value=XAssignment
好像只使用了交叉引用,看不到新变量声明是怎么处理的。
【问题讨论】:
标签: xtext cross-reference dynamic-variables