如何用可选字母作为数字前缀?
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
规则,就可读性而言是否是个好主意。您的代码的读者可能会被误导。
我正在使用 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
规则,就可读性而言是否是个好主意。您的代码的读者可能会被误导。