2 '<expr>' [ DEFUN | DEFMACRO | DEFVAR | TERM ] * '</expr>'
4 TERM = [ VAR | DIRECT | FUNCALL ]
6 TYPE = 'integer' | 'string' | 'boolean' | 'symbol' | 'list'
9 '<defun fname="' FUNCNAME '">'
15 '<args>' [ SYMBOL | VAR ] * OPTIONAL ? REST ? '</args>'
18 '<optional/>' [ SYMBOL | VAR ] *
21 '<rest/>' [ SYMBOL | VAR ]
23 DEFVAR = DEFVAR-INT DEFVAR-STR DEFVAR-BOOL
26 '<defvar vname="' VARNAME '">'
29 <possible-value>[ INT | '<range>' INT INT '</range>' ] *</possible-value>
33 '<defvar vname"' VARNAME '">'
36 <possible-value> STR * </possible-value>
40 '<defvar vname"' VARNAME '">'
46 '<description>' TEXT '</description>'
49 '<variable vname="' NAME '"/>'
51 DIRECT = INT STR BOOL SYMBOL LIST
54 '<integer>' INTEGER '</integer>'
56 '<string>' STRING '</string>'
58 '<boolean>' [ 'true' | 'false' ] </boolean>
60 '<symbol>' NAME '</symbol>'
62 '<list>' DIRECT * '</list>' | <list/>
65 '<funcall fname="' PREDEFINED-FUNC-NAME '">' TERM * '</funcall>'
66 | '<' PREDEFINED-FUNC-SYMBOL '>' TERM * '</' PREDEFINED-FUNC-SYMBOL '>'
67 | '<' PREDEFINED-MACRO-SYMBOL '>' TERM * '</' PREDEFINED-MACRO-SYMBOL '>'
69 PREDEFINED-FUNC-SYMBOL =
71 | 'and' | 'or' | 'not'
72 | 'lt' | 'le' | 'eq' | 'ge' | 'gt'
74 | 'add' | 'sub' | 'mul' | 'div' | 'mod'
75 | 'add-set' | 'sub-set' | 'mul-set' | 'div-set' | 'mod-set'
76 | 'logand' | 'logior' | 'logxor' | 'lsh'
77 | 'logand-set' | 'logior-set' | 'logxor-set' | 'lsh-set'
78 | 'append' | 'concat' | 'substr'
79 | 'cons' | 'car' | 'cdr' | 'nth'
81 PREDEFINED-FUNC-NAME =
82 PREDEFINED-FUNC-SYMBOL
85 | '<' | '<=' | '==' | '>=' | '>'
87 | '+' | '-' | '*' | '/' | '%'
88 | '+=' | '-=' | '*=' | '/=' | '%='
89 | '&=' | '|=' | '~=' | '<<=' | '>>='
91 PREDEFINED-MACRO-SYMBOL =
92 'case' | 'cond' | 'if' | 'progn' | 'when' | 'while'
94 PREDEFINED-MACRO-NAME = PREDEFINED-MACRO-SYMBOL