gpt4 book ai didi

java - ANTLR4只能解析类语句,不能解析整个文件

转载 作者:行者123 更新时间:2023-12-02 08:47:47 36 4
gpt4 key购买 nike

我创建了一个简单的代码来解析 PHP 文件:

<?php
namespace aaa;

class Xyz {

}

我使用ANTL4编写了一个解析器,语法是:https://github.com/antlr/grammars-v4/tree/master/php :

PhpLexer lexer = new PhpLexer(new ANTLRInputStream((new BufferedReader(new FileReader("./code/test.php")))));
CommonTokenStream tokens = new CommonTokenStream(lexer);
PhpParser parser = new PhpParser(tokens);

PhpParserBaseListener listener = new PhpParserBaseListener();

parser.addParseListener(listener);
parser.classDeclaration().enterRule(listener);

parser.getSerializedATN();

它返回一个错误:

line 3:0 mismatched input 'namespace' expecting {'abstract', 'class', 'final', 'interface', 'partial', 'private', 'trait'}

但是当我删除“namespace aaa;”时声明:

<?php

class Xyz {

}

一切都很好。

如何解决这个问题?

最佳答案

由于您没有显示任何语法,因此无法提供具体答案。另外,我真的对 Antlr 的 PHP 运行时了解不够,只能大胆猜测它的作用:

parser.classDeclaration().enterRule(listener);

但一般来说,Antlr4 会为每个非终结规则创建一个接口(interface),因此我推测 parser.classDeclaration() 对应于 classDeclaration 规则,它可能代表一个类声明,而不是整个程序。也许您应该将 classDeclaration 更改为语法中的顶级规则。

关于java - ANTLR4只能解析类语句,不能解析整个文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60973898/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com