首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Shift-减少Xtext中语法规则和终端之间的冲突

Shift-减少Xtext中语法规则和终端之间的冲突
EN

Stack Overflow用户
提问于 2012-08-16 15:11:58
回答 1查看 592关注 0票数 1

这是一个语法示例:

语法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遇到关键字时,它应该比终端具有更高的优先级。但看上去好像很困惑。我怎么才能解决这个问题?

请注意,在不同的位置使用狗和猫(即终端猫用于其他规则,但其定义与狗规则相冲突)。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-08-27 13:07:11

在这种情况下,如您所见,错误不是“期望CAT_RULE ..”。因此,当您将DOG1234作为元素编写时,Xtext并不是将其解析为DOG和INT,而是将'DOG1234‘作为字符串,然后查找狗规则,当然狗规则只允许" DOG“关键字。

例如,如果您将狗定义为CAT规则之后的另一个终端规则,也是一个与CAT规则“冲突”的元素,并通过使用新行将它的INT值与关键字分隔开来,那么您将看到它们都是有效的。

代码语言:javascript
复制
    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示例:

代码语言:javascript
复制
DOG1234;
CSA 1 
RAT
12347
;
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11990310

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档