2 '<expr>' [ DEFUN | DEFMACRO | DEFVAR | TERM ] * '</expr>'
4 TERM = [ VAR | INT | STRING | SYMBOL | LIST | FUNCALL ]
7 '<defun fname="' FUNCNAME ? ">'
13 '<args>' VAR * OPTIONAL ? REST ? '</args>'
14 | '<args-unevalled>' VAR * OPTIONAL ? REST ? '</args-unevalled>'
23 '<body>' TERM * '</body>'
25 DEFVAR = DEFVAR-INT DEFVAR-STR
28 '<defvar vname="' VARNAME '">'
31 <possible-value>[ INT | '<range>' INT INT '</range>' ] *</possible-value>
35 '<defvar vname"' VARNAME '">'
38 <possible-value> STR * </possible-value>
42 '<description>' [ TEXT | GETTEXT ] '</description>'
45 '<gettext>' TEXT '</gettext>'
48 '<variable vname="' NAME '"/>'
50 '<integer>' INTEGER '</integer>'
52 '<string>' STRING '</string>'
54 '<symbol>' NAME '</symbol>'
56 '<list>' TERM * '</list>' | <list/>
59 '<funcall fname="' PREDEFINED-FUNC-NAME '">' TERM * '</funcall>'
60 | '<' PREDEFINED-FUNC-SYMBOL '>' TERM * '</' PREDEFINED-FUNC-SYMBOL '>'
62 PREDEFINED-FUNC-SYMBOL =
65 | LT | LE | EQ | GE | GT
67 | ADD | SUB | MUL | DIV | MOD
68 | LOGAND | LOGIOR | LOGXOR | LSH
69 | APPEND | CONCAT | NTH | COPY | INS | DEL
70 | PROGN | IF | WHEN | COND
71 | WHILE | FOR | FOREACH
74 PREDEFINED-FUNC-NAME =
75 PREDEFINED-FUNC-SYMBOL
78 | '<' | '<=' | '==' | '>=' | '>'
80 | '+' | '-' | '*' | '/' | '%'
81 | '+=' | '-=' | '*=' | '/=' | '%='
82 | '&=' | '|=' | '~=' | '<<=' | '>>='
85 '<integer>0</integer>'
87 '<integer>1</integer>'
89 ;; TERM is evaluated to a TERM.
90 ;; INT is evaluated to itself.
91 ;; STRING is evaluated to itself.
92 ;; SYMBOL is evaluated to itself.
93 ;; LIST is evaluated to itself.
94 ;; VAR is evaluated to TERM that is set to that variable.
95 ;; FUNCALL is evaluated to TERM returned by that function.
98 '<set vname="' VARNAME '">' TERM '</set>'
99 ;; Set the variable of name VARNAME to TERM.
101 AND = ;; arguments unevalled
102 '<and> TERM ... </and>
103 OR (unevalled-arg ...) =
109 '<lt>' TERM ... '</lt>'
111 | 'and' | 'or' | 'not'
112 | 'lt' | 'le' | 'eq' | 'ge' | 'gt'
114 | 'add' | 'sub' | 'mul' | 'div' | 'mod'
115 | 'logand' | 'logior' | 'logxor' | 'lsh'
116 | 'append' | 'concat' | 'nth' | 'copy' | 'ins' | 'del'
117 | 'progn' | 'if' | 'when' | 'cond'
118 | 'while' | 'for' | 'foreach'