如何用可选字母作为数字前缀?

How to prefix numbers with optional letter?

我正在使用 gradle 构建 initial Xtext project 构建。

ext.xtextVersion = '2.20.0'

我有以下 xtext 语法:

grammar com.exampe.Rule with org.eclipse.xtext.common.Terminals hidden(WS, ML_COMMENT, SL_COMMENT)

import "http://www.eclipse.org/emf/2002/Ecore" as ecore

generate rule "http://www.example.com/Rule"

Rule:
    {Number} (other?='o')? number=INT
;

这不解析 o19

然后,规则更改为:

Rule:
    {Number} (other?='*')? number=INT
;

这会解析 *19

我没有发现字母与符号有任何特殊处理。

这里出了什么问题?我怎样才能让 o19 得到解析。

o19 由您从 org.eclipse.xtext.common.Terminals 继承导入的规则 ID 解析。在 Xtext 中,词法分析器独立于解析器运行(上下文不敏感)并将文本标记为关键字和终端规则调用。

您必须为这种情况添加一个终止规则。

terminal PREFIXED_INT:
   'o' INT;

但我不知道如果您也保留 ID 规则,就可读性而言是否是个好主意。您的代码的读者可能会被误导。