Parsing xtext不接受字符串常量-应为规则\u ID
我已尝试将我的问题简化为xtext中最简单的问题-我想使用以下语法:Parsing xtext不接受字符串常量-应为规则\u ID,parsing,xtext,Parsing,Xtext,我已尝试将我的问题简化为xtext中最简单的问题-我想使用以下语法: M: lines += T*; T: DT | BDT | N ; BDT: name = ('a' | 'b' | 'c') ; DT: 'd' name=ID ('(' (ts += BDT (','ts += BDT)*) ')')? ; N: 'n' name=ID ':' type=[T] ; 例如,我打算解析形式为df(a,b,b)
M: lines += T*;
T:
DT
| BDT
| N
;
BDT:
name = ('a' | 'b' | 'c')
;
DT:
'd' name=ID
('(' (ts += BDT (','ts += BDT)*) ')')?
;
N:
'n' name=ID ':' type=[T]
;
例如,我打算解析形式为df(a,b,b)
的表达式,它可以很好地工作。我还希望能够解析ng:f
,这也可以,但不能解析ng:a
——其中a here是BDT规则的一部分。给出的错误是“在“a”处缺少规则\u ID”
例如,我想允许语法解析
ng:a
,如果有人能指出我在这个非常简单的语法上的错误,我将不胜感激 词法分析与上下文无关。关键字永远不能是ID。您可以通过解析器规则解决此问题
您可以引入数据类型规则
MyID: ID | "a" | ... | "c";
在使用ID回答我自己的问题的地方使用它(我想)-问题是规则需要ID标记,但在BDT规则中名称被设置为字符串常量标识符。我认为这里的答案是将BDT更改为accept和ID,然后编写一个验证器来限制其输入。