X-Git-Url: http://git.chise.org/gitweb/?a=blobdiff_plain;f=xex.txt;h=bf25c8f0b0249cadc5dd452a98fb7730f52ef859;hb=4ab20c0f4785424513d93f02b82085e1394b3872;hp=ced1f8006fe9b8580e7812f75b3c7c417c92ec89;hpb=a00c135c6ed03fcb7e77dd090cd19dc1347cac72;p=m17n%2Fm17n-lib-cs.git diff --git a/xex.txt b/xex.txt index ced1f80..bf25c8f 100644 --- a/xex.txt +++ b/xex.txt @@ -1,94 +1,153 @@ EXPR = - '' [ DEFUN | DEFMACRO | DEFVAR | TERM ] * '' + '' [ DEFUN | DEFVAR | TERM ] * '' -TERM = [ VAR | DIRECT | FUNCALL ] - -TYPE = 'integer' | 'string' | 'boolean' | 'symbol' | 'list' +TERM = [ INT | STRING | SYMBOL | LIST | VAR | FUNCALL ] DEFUN = - '' + '' ARGS ? TERM * '' ARGS = - '' [ SYMBOL | VAR ] * OPTIONAL ? REST ? '' + '' FIXED ? OPTIONAL ? REST ? '' + | '' FIXED ? OPTIONAL ? REST ? '' + +FIXED = + ' VAR + '' OPTIONAL = - '' [ SYMBOL | VAR ] * + '' VAR + '' REST = - '' [ SYMBOL | VAR ] + '' VAR '' -DEFVAR = DEFVAR-INT DEFVAR-STR DEFVAR-BOOL +DEFVAR = DEFVAR-INT DEFVAR-STR DEFVAR-SYM DEFVAR-INT = - '' + '' DESCRIPTION ? - INT ? - [ INT | '' INT INT '' ] * + [ INT POSSIBLE-INT-VALUE ? ] ? '' +POSSIBLE-INT-VALUE = + [ INT | '' INT INT '' ] + + DEFVAR-STR = - '' + '' DESCRIPTION ? - STR ? - STR * + [ STR DEFVAR-STR_VALUE ? ] ? '' -DEFVAR-BOOL = - '' +DEFVAR-STR_VALUE = + STR + + +DEFVAR-SYM = + '' DESCRIPTION ? - BOOL ? + [ SYMBOL POSSIBLE-SYM-VALUE ? ] ? '' -DESCRIPTION = - '' TEXT '' +POSSIBLE-SYM-VALUE = + SYMBOL + -VAR = - '' +DESCRIPTION = + '' [ TEXT | GETTEXT ] '' -DIRECT = INT STR BOOL SYMBOL LIST +GETTEXT = + '' TEXT '' INT = '' INTEGER '' STR = '' STRING '' -BOOL = - '' [ 'true' | 'false' ] SYMBOL = '' NAME '' LIST = - '' DIRECT * '' | + '' TERM * '' | + +VAR = + '' FUNCALL = - '' TERM * '' - | '<' PREDEFINED-FUNC-SYMBOL '>' TERM * '' - | '<' PREDEFINED-MACRO-SYMBOL '>' TERM * '' - -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 + '' TERM * '' + | PREDEFINED + +PREDEFINED = + SET + | AND | OR | NOT + | LT | LE | EQ | GE | GT | NOTEQ + | ADD | SUB | MUL | DIV | MOD + | LOGAND | LOGIOR | LOGXOR | LSH + | APPEND | CONCAT | LENGTH | NTH | COPY | INS | DEL + | PROGN | IF | WHEN | COND + | LOOP | WHILE | FOREACH | BREAK | RETURN + | 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) +SYMTERM = SYMBOL | VAR (value is SYMBOL) | FUNCALL (return SYMBOL) +LISTTERM = LIST | VAR (value is LIST) | FUNCALL (return LIST) + +;; Here after, when an argument is TERM, it is given to a function +;; without being evaluted. Otherwise, an evaluated term is given. + +SET = '' TERM '' +ADD = '' INTTERM + '' + | '' INTTERM + '' +SUB = '' INTTERM + '' + | '' INTTERM + '' +MUL = '' INTTERM + '' + | '' INTTERM + '' +DIB = '
' INTTERM + '
' + | '
' INTTERM + '
' +MOD = '' INTTERM INTTERM '' + | '' INTTERM '' +LOGAND = ' INTTERM + '' + | '' INTTERM + '' +LOGIOR = ' INTTERM + '' + | '' INTTERM + '' +LOGXOR = ' INTTERM + '' + | '' INTTERM + '' +LSH = '' INTTERM INTTERM '' + | '' INTTERM '' +LT = '' INTTERM INTTERM '' +LE = '' INTTERM INTTERM '' +EQ = '' INTTERM INTTERM '' +NOTEQ = '' INTTERM INTTERM '' +GE = '' INTTERM INTTERM '' +GT ='' INTTERM INTTERM '' +APPEND = '' TERM + '' + | '' TERM + '' +CONCAT = '' [ INTTERM | STRTERM | LISTTERM ] + '' + | '' [ INTTERM | STRTERM | LISTTERM ] + '' +LENGTH = '' [ STRTERM | LISTTERM ] '' +NTH = '' INTTERM [ STRTERM | LISTTERM ] '' +COPY = '' LISTTERM '' +INS = '' INTTERM [ STRTERM | LISTTERM ] '' +DEL = '' INTTERM INTTERM '' +AND = '' TERM + '' +OR = '' TERM + '' +NOT = '' TERM '' +PROGN = '' TERM * '' +IF = '' TERM TERM TERM ? '' +WHEN = '' TERM TERM * '' +COND = '' LIST + '' +LOOP = '' TERM + '' +WHILE = '' TERM + '' +FOREACH = '' TERM + '' +BREAK = '' TERM ? '' +RETURN = '' TERM ? '' +QUOTE = '' TERM '' +EVAL = '' TERM '' +TYPE = '' TERM ''