2010-05-21 29 views
0

我想通过说明这是为了上课,所以请不要为我解决这个问题。我应该在哪里初始化OO递归下降分析树的变量?

我的cse课程的一个实验室是为所提供的BNF创建一个解释器。我理解了大部分概念,但我试图建立我的树,但我不确定在哪里初始化值。我已经尝试了构造函数和方法,但Eclipse的调试器仍然只显示左分支,即使它完全运行。

这是我的主要程序,所以你可以了解我如何调用方法。

public class Parser { 

public static void main(String[] args) throws IOException { 

    FileTokenizer instance = FileTokenizer.Instance(); 
    FileTokenizer.main(args); 

    Prog prog = new Prog(); 

    prog.ParseProg(); 

    prog.PrintProg(); 

    prog.ExecProg(); 
} 

现在,这里是我的PROG类:

public class Prog { 
private DeclSeq ds; 
private StmtSeq ss; 

Prog() { 
    ds = new DeclSeq(); 
    ss = new StmtSeq(); 
} 

public void ParseProg() { 
    FileTokenizer instance = FileTokenizer.Instance(); 
    instance.skipToken(); //Skips program (1) 
// ds = new DeclSeq(); 
    ds.ParseDS(); 
    instance.skipToken(); //Skips begin (2) 
// ss = new StmtSeq(); 
    ss.ParseSS(); 
    instance.skipToken(); 
} 

我试过有

Prog() { 
    ds = null; 
    ss = null; 
} 

public void ParseProg() { 
    FileTokenizer instance = FileTokenizer.Instance(); 
    instance.skipToken(); //Skips program (1) 
    ds = new DeclSeq(); 
    ds.ParseDS(); 
    ... 

但它给了我同样的错误。我需要建立一个分析树,以便我可以做一个漂亮的打印和一个执行命令,但就像我说的,我只能得到左分支。

任何帮助,将不胜感激。解释为什么更值得赞赏。

谢谢你,华斯度

+0

你能告诉我们'DeclSeq'和'StmtSeq'的来源吗? – tangens 2010-05-21 06:27:51

回答

0

原来,我的问题是在DeclSeq和StmtSeq。

我在一个while循环中声明变量,因此在循环退出后会丢失它们。 DOH