*** empty log message ***
[m17n/m17n-lib-cs.git] / xex.txt
diff --git a/xex.txt b/xex.txt
index d6e6cbc..4a36efe 100644 (file)
--- a/xex.txt
+++ b/xex.txt
@@ -1,26 +1,28 @@
 EXPR =
   '<expr>' [ DEFUN | DEFMACRO | DEFVAR | TERM ] * '</expr>'
 
-TERM = [ VAR | DIRECT | FUNCALL ]
-
-TYPE = 'integer' | 'string' | 'boolean' | 'symbol' | 'list'
+TERM = [ VAR | INT | STRING | SYMBOL | LIST | FUNCALL ]
 
 DEFUN =
-  '<defun fname="' FUNCNAME '">'
+  '<defun fname="' FUNCNAME ? ">'
   ARGS ?
-  TERM *
+  BODY ?
   '</defun>'
 
 ARGS =
-  '<args>' [ SYMBOL | VAR ] * OPTIONAL ? REST ? '</args>'
+  '<args>' VAR * OPTIONAL ? REST ? '</args>'
+  | '<args-unevalled>' VAR * OPTIONAL ? REST ? '</args-unevalled>'
 
 OPTIONAL =
-  '<optional/>' [ SYMBOL | VAR ] *
+  '<optional/>' VAR *
 
 REST =
-  '<rest/>' [ SYMBOL | VAR ]
+  '<rest/>' VAR
+
+BODY =
+  '<body>' TERM * '</body>'
 
-DEFVAR = DEFVAR-INT DEFVAR-STR DEFVAR-BOOL
+DEFVAR = DEFVAR-INT DEFVAR-STR
 
 DEFVAR-INT =
   '<defvar vname="' VARNAME '">'
@@ -36,47 +38,38 @@ DEFVAR-STR =
   <possible-value> STR * </possible-value>
   '</defvar>'
 
-DEFVAR-BOOL =
-  '<defvar vname"' VARNAME '">'
-  DESCRIPTION ?
-  BOOL ?
-  '</defvar>'
-
 DESCRIPTION =
-  '<description>' TEXT '</description>'
+  '<description>' [ TEXT | GETTEXT ] '</description>'
+
+GETTEXT =
+  '<gettext>' TEXT '</gettext>'
 
 VAR =
   '<variable vname="' NAME '"/>'
-
-DIRECT = INT STR BOOL SYMBOL LIST
-
 INT =
-  '<const type="integer">' INTEGER '</const>'
+  '<integer>' INTEGER '</integer>'
 STR =
-  '<const type="string">' STRING '</const>'
-BOOL =
-  '<const type="boolean">' [ 'true' | 'false' ] </const>
+  '<string>' STRING '</string>'
 SYMBOL =
-  '<const type="symbol">' NAME '</const>'
+  '<symbol>' NAME '</symbol>'
 LIST =
-  '<const type="list">' DIRECT * '</const>' | <const type="list"/>
+  '<list>' TERM * '</list>' | <list/>
 
 FUNCALL =
   '<funcall fname="' PREDEFINED-FUNC-NAME '">' TERM * '</funcall>'
   | '<' 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'
+  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
+  | WHILE | FOR | FOREACH
+  | EVAL | TYPE
 
 PREDEFINED-FUNC-NAME =
   PREDEFINED-FUNC-SYMBOL
@@ -88,7 +81,39 @@ PREDEFINED-FUNC-NAME =
   | '+=' | '-=' | '*=' | '/=' | '%='
   | '&=' | '|=' | '~=' | '<<=' | '>>='
 
-PREDEFINED-MACRO-SYMBOL =
-  'case' | 'cond' | 'if' | 'progn' | 'when' | 'while'
+TRUE =
+  '<integer>0</integer>' 
+FALSE =
+  '<integer>1</integer>' 
+
+;; TERM is evaluated to a TERM.
+;; INT is evaluated to itself.
+;; STRING is evaluated to itself.
+;; SYMBOL is evaluated to itself.
+;; LIST is evaluated to itself.
+;; VAR is evaluated to TERM that is set to that variable.
+;; FUNCALL is evaluated to TERM returned by that function.
+
+SET =
+  '<set vname="' VARNAME '">' TERM '</set>'
+;; Set the variable of name VARNAME to TERM.
+
+AND =  ;; arguments unevalled
+  '<and> TERM ... </and>
+OR (unevalled-arg ...) =
+  '<or> TERM ... </or>
+NOT (arg) =
+  '<not> TERM </not>
+
+LT (arg ...) =
+  '<lt>' TERM ... '</lt>'
 
-PREDEFINED-MACRO-NAME = PREDEFINED-MACRO-SYMBOL
+  | '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'
+  | 'while' | 'for' | 'foreach'
+  | 'eval' | 'type'