I'll document this better in the manual later, but quick answer for now is that after encountering a noun, subsequent nouns are ignored unless a proposition is supplied. (English language behaviour, slightly different behaviour for Spanish mode)
If a word is a noun and an adjective, then it will read the first word as a noun, and if it discovers the next word is also a noun, then it will try to interpret the first word as an adjective.
1. EXAMINE ADDER'S TONGUE FERN
^
MATCHED VERB = EXAMINE
2. EXAMINE ADDER'S TONGUE FERN
^
Not in dictionary, ignored (internally removes ' char so actually looking for adders in dictionary)
3. EXAMINE ADDER'S TONGUE FERN
^
MATCHED NOUN1 = TONGUE
4. EXAMINE ADDER'S TONGUE FERN
^
Matched Noun but as follows previous noun, discard. Also checks
to see if tongue is an adjective as well as a noun so it can
change tongue to an adjective if in dictionary.
The fix is to add tongue as an adjective to the fern:
start_at = room01
locations {
room01 : location "You're in a storeroom";
}
objects {
tongue : object "some hound's tongue" start_at = "room01";
tongue_fern : object "some adder's tongue fern" start_at = "room01";
}
on_command {
: match "examine tongue" {
: print "It's the tongue of a dog.";
: done;
}
: match "examine fern" {
: print "It's adder's fork.";
: done;
}
}
I will also probably change the noun discardation order so that if two nouns are encountered in a row and the first noun is not also an adjective, that the most recent noun overwrites the existing noun. I may also retain additional nouns and adjectives in a future version of the parser.
I hope this answers your question, and I realise I have to document the parser better.
FYI - by switching DEBUG ON in the editor you can see how Adventuron is parsing the logical sentence. It's very spammy but sometimes useful.
Chris