ANTRL4分析错误

时间:2019-03-21 11:33:11

标签: java parsing antlr4

在学习ANTRL4时,我尝试解析非常基本的模式,该模式可以具有一个或多个数字

Abc.g4

grammar Abc;

@header {
    package antlr4;
}

fragment DIGIT : [0-9]+;

log : DIGIT;

主要方法

public class OwnParser extends AbcBaseListener
{


    public static void main(String args[])
    {
        String javaClassContent = "9";
        AbcLexer abcLexer = new AbcLexer(CharStreams.fromString(javaClassContent));

        CommonTokenStream tokens = new CommonTokenStream(abcLexer);
        AbcParser parser = new AbcParser(tokens);

         ParseTree tree = parser.log();

        ParseTreeWalker walker = new ParseTreeWalker();
        OwnParser listener= new OwnParser();

        walker.walk(listener, tree);
    }
}

但是当我执行此操作时,它说:

  

第1行:0令牌识别错误:“ 9”

     

行1:1缺少“”处的DIGIT

     

输入的规则:<缺少数字>

我想念什么吗?

1 个答案:

答案 0 :(得分:2)

由于未定义任何与9相匹配的词法分析器规则,因此输入9上出现错误。实际上,您根本没有定义任何词法分析器规则。请注意,您仅将DIGIT定义为一个片段,而这些片段不会产生令牌。

您还应该在语法中得到警告“语法分析器中令牌DIGIT的隐式定义”。

如果您从fragment的定义中删除了DIGIT关键字,那么这两个问题都将消失。