Geschrieben um 13:52 am 20.08.2004 | Zitat | Editieren | Löschen | |
Mitglied Student Gumby Beiträge: 31 | In meinem Textadventure besitzt die Spielfigur eine Art Taschencomputer ('Compu-Tex'), mit dem diverse Dinge abgefragt werden können. Das ganze sieht so aus:
|
Geschrieben um 17:08 am 20.08.2004 | Zitat | Editieren | Löschen | |
Mitglied Dr Gumby Beiträge: 181 | Ich vermute mal dass der Fehler in der Extend-Anweisung liegen könnte. Wenn du mit legible arbeitest, wie hast du denn dann die Verben erweitert? |
Geschrieben um 17:35 am 20.08.2004 | Zitat | Editieren | Löschen | |
Mitglied Student Gumby Beiträge: 31 | Okay, ich hab's. Mit
|
Geschrieben um 18:26 am 20.08.2004 | Zitat | Editieren | Löschen | |
Mitglied Dr Gumby Beiträge: 181 | Bist du sicher? Genau damit würdest du ja beim "anschauen" automatisch "konsultieren". Ausserdem nimmst du durch replace jegliche alte Funktion von schau. |
Geschrieben um 18:45 am 20.08.2004 | Zitat | Editieren | Löschen | |
Mitglied Student Gumby Beiträge: 31 | Jo, hast recht. Funktioniert nur in Kombination mit
|
Geschrieben um 19:42 am 20.08.2004 | Zitat | Editieren | Löschen | |
Mitglied Dr Gumby Beiträge: 181 | Hmm... hörst sich jetzt eher so an als hättest du damit (fast) wieder den Urzustand hergestellt. Kann es sein dass du das Verb 'schau' etwas durcheinander gebracht hast? Aus der germang:
|
Geschrieben um 21:48 am 20.08.2004 | Zitat | Editieren | Löschen | |
Mitglied Prof Gumby Beiträge: 634 | Das Problem hat nichts damit zu tun, dass du ein Nachschlagewerk definiert hast, es tritt bei allen deutschen Inform-Spielen auf und sorgt öfters für Ärger. Schuld ist das topic-Token, das in Graham Nelsons Originalfassung jede beliebige Folge von Wörtern bis zum Ende oder bis zu einem Stoppwort, in unserem Fall 'nach', zulässt. Die Fehlermeldung kommt dann, wenn nach 'sieh' kein gültiges Objekt kommt: Die Zeile
schlägt dann fehl, weil noun nicht erkannt wird. Das ist die Stunde des topic-Tokens, gierig saugt es das fehlerhafte Wort (und alle weiteren Wörter) auf, bis es ans Ende stößt. Die Zeile
bleibt zwar größtenteils ungeparst, aber hier dann eine Fähigkeit des Inform-Parsers zum Zuge, die eigentlich gut, in diesem Falle aber nicht erwünscht ist: Fehlende Tokens können impliziert werden, und das geht auch, wenn eine Präposition vorangeht, schließlich sind die zweiten Objekte, die man gerne weglässt ja indirekte Objekte. Wie wir sehen, geht das sogar, wenn mehrere Präpositionen vorangehen, vermutlich weil Präpositionen im Sinne von Inform nicht immer Präpositionen im grammatischen Sinne sein müssen. Das Nachschalgewerk wird in deinem Fall nur implizit angenommen, weil es das einzige sichtbare Objekt ist, das nicht scenery ist, meistens kommt die unselige "...aber was, wie, womit?"-Meldung. Ich vermute, TLatex ist nur ein Topic-Hilfsobjekt, du verwendest GInfo.h, richtig? In diesem Falle solltest du überlegen, ob du beliebige Eingaben zulassen möchtest oder nicht. Mit einer Konstante kann man in GInfo.h von Frank Borger die "alte", Nelsonsche Topic-Grammatik anhängen, per Default wird sie aber ersetzt. Dann sollte es keine Probleme mehr mit missinterpretierten Topics geben. Im Englischen funktioniert das 'look' mit fehlerhaftem Objekt nur, weil in jedem Fall dem topic-Token eine Präposition vorangeht:
Wenn man sagen könnte "look figure 1.b up in textbook" gäbe es hier auch Probleme. Und natürlich bei Objekten, die 'up' im Namen haben. Dumm auch, dass das 'nach', das ja eigentlich von 'nachschauen' abgetrennt ist, nicht als zum Verb gehörig erkannt wird. (Eine Verbklammer wird nur dann als solche erkannt, wenn kein weiteres "Ergebnis-Token", wie halt noun folgt.) Mein erster Gedanke, das 'nach' in der Lib durch eine Routine zu ersetzen und so - womöglich - sein Vorhandensein zu erzwingen, ist leider fehlgeschlagen. |
Geschrieben um 23:54 am 20.08.2004 | Zitat | Editieren | Löschen | |
Mitglied Prof Gumby Beiträge: 634 | Okay, hier der dreckige Hack des Tages. Absolut unelegant, aber es funktioniert. Statt:
schreibt man einfach Folgendes:
Natürlich mit den Ergänzungen:
Damit sind dann Dialoge möglich wie:
Durch das Setzen von meta wird verhindert, dass VagueExamine als gelungene Eingabe gewertet wird, der each_turn-Satz erscheint nicht. Mit ximplizit werden die Sätze, bei denen das Nachschlagewerk impliziert wird, vorher von Hand abgefangen. Mit den pruefe_auf-Routinen wird gecheckt, dass im Topic nicht schon ein 'in' oder 'nach' steht. Das bedeutet natürlich, dass Topics nie 'in' oder 'nach' enthalten dürfen, Workarounds mit parse_name greifen bei Topics ja nicht. "Schaue Hühnerleber in Weißweinsoße im Rezeptbuch nach" oder "schaue im Atlas die Straße nach Tipperary nach" fallen also aus. Graham Nelson:
Äh, ja. Das alles ist ein ganz schönes Gefrickel und war wohl auch mehr eine Feierabend-Denksportaufgabe für mich als ein sinnvoller Beitrag zur Lib. Wahrscheinlich müsste man das Topic-Token einmal überarbeiten - oder GInfo als Standard in der Lib verwenden. Wahrscheinlich gibt es nämlich noch viele Fehler im Code, nicht abgefangene Fälle, Fälle, in denen das Nachschlagewerk als Teil des Topics gewertet wird, und so weiter. Schon das bloße "schau nach" bringt uns schon wieder unseren alten Bekannten, den "Deine Antwort"-Prompt. (Ich antworte da immer mit "nein".) Und "schlage nach" funktioniert auch noch nicht. ("This is left as an exercise to the reader", oder wie heißt's immer so schön.) Ach ja: mit "trace on/off" beziehungsweise "trace trace level (1-4)" kann man sich die Arbeit des Parsers anschauen. Bereits in Level 1 zeigt er einem, für welche Zeile aus der Verb-Definition er sich entschieden hat. |
Geschrieben um 17:09 am 21.08.2004 | Zitat | Editieren | Löschen | |
Mitglied Student Gumby Beiträge: 31 | Schonmal vielen Dank für die Mühe, die du dir gemacht hast. Da muss ich mich jetzt erstmal durchkämpfen. |
Geschrieben um 17:40 am 21.08.2004 | Zitat | Editieren | Löschen | |
Mitglied Prof Gumby Beiträge: 634 | Okay, neue Idee, diesmal etwas kürzer. Um Eingaben wie "schau Eimer" nicht als Consult misszuinterpretieren, fügt man bei den Consult-Topics die Routine force_nach ein. Diese lässt das gesamte Satzmuster fehlschlagen, wenn das Wort 'nach' nicht auftaucht, ohne den Wortzähler weiterzubewegen. Eine zweite Routine, force_nach_in, verlangt, dass im Topic vor 'nach' kein 'in' vorkommt. Damit schlägt bei der Eingabe 'schau Bosonen im Handbuch der Sternenflotte nach' das Satzmuster
fehl, die Analyse wird an folgende Satzmuster weitergeleitet, die dann die Eingabe korrekt verarbeiten können.
Analog für 'schlag' natürlich. Und wieder ein Beispieldialog:
Der Almanach wird aufgrund seiner Bevorzugung in ChooseObjects impliziert, ich war den "Deine Antwort"-Prompt leid. Das schint ja einigermaßen zu funktionieren und ist auch nicht so viel Aufwand. Die force-Routine kann an andere Präpositionen angepasst werden, ich habe aber keine weiteren kritischen topic-Tokens gefunden. Eine aktualisierte Version von GermanG.h habe ich auf meine Seite hochgeladen. |