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