无法用antlr解析整数

unable to parse ints with antlr

我正在尝试解析整数,但我只能解析多位整数,不能解析一位整数。

我根据 antlr.org 中的示例语法将其缩小为一个非常小的词法分析器和解析器,如下所示:

# IntLexerTest.g4
lexer grammar IntLexerTest;

DIGIT
    : '0' .. '9'
    ;

INT
   : DIGIT+
   ;


#IntParserTest.g4
parser grammar IntParserTest;
options {
    tokenVocab = IntLexerTest;
}

mything
    : INT
    ;

当我尝试单独解析数字 3 时,我得到 "line 1:0 mismatched input '3' expecting INT"。另一方面,如果我尝试解析 33,没问题。我做错了什么?

词法分析器从上到下匹配规则。当 2 个(或更多)规则匹配相同数量的字符时,首先定义的规则将获胜。这就是为什么将单个数字匹配为 DIGIT 而将两个或更多数字匹配为 INT.

的原因

你应该做的是让DIGIT变成fragment。片段仅供其他词法分析器规则使用,永远不会成为它们自己的标记:

fragment DIGIT
 : '0' .. '9'
 ;

INT
 : DIGIT+
 ;