Coupled together, these produce an ambiguous grammar:
argument = string / string-list / number / tag
string = quoted-string / multi-line
string-list = "(" [WSP] *(string [WSP] "," [WSP]) string [WSP] ")" / string
;; if there is only a single string, the parens are optional
The problem is that the sequence
someidentifier :argh "string" ;
is either an identifier, a tag, a string, and a semicolon OR it's an
identifier, a tag, a string, and a semicolon.
I'm planning on changing if/else if/else to if/elsif/else to avoid a
conflict in the grammar; I'd like to change this one such that
argument = string-list / number / tag
and sometimes you can give too many strings as an argument.
Incidentially, I think support is an implementation headache considering
scripts need to ensure that there are no runtime syntax errors/unrecognized
command errors. I thought through what it will take me to eliminate them,
looking for all the wonderous cases like
if not(not(support "fubar"))
and the like, and while it's not impossible, it's annoying. Just thought
I'd let you know.
--
Tim Showalter
tjs+(_at_)andrew(_dot_)cmu(_dot_)edu