Parsing 在Xtext中解析不同的范围整数?

Parsing 在Xtext中解析不同的范围整数?,parsing,antlr,xtext,Parsing,Antlr,Xtext,我是xText的新手,几天前我安装了,这看起来像是一个简单的问题,但我还没有找到解决方案,我一直在搜索谷歌 基本上我想定义一种汇编自定义语言 以下是我的定义: grammar org.comp.language.ASAWriter with org.eclipse.xtext.common.Terminals generate aSAWriter "http://www.comp.org/language/ASAWriter" ASAWriter : (ModeloASA += Instru

我是xText的新手,几天前我安装了,这看起来像是一个简单的问题,但我还没有找到解决方案,我一直在搜索谷歌

基本上我想定义一种汇编自定义语言

以下是我的定义:

grammar org.comp.language.ASAWriter with org.eclipse.xtext.common.Terminals

generate aSAWriter "http://www.comp.org/language/ASAWriter"

ASAWriter :
(ModeloASA += Instructions)* 
;


Instructions:
    readInteger|readSmallInteger|readMediumInteger
    ;

readMediumInteger:
    'RMI' Register '-' MEDIUMINT ';'
;

readInteger:
    'RI' Register '-' INT ';'
;

readSmallInteger:
    'RSI' Register '-' SMALLINT ';'
;


Register:
'REG0'|'REG1'|'REG2'|'REG3'|'REG4'  
;


terminal SMALLINT:
    '1'|'2'|'3'
;

terminal MEDIUMINT:
    '1'|'2'|'3'|'4'|'5'|'6'|'7'|'8'|'9'|'10'
;
我的问题是,当我输入以下内容时:

RI REG0-2;
这应该是一个有效的指令,操作寄存器整数,但我得到以下错误: 输入“2”不匹配,需要规则\u INT

基本上,问题是数字“2”被使用,但使用的是SMALLINT而不是INT


有没有办法解决这个问题?或者如果我的方法是正确的?

lexer独立于解析器运行。2将始终被解析为SMALLINT,因为该规则首先出现

将其作为解析器规则进行处理:

mediumint: SMALLINT_TOKEN | MEDIUMINT_TOKEN;

SMALLINT_TOKEN:
    '1'..'3'
;

MEDIUMINT_TOKEN:
    '4'..'10'
;
或者根本不在解析器中处理它。相反,将所有数字解析为int,然后检查抽象语法树/解析逻辑(如果数字太大)