Wie schreibe ich einen Parser in C oder Objective-C ohne einen Parsergenerator?

8

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?

    
22222222 02.05.2011, 03:01
quelle

7 Antworten

1

Versuchen Sie Folgendes:

Ссылка

    
R.. 02.05.2011, 03:09
quelle
4

Dave DeLongs DDMathParser Klasse kann Ihnen viel Zeit und Ärger ersparen.

>     
Caleb 02.05.2011 03:16
quelle
2

Wenn ich mich richtig erinnere, können Sie dieses Problem mit zwei Stapeln lösen, einen für die Operatoren, den anderen für die Operanden.

%Vor%     
Eric Z 02.05.2011 03:05
quelle
2

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.

    
Jerry Coffin 02.05.2011 03:17
quelle
1

Ich denke das ist nah dran was du willst: Ссылка

    
c-smile 02.05.2011 03:04
quelle
0

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.

    
quelle
0

mit Objective-C NSLinguisticTagger kann eine gute Lösung sein

%Vor%     
hippo 19.11.2013 10:50
quelle