Parsing ANTLR:对空格敏感的解析器规则

Parsing ANTLR:对空格敏感的解析器规则,parsing,antlr,grammar,antlr3,Parsing,Antlr,Grammar,Antlr3,我有以下输入数据: Valid string: "123A" Invalid string: "123 A" Valid string: "111A <= 5 AND 222A" Invalid string: "111 A <= 5 AND 222A" 问题是my_id与123A和123A都匹配。当检测到123 a时,如何抛出解析错误 非常感谢您的帮助。您确定123 A被评估为my_id而不是INT和其他内容吗?由于INT标记不是一个片段,如果您有一个接受a的规则,它可能会以这

我有以下输入数据:

Valid string: "123A"
Invalid string: "123 A"

Valid string: "111A <= 5 AND 222A"
Invalid string: "111 A <= 5 AND 222A"
问题是
my_id
123A
123A
都匹配。当检测到
123 a
时,如何抛出解析错误


非常感谢您的帮助。

您确定
123 A
被评估为
my_id
而不是
INT
和其他内容吗?由于
INT
标记不是一个片段,如果您有一个接受
a
的规则,它可能会以这种方式进行计算,那么使用另一个lexer项不是更容易吗。像
INTA:DIGIT+('A'|'A')。如果在另一个上下文中使用后跟“A”的数字,这只会导致问题。@Benlitz我忘了指定
WS
,这是使语法忽略空格的lexer规则@StefanA我怎么还能将INTA转换为INT(
my_id:INTA->INT;
)?对于
123A
我只对保留
123
和修剪字母感兴趣。您可以在lexer规则(或解析器规则/在操作中/在树构造中)中设置标记类型和标记文本。
my_id:  INT ('A'|'a') -> INT;
fragment DIGIT: '0' .. '9';
INT :   DIGIT+ ;
WS  :   (' '|'\t'|'\n'|'\r')+ {$channel=HIDDEN;} ;