Geschrieben um 08:04 am 22.04.2011 | Zitat | Editieren | Löschen | |
Mitglied Bachelor Gumby Beiträge: 40 | Hallo zusammen! Ich will eine Wand, die einen Hof im Süden abriegelt, von der Hauswand unterschieden und versuche gerade, das erweitere Parsen einzubinden, das Martin hier beschrieben hat. Problem: Der Compiler beschwert sich, dass die Property parse_ref nicht definiert ist; wenn ich das nachhole (global oder als individuelle Prop), stürzt Glulx nach der ersten Eingabe ab. Schade auch, aber nicht dramatisch, denn es muss ja auch mit parse_name gehen. Das gab's im Forum auch schon und müsste etwa so aussehen:
Da ist bestimmt noch ein bisschen Schrott und/oder Redundanz drin, aber mein Problem liegt im der Unterscheidung von "in" und "im", das auch bei anderen vielleicht umständlicheren parse_name-Props auftaucht: Zitat:
Was meinst du, die Steinmauer oder die Hauswand?
Ich habe nur Folgendes verstanden: die Steinmauer betrachten.
Eine gut 2 m hohe aus Betonziegeln gemauerte Steinwand umgibt den Hof. Wie kann ich den Parser dazu bringen, die kontrahierte Form 'im' als einfache Präposition anzusehen? Ich glaube, dann müsste es gehen. Schöne Grüße, Christof |
Geschrieben um 10:41 am 22.04.2011 | Zitat | Editieren | Löschen | |
Mitglied Retired Gumby Beiträge: 1062 | Um Martins erweiterte Parser-Möglichkeiten zu nutzen, musst du zunächst eine Konstante definieren; damit schaltest Du die experimentellen Features frei:
Dann kanst du
Viele Grüße, Christian |
Geschrieben um 18:09 am 22.04.2011 | Zitat | Editieren | Löschen | |
Mitglied Bachelor Gumby Beiträge: 40 | Hi Christian, vielen Dank für die fixe Antwort! Die Konstante hatte ich definiert und zwar am Angfang mit den anderen Konstanten vor den Globals. Ohne sie kann der Parser mit parse_ref doch gar nichts anfangen, oder? Wenn ich sie aber definiere, stürzt Glulx ab und Frotz hängt sich auf. Das mit der Umdeutung von 'im' zu 'in' 'dem' habe ich mir im Prinzip gedacht, aber ich werde nicht ganz schlau aus dem, was mit der NextWord-Funktion (Routine? Variable?) passiert. Wäre dann 'dem' das nächste NextWord nach 'in'? Ich vermute, es wäre nicht, denn dann müsste ja Folgendes funktionieren:
Tut es aber nicht. Stattdessen habe ich es mit einem Befehl versucht, den ich hier gefunden habe, und meine parse_name erweitert:
Auch das klappt nicht. Muss ich Descriptors() an anderer Stelle einbauen? Schöne Grüße, Christof |
Geschrieben um 18:42 am 22.04.2011 | Zitat | Editieren | Löschen | |
Mitglied Retired Gumby Beiträge: 1062 | C++:
Seltsam. Bei mir funktioniert das mit dem erweiterten Parsen alles super. Ich habe das auch schon in längerem Code (Z) verwendet ohne dass irgendwas abgestürzt ist. Vielleicht magst Du mir mal Deinen Code schicken; möglicherweise entdecke ich ja, was nicht stimmt. Edit: Mein Testcode:
Ergibt: Mein I6-Testspiel:
Ein interaktiver Probelauf Release 1 / Serial number 110422 / Inform v6.32 Library 6/11 SD Testraum Hier wird getestet. Du siehst hier ein Tor im Süden.
[Echo on.]
[Echo: "u tor in dem sueden"] Du siehst nichts Besonderes an dem Tor im Süden. Alles tipptopp. Hast Du dran gedacht, dass parse_ref ein Objekt enthalten muss? (Vielleicht statt s_obj die Vokabel 'sueden' eingetragen oder s_obj mit s_to verwechselt? ;-)) Schöne Ostern, Christian |
Geschrieben um 23:20 am 22.04.2011 | Zitat | Editieren | Löschen | |
Mitglied Bachelor Gumby Beiträge: 40 | Hi! ChristianB:
Mach ich, aber wohl erst nach Ostern. Danke für das Angebot. Zitat:
Knurrr! Als wenn ICH... Frechheit! Schöne Grüße, Christof |
Geschrieben um 15:51 am 26.04.2011 | Zitat | Editieren | Löschen | |
Mitglied Bachelor Gumby Beiträge: 40 | Also jetzt für alle, die es wissen wollen: Constant EXTENDED_PARSER definieren; im entsprechenden Objekt die Properties parse_ref und prep definieren; die Parserroutine parse_name wird nicht benötigt; die Entry Point-Routine parse_noun darf nicht verwendet werden - die Kombo mit parse_ref führt zum Absturz. Danke an Christian für die Fehlersuche. Christof |