ANTL4 在解析过程中抛出 NullPointerException

ANTL4 Throws NullPointerException during parsing process

我使用以下语法编写了一个简单的 PHP 解析器代码:https://github.com/antlr/grammars-v4/tree/master/php

PhpLexer lexer = new PhpLexer(new ANTLRInputStream("echo 'aaa';"));
CommonTokenStream tokens = new CommonTokenStream(lexer);
PhpParser parser = new PhpParser(tokens);
parser.consume();

不幸的是它抛出一个异常:

Exception in thread "main" java.lang.NullPointerException
at org.antlr.v4.runtime.Parser.consume(Parser.java:584)
at com.test.Main.main(Main.java:24)

怎么了?如何解决?

我使用 ANTLR 版本。 4.7.2.

consume 不是 PHP 语法中定义的规则。试试这个:

parser.htmlDocument();

并打印 htmlDocument 返回的解析树:

PhpLexer lexer = new PhpLexer(CharStreams.fromString("echo 'aaa';"));
PhpParser parser = new PhpParser(new CommonTokenStream(lexer));
System.out.println(parser.htmlDocument().toStringTree(parser));

将打印:

(htmlDocument (htmlElementOrPhpBlock (htmlElements (htmlElement echo 'aaa';))) <EOF>)

如您所见,它会将您的输入识别为 HTML。如果你解析<?php echo 'aaa';,它会被识别为PHP。