ANTL4 генерирует исключение NullPointerException во время анализа - PullRequest
1 голос
/ 01 апреля 2020

Я написал простой 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 ver. 4.7.2.

1 Ответ

1 голос
/ 01 апреля 2020

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.

...