| Geschrieben um 08:04 am 22.04.2011 | Zitat | Editieren | Löschen | |
Mitglied Bachelor Gumby Beiträge: 40 | <td valign="top"><div class="post"><p>Hallo zusammen!</p> <p>Ich will eine Wand, die einen Hof im Süden abriegelt, von der Hauswand unterschieden und versuche gerade, das erweitere Parsen einzubinden, das Martin <a href="http://forum.ifzentrale.de/viewtopic.php?t=849&highlight=parsename"> hier</a> beschrieben hat.</p> <p>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.</p> <p>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:</p> <p>“`</p> <p>Object -> mauer “Steinmauer”</p> <p>with description “Eine gut 2 m hohe aus Betonziegeln gemauerte</p> <p> Steinwand umgibt den Hof.”, </p> <p> name ‘wand’ ‘steinmauer’ ‘mauer’ ‘steinwand’ ‘hofmauer’</p> <p> ‘betonwand’ ‘in’ ‘im’ ‘sueden’,</p> <p> parse_name [ n wd;</p> <p> wd = NextWord();</p> <p> while (WordInProperty(wd, self, name)) {</p> <p> wd = NextWord();</p> <p> n++;</p> <p> }</p> <p> return n; </p> <p> ],</p> <p>has female scenery;</p> <p>“`</p> <p>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:</p> <p><strong>Zitat:</strong></p> <blockquote> <p>u wand</p> </blockquote> <p>Was meinst du, die Steinmauer oder die Hauswand?</p> <blockquote> <p>u wand im süden</p> </blockquote> <p>Ich habe nur Folgendes verstanden: die Steinmauer betrachten.</p> <blockquote> <p>u wand in süden</p> </blockquote> <p>Eine gut 2 m hohe aus Betonziegeln gemauerte Steinwand umgibt den Hof.</p> <p>Wie kann ich den Parser dazu bringen, die kontrahierte Form ‘im’ als einfache Präposition anzusehen? Ich glaube, dann müsste es gehen.</p> <p>Schöne Grüße,</p> <p>Christof</p> </div></td> |
| Geschrieben um 10:41 am 22.04.2011 | Zitat | Editieren | Löschen | |
Mitglied Prof Gumby Beiträge: 569 | <td valign="top"><div class="post"><p>Um Martins erweiterte Parser-Möglichkeiten zu nutzen, musst du zunächst eine Konstante definieren; damit schaltest Du die experimentellen Features frei:</p> <p><code>Constant EXTENDED_PARSER;</code></p> <p>Dann kanst du</p> <p>“`prep ‘in’,</p> <p>parse<em>ref s</em>obj,“`</p> <p>bei der Wand definieren und sie sollte als WAND IM SÜDEN angesprochen werden können.</p> <p>Wenig bekannt, aber immens wichtig:</p> <p><strong>Die Verschmelzung von Präposition und Artikel (IM, AM, ZUM usw.) können niemals vom deform-Parser verstanden werden, weil vor dem Parsen das Wort in der Spieleringabe aufgelöst wird; aus IM wird IN DEM, aus AM wird AN DEM usw.</strong> Deshalb brauchst Du nur ‘in’ zu definieren. DEM wird als Deskriptor überlesen (ignoriert). Das ist im deutschen Inform 7 übrigens genauso.</p> <p>(Das wäre vielleicht auch noch mal ein Fall für den Libchecker.)</p> <p>Hier mal die komplette Liste der (einzelnen) Vokabeln, die umgewandelt werden (aus German.h):</p> <p>“`Array LanguageSynonyms table</p> <p> ‘am’ “an dem”</p> <p> ‘ans’ “an das”</p> <p> ‘aufs’ “auf das”</p> <p> ‘beim’ “bei dem”</p> <p> ‘durchs’ “durch das”</p> <p> ‘hinterm’ “hinter dem”</p> <p> ‘hinters’ “hinter das”</p> <p> ‘im’ “in dem”</p> <p> ‘ins’ “in das”</p> <p> ‘nebens’ “neben das”</p> <p> ‘uebers’ “ueber das”</p> <p> ‘ueberm’ “ueber dem”</p> <p> ‘unters’ “unter das”</p> <p> ‘unterm’ “unter dem”</p> <p> ‘vom’ “von dem”</p> <p> ‘vors’ “vor das”</p> <p> ‘vorm’ “vor dem”</p> <p> ‘zum’ “zu dem”</p> <p> ‘zur’ “zu der”</p> <p> ‘darin’ “in ihm/r”</p> <p> ‘damit’ “mit ihm/r”</p> <p> ;</p> <p>“`</p> <p>Viele Grüße,</p> <p>Christian</p> </div></td> |
| Geschrieben um 18:09 am 22.04.2011 | Zitat | Editieren | Löschen | |
Mitglied Bachelor Gumby Beiträge: 40 | <td valign="top"><div class="post"><p>Hi Christian, vielen Dank für die fixe Antwort!</p> <p>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.</p> <p>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 (<em>Routine</em>? <em>Variable</em>?) passiert. Wäre dann ‘dem’ das nächste NextWord nach ‘in’? Ich vermute, es wäre nicht, denn dann müsste ja Folgendes funktionieren:</p> <p>“` </p> <p>parse_name [w1 w2 w3;</p> <p> if (NextWord() ~= ‘wand’ or ‘mauer’) return 0;</p> <p> w1 = NextWord();</p> <p> w2 = NextWord();</p> <p> w3 = NextWord();</p> <p> if (w1 == ‘in’ && w2 == ‘dem’ && w3 == ‘sueden’) return 3;</p> <p> return 1;</p> <p>],</p> <p>“`</p> <p>Tut es aber nicht.</p> <p>Stattdessen habe ich es mit einem Befehl versucht, den ich <a href="http://forum.ifzentrale.de/viewtopic.php?t=733&highlight=flexible">hier </a>gefunden habe, und meine parse_name erweitert:</p> <p>“`parse_name [ n wd;</p> <p> wd = NextWord();</p> <p> while (WordInProperty(wd, self, name)) {</p> <p> wd = NextWord();</p> <p> if (wd == ‘in’) Descriptors();</p> <p> n++;</p> <p> }</p> <p> return n;</p> <p>],</p> <p>“`</p> <p>Auch das klappt nicht. Muss ich <em>Descriptors()</em> an anderer Stelle einbauen?</p> <p>Schöne Grüße,</p> <p>Christof</p> </div></td> |
| Geschrieben um 18:42 am 22.04.2011 | Zitat | Editieren | Löschen | |
Mitglied Prof Gumby Beiträge: 569 | <td valign="top"><div class="post"><p><strong>C++:</strong></p> <blockquote> <p>Wenn ich sie aber definiere, stürzt Glulx ab und Frotz hängt sich auf.</p> </blockquote> <p>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.</p> <p>Edit:</p> <p>Mein Testcode:</p> <p>“`Constant Story “Testspiel”;</p> <p>Constant Headline “^Ein interaktiver Probelauf^”;</p> <p>Constant EXTENDED_PARSER;</p> <p>Include “Parser”;</p> <p>Include “VerbLib”;</p> <p>Object Testraum “Testraum”</p> <p> with</p> <p> description “Hier wird getestet.”,</p> <p> has light;</p> <p> </p> <p>Object “Tor im Süden” Testraum</p> <p> with name ‘tor’,</p> <p> prep ‘in’,</p> <p> parse<em>ref s</em>obj,</p> <p> has neuter;</p> <p>[ Initialise;</p> <p> location = Testraum;</p> <p> print “^^^”;</p> <p>];</p> <p>Include “GermanG”;</p> <p>“`</p> <p>Ergibt:</p> <p><strong>Mein I6-Testspiel:</strong></p> <blockquote> <p>Testspiel</p> </blockquote> <p>Ein interaktiver Probelauf</p> <p>Release 1 / Serial number 110422 / Inform v6.32 Library 6/11 SD</p> <p>Testraum</p> <p>Hier wird getestet.</p> <p>Du siehst hier ein Tor im Süden.</p> <blockquote> <p>echo</p> </blockquote> <p>[Echo on.]</p> <blockquote> <p>u tor im süden</p> </blockquote> <p>[Echo: “u tor in dem sueden”]</p> <p>Du siehst nichts Besonderes an dem Tor im Süden.</p> <p>Alles tipptopp. Hast Du dran gedacht, dass parse<em>ref ein Objekt enthalten muss? (Vielleicht statt s</em>obj die Vokabel ‘sueden’ eingetragen oder s<em>obj mit s</em>to verwechselt? ;-))</p> <p>Schöne Ostern,</p> <p>Christian</p> </div></td> |
| 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 parsenoun darf nicht verwendet werden - die Kombo mit parseref führt zum Absturz. Danke an Christian für die Fehlersuche. Christof |