无法使用antlr解析整数

时间:2015-12-10 17:03:04

标签: parsing antlr antlr4

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

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

{{1}}

当我尝试单独解析数字3时,我得到“行1:0不匹配的输入'3'期望INT”。另一方面,如果我尝试解析33,那很好。我做错了什么?

1 个答案:

答案 0 :(得分:2)

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

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

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

INT
 : DIGIT+
 ;