我「繼承了」使用來自JavaCC的JJTree實現簡單語言分析器的項目。由於代碼已超過5年,我決定在進行任何實際開發之前將所有依賴項(包括JavaCC)更新爲最新版本。JavaCC/JJTree節點類中缺少字段?
因此,我刪除了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的經驗,所以我將不勝感激任何提示來解決這個問題。
我在開始之前將原始源代碼連接到我自己的VCS。我可以輕鬆地添加缺失的位,甚至可以將源樹還原爲配置的版本。我只是發現編輯*生成的*文件有點*令人不安*因爲我的敏感性:-) – thkala 2011-03-20 21:27:25
我最終擴展了JavaCC'SimpleNode'類並使用了'NODE_CLASS'選項,這樣我就不必手動編輯生成的文件。不利的一面是,大多數節點類都有一些額外的字段是無用的 - 另外我必須處理一些命名空間污染。據我所知,每個節點的基類定義仍然在JavaCC心願中... – thkala 2011-03-21 17:12:12