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 * OPTIONAL ? REST ? '</args>'
16 | '<args-unevalled>' SYMBOL * OPTIONAL ? REST ? '</args-unevalled>'
19 '<optional/>' SYMBOL *
25 '<body>' TERM * '</body>'
27 DEFVAR = DEFVAR-INT DEFVAR-STR DEFVAR-BOOL
30 '<defvar vname="' VARNAME '">'
33 <possible-value>[ INT | '<range>' INT INT '</range>' ] *</possible-value>
37 '<defvar vname"' VARNAME '">'
40 <possible-value> STR * </possible-value>
44 '<defvar vname"' VARNAME '">'
50 '<description>' TEXT '</description>'
53 '<variable vname="' NAME '"/>'
55 DIRECT = INT STR BOOL SYMBOL LIST
58 '<integer>' INTEGER '</integer>'
60 '<string>' STRING '</string>'
62 '<boolean>' [ 'true' | 'false' ] </boolean>
64 '<symbol>' NAME '</symbol>'
66 '<list>' TERM * '</list>' | <list/>
69 [ 'integer' | 'string' | 'boolean' | 'symbol' | 'list'
70 | 'variable' | 'funcall' ]
74 '<funcall fname="' PREDEFINED-FUNC-NAME '">' TERM * '</funcall>'
75 | '<' PREDEFINED-FUNC-SYMBOL '>' TERM * '</' PREDEFINED-FUNC-SYMBOL '>'
77 PREDEFINED-FUNC-SYMBOL =
79 | 'and' | 'or' | 'not'
80 | 'lt' | 'le' | 'eq' | 'ge' | 'gt'
82 | 'add' | 'sub' | 'mul' | 'div' | 'mod'
83 | 'add-set' | 'sub-set' | 'mul-set' | 'div-set' | 'mod-set'
84 | 'logand' | 'logior' | 'logxor' | 'lsh'
85 | 'logand-set' | 'logior-set' | 'logxor-set' | 'lsh-set'
86 | 'tolist' | 'tostring'
89 | 'cons' | 'car' | 'cdr' | 'nth'
90 | 'case' | 'cond' | 'if' | 'progn' | 'when'
91 | 'while' | 'for' | 'foreach'
94 PREDEFINED-FUNC-NAME =
95 PREDEFINED-FUNC-SYMBOL
98 | '<' | '<=' | '==' | '>=' | '>'
100 | '+' | '-' | '*' | '/' | '%'
101 | '+=' | '-=' | '*=' | '/=' | '%='
102 | '&=' | '|=' | '~=' | '<<=' | '>>='
105 (and TERM *) (or TERM *) (not TERM)
108 'add' | 'sub' | 'mul' | 'div' | 'mod' | 'add' | 'sub' | 'mul' | 'div' | 'mod'
109 | 'logand' | 'logior' | 'logxor' | 'lsh'
112 'add-set' | 'sub-set' | 'mul-set' | 'div-set' | 'mod-set'
113 | 'logand-set' | 'logior-set' | 'logxor-set' | 'lsh-set'
115 ARITH-ARG = [ INT | VAR | FUNCALL ]
117 (lt ARITH-ARG *) (le ARITH-ARG *) (eq ARITH-ARG *)
118 (ge ARITH-ARG *) (gt ARITH-ARG *)
119 (add ARITH-ARG *) (sub ARITH-ARG *) (mul ARITH-ARG *) (div ARITH-ARG *)
121 (add-set SYMBOL ARITH-ARG *) (sub-set SYMBOL ARITH-ARG *)
122 (mul-set SYMBOL ARITH-ARG *) (div-set SYMBOL ARITH-ARG *)
123 (mod-set SYMBOL ARITH-ARG *)