"As a parser author, what I really want is...."

Parser authors: what’s hard to code? Or: what takes disproportionate coding effort for the results you want? Or: what do you often circumvent in your writing, because you don’t want to have to code it?

Don’t worry about specifying what language you’re using, or your level of experience. This is about your subjective experience, not about objectively critiquing languages. I’m interested in a better understanding of what people want to do, rather than what people can do.

To get the ball rolling: Doors. When I write doors, I want them to automatically open (if not locked), automatically unlock (if the player has the key), and behave in a polite, well-paired fashion - even when only one door is fully implemented, like having a door at the top of a set of stairs. And to top everything off, I want to put two doors in the east wall of a hallway without calling one of them northeast or southeast.

As a parser author, what do you want?

(Also, a gentle note to people reading: Please don’t chime in with extension or code recommendations. But it’s okay to post suggestions in the programming folders.)

Triadic actions. “POUR 5ML OF BAMURIATIC ACID INTO THE FLASK” requires nasty workarounds to parse (in Inform at least) because there are three separate variables specified: 5mL, bamuriatic acid, and the flask.

Possessives. Maybe this is primarily an I7 issue, but I’m annoyed by all the contortions required to parse “READ [person]'S DOCTORAL THESIS” or “X JOHN/TAKE HIS HAT”.

For I7, I really would like a way to write a noun-parsing routine for an object. I7 provides several ways to customize the object’s name, but no general way.

Better control over disambiguation - both in terms of offering more options, and in terms of making the existing options easier to use.

More control over visual design and UI, without having to rewrite an interpreter. Firstly just to be able to give a game a professional-looking finish. Secondly to open up more options, e.g. moving the command prompt into a separate part of the window from the main text stream, changing text that’s already been printed, better support for hyperlinks and multimedia. Opportunities to move away from the classic Infocom paradigm. (For reference, I am just slightly younger than Moonmist, and it’s the only Infocom game I ever finished.)

Did you ever get to look at my “Easy Doors” extension? (your input was considered when creating it!)

I think it does all that except unlock automatically (which is easy enough to add with a before rule).

For I7, combining actions into one paragraph and, relatedly, better control over line breaks. Maybe something like “remove line breaks,” which would overide any line break rules until “impose line breaks” is triggered.

Entering and going in, exiting and going out. Each of these pairs contain similar actions, but they are treated very differently, and they can be confusing to learn and cumbersome to revise and expand.


A really powerful hint system that tracks input and game state so that when the player types “hint” the system will resolve the correct hint from its knowledge base. Ideally, the hints need not be written in advance at all, they get generated automatically. Possibly this could also make educated guesses as to what the player is trying to achieve with his input sequence and just correct him unnoticed.

Of course I did!

I was thinking of it in part when I started this thread. Your extension works like a charm, but setting it up was certainly disproportionate coding effort for you (and all my prior custom code was for me.)

Some of the stuff I mentioned here. Recapping that a bit, and adding votes to the suggestions above:

As Emerald said, control over disambiguation. Lots more control. Including things like being able to detect and preempt a disambiguation request… like maybe making disambiguating an activity, and allowing me to write something like: “Rule for disambiguating when [blah blah]: change the multiple object list to the match list.”
Also just having disambiguation check whether the player has entered a valid response to the disambiguation question, and then if not try to parse it as a command, rather than having it guess based on whether the first word of the answer is a verb.

Going off from that…it’d be nice to be able to give NPCs noun-only commands when those are implemented.
It’d also be nice to be able to have more support for more than one character before the comma (Multiple Actors is great and I am grateful to Daniel for writing it, but it’s obviously not a completely smooth fit with I7’s native parser).
Authentic actions on multiple objects–so that “combine the gin, the vermouth, and the olive” can be interpreted as an action on the list {gin, vermouth, olive} rather than hacked through with the multiple object list.
As zarf said, more noun-parsing routines. I’ve occasionally brought up that I’d like to do something where you can find if a word is part of some object’s description right now, and if so parse it as such.
More flexible understanding routines–like an understand line that checks whether the nouns have a certain relation to each other. (Currently the “things inside” token allows you to implement this in one special case… and the “things inside” token also seems like it creates a lot of problems and requires a ton of special code.)
Did I mention that I tried to implement “Every robot that can see an astronaut, move toward the astronaut” and it didn’t work?
It would be very very nice to be able to recover the phrase that was used to refer to a thing. Like you can have the Duke of Devonshire referred to as “The Duke” or “that guy” but currently once the command is processed there’s no way in I7 to check which of those phrases was used (except with “if the player’s command includes…” which doesn’t tell you who was referred to as “that guy”).

World-model and output stuff, but things that come up with respect to parsers more than non-parser things:
I’d really like to be able to break away from the model where one thing happens at a time and is reported as it happens. So instead of Jane, Brad, and James going north being reported as “Jane goes north. Brad goes north. James goes north,” bucket them all into some list of things that happened this turn, and then have a summary phase where we’re able to check that three characters all went north and report at “Jane, Brad, and James go north.”
Also, more flexibility in output. It’d be really nice to have a token that printed “a” if the next word started with a consonant and “an” if it started with a vowel, unless the word was in a list of exceptions. Some of these last two things could be done with Text Capture, if I had enough I6 to be able to do what I want with Text Capture.
More nicely integrated hyperlinks, maybe–Unified Glulx Input might take care of this (and it’s not exactly parser, I guess).
Maybe some kind of windowing system that didn’t require me to make sense of Flexible Windows.

I want to be able to write a library into a game with books as links to their actual text in Project Gutenberg, but in Glulx instead of Z-Machine.

I’d also like somebody to update Chris Conley’s Conversation Builder, because an extension that lets me plug in text as though I’m already playing the game I’m building sounds like great fun.

This reminds me of LambdaMoo gopher slates from the early 90s.

Along with what’s already been mentioned (i.e. BETTER CONTROL AND LESS AUTOMATIC BEHAVIOR FOR LINE AND PARAGRAPH BREAKS): An official/documented/robust way to disable verbs – including pre-processed verbs like “undo” – and route around parser errors. It is possible to cheat – Synesthesia Factory was a long demonstration of one such method of cheating – but it is risky and I can’t recommend it, unless you are stubborn and picky like me. But by sheer coincidence I wasn’t the only comp entrant who did this sort of thing, tools like Parser Parer further demonstrate demand, and a lot of extraneous verbs have been quietly dropped in Inform from the original set anyway.

What do you mean by routing around parser errors?