Ich versuche einen Taschenrechner in C oder Objective-C zu erstellen, der eine Zeichenkette in den Zeilen von
akzeptiert %Vor%und gibt die Antwort 2920 zurück. Ich würde es vorziehen, keinen Generator wie Lex oder Yacc zu verwenden, also möchte ich es von Grund auf programmieren. Wie soll ich das machen? Gibt es außer dem Drachenbuch irgendwelche empfohlenen Texte, die dieses Thema abdecken?
Dave DeLongs DDMathParser Klasse kann Ihnen viel Zeit und Ärger ersparen.
>Der Rangierbahnhof-Algorithmus wurde bereits erwähnt. Der andere Klassiker ist der einfache rekursive Abstieg. Hier ist eine ziemlich kurze, die ich vor vielen Jahren geschrieben habe:
%Vor%Beachten Sie, dass dieser Parameter nur die Eingabe analysiert und in die RPN-Form konvertiert. Wenn Sie das Ergebnis stattdessen interpretieren möchten, ersetzen Sie den Ausdruck jedes Operanden / Operators durch die tatsächliche Auswertung des Ergebnisses dieses Teils des Ausdrucks.
Ich habe das in CSE340: Einführung in Programmiersprachen in meinem Junior-Jahr der CS in der Schule getan. Wenn Sie wirklich einen Parser von Grund auf neu programmieren wollen, sollten Sie darauf vorbereitet sein, dass es "ein Semester lang" sein könnte.
Sie müssen ein Token erstellen, analysieren, einen abstrakten Ausdrucksbaum erstellen, auswerten usw.
Wir verwendeten Louden's Programmiersprachen: Prinzipien und Praxis . Ich mochte es. Obwohl es nicht die beste Aufgabe war, Sie durch den Implementierungsprozess zu führen.
Natürlich wäre das mehr als "von Grund auf neu programmieren". Du musst eine Grammatik erstellen und dann einen Parser erstellen, um die Regeln zu verarbeiten. Abgesehen von einer Lernaktivität bin ich mir nicht sicher, warum du das tun willst.
Tags und Links c objective-c parsing lexical-analysis