我想通过声明这是针对一个班级来做序,所以请不要为我解决这个问题。
我的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();
}
现在这是My 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 :(得分:0)
原来我的问题出在DeclSeq和StmtSeq。
我在while循环中声明变量,从而在循环退出后丢失它们。 DOH