这是一个语法示例:
语法org.xtext.example.mydsl.MyDsl与org.eclipse.xtext.common.Terminals 生成myDsl "http://www.xtext.org/example/mydsl/MyDsl“ 开始: elem +=犬; 狗:“狗”; 终端猫:(a‘..’Z‘)(’A‘.’Z‘)(’A‘.’Z‘)’‘(’0‘’.‘9’)+;
当Xtext看到一行:DOG 1234时,它无法解决,并会给出“错配输入狗1234.期望狗”之类的错误。我认为当Xtext遇到关键字时,它应该比终端具有更高的优先级。但看上去好像很困惑。我怎么才能解决这个问题?
请注意,在不同的位置使用狗和猫(即终端猫用于其他规则,但其定义与狗规则相冲突)。
发布于 2012-08-27 13:07:11
在这种情况下,如您所见,错误不是“期望CAT_RULE ..”。因此,当您将DOG1234作为元素编写时,Xtext并不是将其解析为DOG和INT,而是将'DOG1234‘作为字符串,然后查找狗规则,当然狗规则只允许" DOG“关键字。
例如,如果您将狗定义为CAT规则之后的另一个终端规则,也是一个与CAT规则“冲突”的元素,并通过使用新行将它的INT值与关键字分隔开来,那么您将看到它们都是有效的。
START: elem += DOG
catelem += CAT
ratelem += RAT;
RAT:
"RAT"INT";"
;
terminal CAT : ('A'..'Z')('A'..'Z')('A'..'Z')' '('0'..'9')+;
terminal DOG : "DOG"("0".."9")+";";然后使用新的DSL示例:
DOG1234;
CSA 1
RAT
12347
;https://stackoverflow.com/questions/11990310
复制相似问题