期望RULE_INT的Xtext不匹配输入'0'

时间:2017-09-18 08:30:50

标签: xtext

我不明白这个语法有什么问题:

MyFunc

以下简单测试语句因JUnit失败,消息“错误输入'0'期望标题上的RULE_INT

grammar org.xtext.example.mydsl.MyDsl with org.eclipse.xtext.common.Terminals

generate myDsl "http://www.xtext.org/example/mydsl/MyDsl"

Model:
    header=Header (elements+=Element)*;

Header:
 'Test:Revision' version=Decimal ';'
;

Decimal:
 INT'.'INT
;

Element:
 TableRow
;

TableRow:
 '__Row' name=ID '{'
   '__Alias' '=' Alias(','Alias)* ';'
 '}'
;

Alias:
 '0'|'1'|'H'|'L'
;

如果从Alias规则中删除“0”或将测试语句更改为:

,一切正常
Test:Revision2.0;

你能告诉我这个语法有什么问题吗?

1 个答案:

答案 0 :(得分:1)

使用别名,您将'0'变为关键字,因此它永远不会被INT终端规则匹配。如果您创建名为“L”或名称为“H”的元素,则可能会出现相同的情况,您可以引入类似

的数据类型规则
IntValue: INT | '0' | '1';

并在Decimal

中使用那个而不是INT