Parsing xtext不接受字符串常量-应为规则\u ID

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)

我已尝试将我的问题简化为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)
的表达式,它可以很好地工作。我还希望能够解析
ng:f
,这也可以,但不能解析
ng:a
——其中a here是BDT规则的一部分。给出的错误是“在“a”处缺少规则\u ID”


例如,我想允许语法解析
ng:a
,如果有人能指出我在这个非常简单的语法上的错误,我将不胜感激

词法分析与上下文无关。关键字永远不能是ID。您可以通过解析器规则解决此问题

您可以引入数据类型规则

MyID: ID | "a" | ... | "c"; 
在使用ID

回答我自己的问题的地方使用它(我想)-问题是规则需要ID标记,但在BDT规则中名称被设置为字符串常量标识符。我认为这里的答案是将BDT更改为accept和ID,然后编写一个验证器来限制其输入。