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 '>'
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'