Xtext - 枚举文字覆盖 id

Xtext - enum literal overrides id

我有以下语法摘录,其中规则 Format 似乎覆盖了 FieldColumnName 规则。

Statement:
    'select * from' table=Table where=WhereClause;

WhereClause: 
    'where' symbol=FieldColumn op="=" right=STRING; 

FieldColumn:
    fieldName=FieldColumnName;

FieldColumnName hidden():
    ID ('.' ID)?;

enum Format:
    iso | de | en;

根据以下语法开发 DSL 脚本我在编辑器中收到验证错误,如下 Statement:

select * from foo where foo.de = 'bar';

错误标记 foo.de 中的 de,其消息是:

mismatched input 'de' expecting RULE_ID

如何在我不希望使用该关键字的上下文中使用像 de 这样的保留字?

您应该非常小心关键字中的空格。请尝试重构你的语法,例如使用 'select' '*' 'from' 而不是 'select * from'。 要解决您的问题,您必须引入规则 ValidID: ID | 'de' |'en' | 'iso'; 并在 FieldColumnName 中使用 ValidID 而不是 ID。