In the Å-machine specification for get-input:
The string of characters typed by the player is converted into
lowercase, and split into substrings as follows:
* Every stop character (as declared in the LANG chunk)
becomes a single substring.
* Remaining characters are separated by whitespace.
Thus, the string "drop ball.north" is split into the
substrings "drop", "ball", ".", and "north".
The pseudo-code for the instruction results in DEST being a list of all the substrings after each one is parsed (into either a number, character, dictionary word or extdict reference).
If all the words the player typed are in the DICT chunk, then the list should be a list of dictionary words (unless there’s something I’m missing). However, the game code I’m using to check the action and topic in the list doesn’t work in the reference interpreter since they end up being of type extdict:
;; Our actions
(perform ; (perform [$Action $Noun])
(assign ,arg1 ,lst)(jmpl-simple (jump car-cdr))
(assign ,head ,acc)(assign ,tail ,lst)(jmpl-simple (jump car-cdr))
(assign ,head ,topic)(assign ,acc ,head)
;; The parsing code below is considered invalid by the reference interpreter.
;; I'm not sure why the IDX isn't considered a dictionary word,
;; since the input given was already processed by `get-input`.
(idx-set ,head)
(check-eq? "wait" (jump wait))
(empty? ,lst (jump unrecognised))
(check-eq? "go" (jump go))
(check-eq? "search" (jump search))
(idx-set ,topic)(jmpl-simple (jump get-loc))
(idx-set ,head)
(check-eq? "question" (jump question))
(check-eq? "accuse" (jump accuse)))
,(leaf 'unrecognised "Without a place in mind, you continue pondering.")
The bytecode emitted by the Dialog compiler seems to use a different mechanism entirely, where the AUX stack and R13 work in parallel to build up the parse manually. Maybe it would be easier if I understood why extended dictionary words work the way they do, so I could fix my port of Mini-Cluedo.