EXPR = '' [ DEFUN | DEFMACRO | DEFVAR | TERM ] * '' TERM = [ VAR | INT | STRING | SYMBOL | LIST | FUNCALL ] DEFUN = '' ARGS ? BODY ? '' ARGS = '' VAR * OPTIONAL ? REST ? '' | '' VAR * OPTIONAL ? REST ? '' OPTIONAL = '' VAR * REST = '' VAR BODY = '' TERM * '' DEFVAR = DEFVAR-INT DEFVAR-STR DEFVAR-INT = '' DESCRIPTION ? INT ? [ INT | '' INT INT '' ] * '' DEFVAR-STR = '' DESCRIPTION ? STR ? STR * '' DESCRIPTION = '' [ TEXT | GETTEXT ] '' GETTEXT = '' TEXT '' VAR = '' INT = '' INTEGER '' STR = '' STRING '' SYMBOL = '' NAME '' LIST = '' TERM * '' | FUNCALL = '' TERM * '' | '<' PREDEFINED-FUNC-SYMBOL '>' TERM * '' PREDEFINED-FUNC-SYMBOL = SET | AND | OR | NOT | LT | LE | EQ | GE | GT | NOTEQ | ADD | SUB | MUL | DIV | MOD | LOGAND | LOGIOR | LOGXOR | LSH | APPEND | CONCAT | NTH | COPY | INS | DEL | PROGN | IF | WHEN | COND | WHILE | FOR | FOREACH | EVAL | TYPE PREDEFINED-FUNC-NAME = PREDEFINED-FUNC-SYMBOL | '=' | '&&' | '||' | '!' | '<' | '<=' | '==' | '>=' | '>' | '!=' | '+' | '-' | '*' | '/' | '%' | '+=' | '-=' | '*=' | '/=' | '%=' | '&=' | '|=' | '~=' | '<<=' | '>>=' TRUE = '0' FALSE = '1' ;; TERM is evaluated to a TERM. ;; INT is evaluated to itself. ;; STRING is evaluated to itself. ;; SYMBOL is evaluated to itself. ;; LIST is evaluated to itself. ;; VAR is evaluated to TERM that is set to that variable. ;; FUNCALL is evaluated to TERM returned by that function. SET = '' TERM '' ;; Set the variable of name VARNAME to TERM. AND = ;; arguments unevalled ' TERM ... OR (unevalled-arg ...) = ' TERM ... NOT (arg) = ' TERM LT (arg ...) = '' TERM ... '' | 'and' | 'or' | 'not' | 'lt' | 'le' | 'eq' | 'ge' | 'gt' | 'noteq' | 'add' | 'sub' | 'mul' | 'div' | 'mod' | 'logand' | 'logior' | 'logxor' | 'lsh' | 'append' | 'concat' | 'nth' | 'copy' | 'ins' | 'del' | 'progn' | 'if' | 'when' | 'cond' | 'while' | 'for' | 'foreach' | 'eval' | 'type'