Parsers

javelin's picture

PennMUSH has two parsers: a command parser that executes commands, and an expression parser that evaluates expressions. The expression parser is sometimes referred to by hardcoders as "process_expression", which is the name of the main hardcode function that implements it. It's also loosely called the function parser, because it's the parser that evaluates mushcode functions (though it also gets run at various times to do other kind of expression parsing that doesn't involve function evaluation)

The parsers are both synchronous -- when passed a command or expression, they parse it, and no other unrelated command or expression can preempt the parser. The effects of an expressions are also synchronous -- when expression evaluation ends, there is nothing left to do with that expression in the future. On the other hand, the effects of commands may be asynchronous -- commands can schedule other commands to run in the future via the queues (see below), and unrelated commands may intervene between a queuing command and the command that it queues.