gpt4 book ai didi

java - JavaCC/JJTree 节点类中缺少字段?

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

我从JavaCC“继承”了一个使用JJTree的项目实现一个简单的语言解析器。由于代码已有 5 年多了,我决定在进行任何实际开发之前将所有依赖项(包括 JavaCC)更新到最新版本。

因此,我删除了所有JJTree/JavaCC生成的文件并使用最新版本(5.0)重建它们。然而,生成的文件似乎缺少以前存在的字段和方法,并且代码不再编译。

我假设 JavaCC 中发生了一些变化,需要我更新语法文件,因此我尝试了当前 JavaCC 发行版中的 Interpretter 示例,得到了相同的结果:缺少不包含的类字段允许代码编译。

例如,以下是 Interpretter 示例的 SPL.jjt 的定义:

void Id() :
{
Token t;
}
{
t = <IDENTIFIER> { jjtThis.name = t.image; }
}

此示例的文件夹包含一个 ASTId.java 文件,该文件最初包含以下内容:

public class ASTId extends SimpleNode {
String name;

public ASTId(int id) {
super(id);
}

public ASTId(SPLParser p, int id) {
super(p, id);
}

public void interpret()
{
stack[++top] = symtab.get(name);
}
}

重新生成 AST*.java 文件后,内容发生了变化:

public class ASTId extends SimpleNode {
public ASTId(int id) {
super(id);
}

public ASTId(SPLParser p, int id) {
super(p, id);
}
}

这里缺少很多,因此 SPLParser.java 生成的文件无法编译,因为它使用了相应类中未定义的字段。

我错过了什么?是否有我必须使用的 JJTree 或 JavaCC 选项?也许要在语法文件中进行修改?或者,由于我真的不知道原始文件是否已被编辑,我是否应该直接修改生成的文件并手动添加缺失的位?

我没有使用 JavaCC 的经验,因此我希望得到任何解决此问题的提示。

最佳答案

编辑生成的节点文件是一种非常标准的做法...但解析器文件和 token 管理器不应更改;这就是 TOKEN_MGR_DECLS 和语法文件中的代码的用途。

人们编辑这些文件的原因是它们不经常更改......当然,当他们这样做时,会有点痛苦。

关于java - JavaCC/JJTree 节点类中缺少字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5371571/

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