1

这是一个示例语法:

语法 org.xtext.example.mydsl.MyDsl 和 org.eclipse.xtext.common.Terminals

生成 myDsl “http://www.xtext.org/example/mydsl/MyDsl”

开始:元素 += 狗;

狗:'狗'INT';' ;

终端 CAT : ('A'..'Z')('A'..'Z')('A'..'Z')' '('0'..'9')+;

当 Xtext 看到 line:DOG 1234时,它无法解析并会给出错误“ mismatch input DOG 1234... Expecting DOG ”类似的东西。我认为当Xtext遇到关键字时,它应该比终端具有更高的优先级。但它似乎很困惑。我怎样才能解决这个问题?

注意 DOG 和 CAT 用在不同的地方(即终端 CAT 用于其他规则,但其定义与 DOG 规则冲突)

4

1 回答 1

2

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

例如,如果您在 CAT 规则之后将 DOG 定义为另一个终端规则,那么元素 RAT 也与 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
;
于 2012-08-27T13:07:11.343 回答