EXPR = '' [ DEFUN | DEFVAR | TERM ] * '' TERM = [ INT | STRING | SYMBOL | LIST | VAR | FUNCALL ] DEFUN = '' ARGS ? TERM * '' ARGS = '' FIXED ? OPTIONAL ? REST ? '' | '' FIXED ? OPTIONAL ? REST ? '' FIXED = ' VAR + '' OPTIONAL = '' VAR + '' REST = '' VAR '' DEFVAR = DEFVAR-INT DEFVAR-STR DEFVAR-INT = '' DESCRIPTION ? INT ? [ INT | '' INT INT '' ] * '' DEFVAR-STR = '' DESCRIPTION ? STR ? STR * '' DESCRIPTION = '' [ TEXT | GETTEXT ] '' GETTEXT = '' TEXT '' INT = '' INTEGER '' STR = '' STRING '' SYMBOL = '' NAME '' LIST = '' TERM * '' | VAR = '' FUNCALL = '' TERM * '' | '<' PREDEFINED '>' TERM * '' | '<' PREDEFINED 'vname="' VNAME '">' TERM * '' PREDEFINED = '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' | 'loop' | 'break' | 'while' | 'foreach' | 'quote' | 'eval' | 'type' ;; TERM has a value, and is evaluated to a TERM as below. ;; INT has an integer value, and is evaluated to itself . ;; STRING has a string value, and is evaluated to itself. ;; SYMBOL has a symbol value, and is evaluated to itself. ;; LIST has a list value and, is evaluated to itself. ;; VAR has a value of TERM that is assigned to the variable, ;; and is evalued to that TERM. ;; FUNCALL has a value of TERM that is returned by that function, ;; and is evalued to that TERM. INTTERM = INT | VAR (value is INT) | FUNCALL (return INT) STRTERM = STR | VAR (value is STR) | FUNCALL (return STR) LISTTERM = LIST | VAR (value is LIST) | FUNCALL (return LIST) ANYTERM = TERM ;; Here after, when an argument is TERM, it is given to a function ;; without being evaluted. Otherwise, an evaluated term is given. '' ANYTERM '' '' INTTERM + '' '' INTTERM + '' '' INTTERM + '' '' INTTERM + '' '' INTTERM + '' '' INTTERM + '' '
' INTTERM + '
' '
' INTTERM + '
' '' INTTERM INTTERM '' '' INTTERM '' ' INTTERM + '' '' INTTERM + '' ' INTTERM + '' ' vname="' VNAME '">' INTTERM + '' ' INTTERM + '' ' vname="' VNAME '">' INTTERM + '' '' INTTERM INTTERM '' '' INTTERM '' '' INTTERM INTTERM '' '' INTTERM INTTERM '' '' INTTERM INTTERM '' '' INTTERM INTTERM '' '' INTTERM INTTERM '' '' INTTERM INTTERM '' '' ANYTERM + '' '' [ INTTERM | STRTERM | LISTTERM ] + '' '' INTTERM [ STRTERM | LISTTERM ] '' '' LISTTERM '' '' INTTERM [ STRTERM | LISTTERM ] '' '' INTTERM INTTERM '' '' TERM + '' '' TERM + '' '' TERM '' '' TERM * '' '' TERM TERM TERM ? '' '' TERM TERM * '' '' LIST + '' '' TERM + '' '' TERM + '' '' TERM + '' '' TERM '' '' TERM '' '' ANYTERM ''