Где я должен инициализировать переменные для дерева анализа рекурсивного спуска ОО? - PullRequest
0 голосов
/ 21 мая 2010

Я хотел бы предварить это, заявив, что это для класса, поэтому, пожалуйста, не решайте это для меня.

Одна из моих лабораторий для моего класса 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();
    ...

Но это дало мне ту же ошибку. Мне нужно, чтобы дерево разбора было построено, чтобы я мог сделать красивую печать и выполнить команду, но, как я уже сказал, я получаю только левую ветвь.

Любая помощь будет оценена. Пояснения, почему они так ценятся.

Спасибо, Васт

1 Ответ

0 голосов
/ 05 июня 2010

Оказывается, моя проблема была в DeclSeq и StmtSeq.

Я объявлял переменные внутри цикла while, теряя их после выхода из цикла. DOH

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...