tom as: Parser selber schreiben

Hallo,

ich wollte mal fragen, ob hier einer mir mit dem Schreiben eines Parsers helfen kann. Ich möchte eine Matheanwendung schreiben, die so etwas zB versteht:

A = P(-2|-3);
B = P(3|5);
C = P(1|1);
D = P(2|2);
a = [AB];
c = CD;
{S} = a ∩ c;

Dabei bin ich soweit durch schachteln von if-Abfragen auch schon recht weit gekommen, wenn gleich der Code jetzt schon 400 Zeilen umfasst.

Das Problem ist jetzt folgendes: Wenn der Anwender in der letzten Zeile mehr als einen Punkt angibt, so muss eine Fehlermeldung auftauchen, da Strecke und Gerade maximal nur einen Punkt gemeinsam haben können (wenn sie aufeinander liegen sind es zwar unendlich viele, aber die kann man ja eh nicht eintippen). Ich habe damit eine kontextsensitive Sprache.

Jetzt wollte ich dann doch mal fragen, ob es hier nicht jemanden gibt, der mir helfen kann, wie das ganze elegant löse. Also mir irgendwie so helfen kann:

1. Hat Beispielcode
2. Hat ein dokument/link in dem detailliert beschrieben wird, wie man solche Parser in Java/JavaScript schreibt
3. Kennt ein Forum in das meine Frage vielleicht besser reinpasst.

Ich wäre für jede Hilfe dankbar.

  1. Hallo,

    wenn du über 400 Zeilen hast stimmt imho etwas nicht. Wahrscheinlich bist du falsch an die Sachen rangegangen. Informiere dich mal über Grammatiken (in Sinne der theoretischen Informatik) und Backus-Naur-Normaform (BNF) bzw. die Erweiterte Version (EBNF).

    Über diese definierst du die Regeln für deine Sprache (hier wieder im Sinne der theo. Informatik). Die Regeln, die dabei aufstellst, kannst du relativ einfach und schnell in einen Parser übertragen. (Es gibt sogar Programme, die das automatisch können, nur ist mir für JavaScript keins bekannt).

    Ansonsten könnte dir z.B. noch das Buch Compiler Construction von Nikolaus Wirth helfen. Ein großer Teil des Compiler Baus ist die Konstruktion von Parsern. Das Buch bekommst du hier als PDF: http://www.oberon.ethz.ch/WirthPubl/CBEAll.pdf

    Gruß

    Stareagle