Zeichenfolge Verarbeitung in c

8

Das Ziel meines Programms ist es, durch eine Zeichenfolge zu schauen und in der Lage zu sein, die Dialogfrage und die Antworten herauszunehmen.

Zum Beispiel:      ("do you like me?" ("yes" ("we're friends")) ("no" ("i hate you")) )

Das Programm würde "Do you like me?" und würde dir die Wahl geben, ja oder nein einzugeben. Sobald Sie die entsprechende Auswahl getroffen haben, würde es entweder "wir sind Freunde" oder "ich hasse dich" rauswerfen.

Gibt es irgendwelche Bibliotheken oder irgendwelche Lösungen, wie man das macht?

    
dLiGHT 12.03.2013, 20:02
quelle

2 Antworten

58

Korrigiere mich, wenn ich falsch liege, aber ein Lisp-Parser würde den Job ziemlich gut machen. : P Im Ernst, das sieht aus wie gut geklammerte Listen von Strings oder anderen eingeklammerten Ausdrücken. Ein einfacher rekursiver Parser genügt, erfinden Sie einfach eine Datenstruktur, die als Syntaxbaum für Ihre Anforderungen erstellt wird.

Edit: Verdammt, ich habe es endlich geschafft ... Huh, es ist keine einfache Aufgabe, zwischen 22 und 24 Uhr sogar einen sehr einfachen Parser richtig zu machen, das muss ich zugeben.

%Vor%

Verwendung:

%Vor%     
user529758 12.03.2013 20:06
quelle
7

Wenn Sie "etwas, das funktioniert", aber nicht robust ist, arbeiten viele Tricks. Wenn Sie wirklich wollen, dass es funktioniert, müssen Sie ein wenig auf LALR (1) Parsern lernen und dann entscheiden, ob Dies ist einfach genug, um Ihren eigenen Parser zu rollen (es ist) oder wenn Sie etwas wie YACC verwenden möchten.

Die kontextfreie Grammatik dafür scheint wie

auszusehen %Vor%

Dann analysieren Sie, welche Kombinationen der obigen Sprache zu Änderungen in der Verarbeitung führen können. Grundsätzlich können RESPONSES auf nichts reduziert werden oder etwas, das mit einem '(' beginnt), was bedeutet, dass Sie an diesem Punkt in der Verarbeitung unterscheiden können, ob Sie eine neue RESPONSE oder das Ende der FRAGE analysieren müssen, indem Sie sehen, ob Lookahead (noch nicht analysiertes Zeichen) ist '(' oder ')'.

Das Parsen in einem Modus ist ziemlich einfach. Wenn das Zeichen fest ist, überprüfen Sie einfach, ob es mit dem erwarteten übereinstimmt und leiten Sie den Index der analysierten Elemente weiter. Wenn das Zeichen nicht fixiert ist (wie im Text), verwenden Sie eine Routine, um zu überprüfen, ob es Grenzen gibt, und alles, was nicht erwartet wird, sollte den Parser in einen Fehlerzustand versetzen.

    
Edwin Buck 12.03.2013 20:27
quelle

Tags und Links