2013-07-30 57 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,但我不認爲它會發生在節點類中。 –