Xtext 不匹配的输入 '0' 期望 RULE_INT
Xtext mismatched input '0' expecting 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'
;
以下简单测试语句因 JUnit 而失败,并显示消息“不匹配的输入‘0’期望在 HeaderRULE_INT 上
Test:Revision2.0;
如果我从别名规则中删除“0”或将测试语句更改为:
,一切正常
Test:Revision2.00;
你能告诉我这个语法有什么问题吗?
使用 Alias,您可以将“0”变成关键字,这样它就永远不会被 INT 终端规则匹配。如果您创建一个名为 'L' 或名称 'H' 的元素,也会发生同样的情况,您可以引入一个数据类型规则,例如
IntValue: INT | '0' | '1';
并在 Decimal 中使用那个而不是 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'
;
以下简单测试语句因 JUnit 而失败,并显示消息“不匹配的输入‘0’期望在 HeaderRULE_INT 上
Test:Revision2.0;
如果我从别名规则中删除“0”或将测试语句更改为:
,一切正常Test:Revision2.00;
你能告诉我这个语法有什么问题吗?
使用 Alias,您可以将“0”变成关键字,这样它就永远不会被 INT 终端规则匹配。如果您创建一个名为 'L' 或名称 'H' 的元素,也会发生同样的情况,您可以引入一个数据类型规则,例如
IntValue: INT | '0' | '1';
并在 Decimal 中使用那个而不是 INT