Prser für Benutzereingaben



  • Hallo,

    hab ich folgendes Problem:
    in meine Programm gibt es eine kleine Shell, welche befehle vom Benutzer engegen nimmt..
    Ich schreiben gerade an einem Parser (rekursiven Abstieg) um die Befehle zu verarbeiten. Es soll so ablaufen dass der Benuter einen bestimmten C-Funktion aufruft.
    Ist ein Parser mit rekursiven Abstieg da der richtige Weg oder geht das nicht auch einfacher.

    Tia,

    Christopher 🙂



  • Was verstehst du unter "rekursiven Abstieg"?



  • AJ: Das ist ein feststehender Begriff (Recursive Descent), bitte googeln. Und verschieben 🙂

    Chris: Ob du mit einem RD-Parser (das ist wahrscheinlich nicht die "offizielle" Abkürzung, aber was solls) deine Eingaben bearbeiten kannst, hängt von der Grammatik ab. Bei einigen Grammatiken ist er tatsächlich der richtige, bei anderen aber muss man ziemlich viel basteln (z.B. Linksrekursion beseitigen). Es ist aber auch möglich, dass deine Shell-Grammatik so simpel ist, dass ein RD-Parser völliger Overkill ist.

    Enthält die Grammatik überhaupt sowas wie verschachtelte Konstrukte?



  • Vielen dank Bashar, das ist genau die Sache, ein richtiger Parser z. B mit "RD" is zuviel des Guten.

    Die Shell-Grammatik besteht eigentlich nur daraus, dass bestimmte "Funktionen" auf z.B Html-doc ausgeführt werden.

    Ein Bespiel: > analys html.doc

    Welcher Parser wär da am Besten geeignet?

    Tia,

    Chris, 🙂



  • Also wenn deine Grammatik derart simpel ist, kannst du dir deinen Parser einfach mittels normalen Stringoperationen selbst stricken.

    Wenn ich dass jetzt richtig verstanden hab sieht deine Grammatik etwa so aus:

    //Pseudo EBNF
    
    S := Command ' ' (Arg*)?
    Arg := [a-zA-Z./\-] 
    Command := "analyse" | "foo" | "bar" | "baz"
    

    Dafür könnte man zwar nen parser bauen, aber das wär wie mit Kanonen auf Spatzen. Also mein Tip: Bau dir die Commandoverarbeitung mittels einfachen Anweisungen selbst.



  • Dieser Thread wurde von Moderator/in AJ aus dem Forum ANSI C in das Forum Rund um die Programmierung verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.


Anmelden zum Antworten