EXPR =
'' [ DEFUN | DEFMACRO | DEFVAR | TERM ] * ''
TERM = [ VAR | DIRECT | FUNCALL ]
TYPE = 'integer' | 'string' | 'boolean' | 'symbol' | 'list'
DEFUN =
''
ARGS ?
TERM *
''
ARGS =
'' [ SYMBOL | VAR ] * OPTIONAL ? REST ? ''
OPTIONAL =
'' [ SYMBOL | VAR ] *
REST =
'' [ SYMBOL | VAR ]
DEFVAR = DEFVAR-INT DEFVAR-STR DEFVAR-BOOL
DEFVAR-INT =
''
DESCRIPTION ?
INT ?
[ INT | '' INT INT '' ] *
''
DEFVAR-STR =
''
DESCRIPTION ?
STR ?
STR *
''
DEFVAR-BOOL =
''
DESCRIPTION ?
BOOL ?
''
DESCRIPTION =
'' TEXT ''
VAR =
''
DIRECT = INT STR BOOL SYMBOL LIST
INT =
'' INTEGER ''
STR =
'' STRING ''
BOOL =
'' [ 'true' | 'false' ]
SYMBOL =
'' NAME ''
LIST =
'' DIRECT * '' |
FUNCALL =
'' TERM * ''
| '<' PREDEFINED-FUNC-SYMBOL '>' TERM * '' PREDEFINED-FUNC-SYMBOL '>'
| '<' PREDEFINED-MACRO-SYMBOL '>' TERM * '' PREDEFINED-MACRO-SYMBOL '>'
PREDEFINED-FUNC-SYMBOL =
'set'
| 'and' | 'or' | 'not'
| 'lt' | 'le' | 'eq' | 'ge' | 'gt'
| 'noteq'
| 'add' | 'sub' | 'mul' | 'div' | 'mod'
| 'add-set' | 'sub-set' | 'mul-set' | 'div-set' | 'mod-set'
| 'logand' | 'logior' | 'logxor' | 'lsh'
| 'logand-set' | 'logior-set' | 'logxor-set' | 'lsh-set'
| 'append' | 'concat' | 'substr'
| 'cons' | 'car' | 'cdr' | 'nth'
PREDEFINED-FUNC-NAME =
PREDEFINED-FUNC-SYMBOL
| '='
| '&&' | '||' | '!'
| '<' | '<=' | '==' | '>=' | '>'
| '!='
| '+' | '-' | '*' | '/' | '%'
| '+=' | '-=' | '*=' | '/=' | '%='
| '&=' | '|=' | '~=' | '<<=' | '>>='
PREDEFINED-MACRO-SYMBOL =
'case' | 'cond' | 'if' | 'progn' | 'when' | 'while'
PREDEFINED-MACRO-NAME = PREDEFINED-MACRO-SYMBOL