2013-07-30 49 views
1

所以,我想添加方法到SimpleNode的子类。例如,我有一个位置节点。运行jjt和javacc之后,将会生成一个Position.java。预计看起来像JJTree添加方法到节点类

class Position extends SimpleNode { 
    private int line, column; // I'll add private members here 
    ... 
    public int getLine() { 
     return this.line; 
    } // add some methods here 
    ... 
} 

现在,我正在生成的java文件的更改。但是,这样做并不是一个好主意,因为生成的java文件经常被删除并重新生成jjt文件。是否有可能在jjt文件中添加这些声明(我在手册中没有找到类似的内容)?我也在考虑派生它们的子类。它也不干净地工作。

+0

在选项中是否使用了'NODE_CLASS'变量?请参阅:https://javacc.java.net/doc/JJTree.html –

+0

是的。虽然成功生成了节点类。问题是我不想修改它们.. –

回答

3

您可以修改所有您喜欢的节点实现。 JJTree只会在缺失的情况下生成它们。 From the manual

如果您没有提供节点类的实现,JJTree会为您生成基于SimpleNode的示例实现。然后您可以修改实现以适应。

+0

谢谢!这很有用。我在问我是否有办法不修改Makefile生成的东西。我当前的解决方案是通过使用'jjtSetValue'将值添加到节点的值字段中。 –

+0

确定;在make文件中,可以删除生成的文件,运行JJTree以重新生成它们,然后在编译之前用sed或awk或其他方法修改生成的文件。这似乎比需要更复杂。我所做的是编辑生成的文件并将其检入到源存储库中。唯一的危险是,当有新版本的JJTree时,旧版本生成的节点文件将不兼容;我会说这种事情发生的可能性很小。我曾经遇到过ParseException,但我不认为它会发生在节点类中。 –