Antrl4的解析错误



在学习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''

丢失数字

输入规则:<缺少数字>

我想念什么吗?

您在输入9上会出现错误,因为您没有定义与9匹配的任何Lexer规则。实际上,您根本没有定义任何Lexer规则。请注意,您将DIGIT定义为片段,而片段不会产生令牌。

您还应该在您的语法中获得警告"对解析器中的令牌数字的隐性定义"。

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

相关内容

  • 没有找到相关文章

最新更新