parser aus BNF

kroschel

Mitglied
hi...
ich soll in Java einen parser (rekursiv absteigenden erkenner) aus folgender BNF schreiben:
expr -> ( list ) | a
list -> list, expr | expr

list hab ich umgestellt, damit kein BufferOverflow kommt.
list -> expr | expr, list

meine Scanner.java Klasse schreib mit die einzelnen Tolen in eine ArrayList()

ich habe folgende funktionen in meiner Parser.java
Code:
boolean readExpr(arraylist list){...}

boolean readList(arraylist list){
    if(readA(list)) return true;
     else {readOpen(list);
            readList(list);
            if(readClose(list)) return true;
} return false;
}

boolean readOpen(arraylist list){
    if (list.get(0).toString().equals("(") { 
            list.remove(0); 
            return true;
    }
 return false;
}

boolean readClose(arraylist list){...//s. readOpen nur Klammer zu}
boolean readA(arraylist list){ //s. readOpen nur Buchstabe a}
boolen readsymbol(arrayList list) {//s. readOpen nut Komma}


mein Problem ist folgendes: Wenn ich den Ausdruck ((a,a),a,(a)) parse, dann bricht er bei ((a,a) ab, da er eine Klammer zu erwartet und irdendwie das Backtracking nicht funktioniert.
Bei readList() und readExpr() hab ich eigendlich auch nur die Abfrage mif if gemacht. Hab ich irgendwo ein Denkfehler, oder müsste es so funktionieren? Hab mittlerweile ReadList() und ReadExpr() ein paarmal neu geschrieben, aber immer wieder der gleiche Abbruch.

Danke
Marcel
 
ich soll ihn ja selber schreiben ;) ... will auch wissen, wo mein Denkfehler ist. es kann ja nicht so schwer sein, hab schon schlimmeres programmiert (denk ich).
trotzdem danke für den Typ...
 
Zurück