X-Git-Url: http://git.chise.org/gitweb/?a=blobdiff_plain;f=xex.txt;h=f09c0479fbface466a542639f87dac395c5c2294;hb=2191c6e2bd1fd2f13744a6a42f7004b43f38b5d2;hp=fce2ebd5c1848f6be23a24ae7384c31d60e906a1;hpb=3b60cbb4badfce6230a70ca54bfcb9d6ae4f5708;p=m17n%2Fm17n-lib-cs.git
diff --git a/xex.txt b/xex.txt
index fce2ebd..f09c047 100644
--- a/xex.txt
+++ b/xex.txt
@@ -1,5 +1,5 @@
EXPR =
- '' [ DEFUN | DEFVAR | TERM ] * ''
+ '' [ DEFUN | DEFMACRO | DEFVAR | TERM ] * ''
TERM = [ INT | STRING | SYMBOL | LIST | VAR | FUNCALL ]
@@ -9,9 +9,14 @@ DEFUN =
TERM *
''
+DEFMACRO =
+ ''
+ ARGS ?
+ TERM *
+ ''
+
ARGS =
'' FIXED ? OPTIONAL ? REST ? ''
- | '' FIXED ? OPTIONAL ? REST ? ''
FIXED =
' VAR + ''
@@ -22,22 +27,35 @@ OPTIONAL =
REST =
'' VAR ''
-DEFVAR = DEFVAR-INT DEFVAR-STR
+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-STR_VALUE =
+ STR +
+
+DEFVAR-SYM =
+ ''
+ DESCRIPTION ?
+ [ SYMBOL POSSIBLE-SYM-VALUE ? ] ?
''
+POSSIBLE-SYM-VALUE =
+ SYMBOL +
+
DESCRIPTION =
'' [ TEXT | GETTEXT ] ''
@@ -58,19 +76,18 @@ VAR =
FUNCALL =
'' TERM * ''
- | '<' PREDEFINED '>' TERM * '' PREDEFINED '>'
- | '<' PREDEFINED 'vname="' VNAME '">' TERM * '' PREDEFINED '>'
+ | PREDEFINED
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'
+ 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 .
@@ -84,53 +101,58 @@ PREDEFINED =
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)
-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 ''
+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 ''