无法使用antlr分析int



我正在尝试解析int,但我只能解析多位数的int,而不能解析单位数的int。

我把它缩小到一个非常小的lexer和解析器,它是我基于antlr.org中的示例语法的,如下所示:

# IntLexerTest.g4
lexer grammar IntLexerTest;
DIGIT
    : '0' .. '9'
    ;
INT
   : DIGIT+
   ;

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

当我试图单独解析数字3时,我得到了"行1:0不匹配的输入'3',期望INT"。另一方面,如果我试图解析33,那也没关系。我做错了什么?

lexer从上到下匹配规则。当两个(或多个)规则匹配相同数量的字符时,首先定义的规则将获胜。这就是为什么一个数字被匹配为DIGIT并且两个或更多个数字被作为INT

你应该做的是把DIGIT变成fragment。片段只被其他lexer规则使用,永远不会成为它们自己的令牌:

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

相关内容

  • 没有找到相关文章

最新更新