*** empty log message ***
[m17n/m17n-lib-cs.git] / xex.txt
1 EXPR =
2   '<expr>' [ DEFUN | DEFMACRO | DEFVAR | TERM ] * '</expr>'
3
4 TERM = [ INT | STRING | SYMBOL | LIST | ERROR | VAR | FUNCALL ]
5
6 DEFUN =
7   '<defun fname="' FNAME ? ">'
8   ARGS ?
9   TERM *
10   '</defun>'
11
12 DEFMACRO =
13   '<defmacro fname="' FNAME ? ">'
14   ARGS ?
15   TERM *
16   '</defmacro>'
17
18 ARGS =
19   '<args>' FIXED * OPTIONAL * REST ? '</args>'
20
21 FIXED =
22   '<fixed vname="' VNAME '">'
23
24 OPTIONAL =
25   '<optional vname="' VNAME '">'
26
27 REST =
28   '<rest vname="' VNAME '">'
29
30 DEFVAR = DEFVAR-INT DEFVAR-STR DEFVAR-SYM
31
32 DEFVAR-INT =
33   '<defvar vname="' VNAME '">'
34   DESCRIPTION ?
35   [ INT POSSIBLE-INT-VALUE ? ] ?
36   '</defvar>'
37
38 POSSIBLE-INT-VALUE =
39   <possible-value> [ INT | '<range>' INT INT '</range>' ] + </possible-value>
40
41 DEFVAR-STR =
42   '<defvar vname"' VNAME '">'
43   DESCRIPTION ?
44   [ STR DEFVAR-STR_VALUE ? ] ?
45   '</defvar>'
46
47 DEFVAR-STR_VALUE =
48   <possible-value> STR + </possible-value>
49
50 DEFVAR-SYM =
51   '<defvar vname"' VNAME '">'
52   DESCRIPTION ?
53   [ SYMBOL POSSIBLE-SYM-VALUE ? ] ?
54   '</defvar>'
55
56 POSSIBLE-SYM-VALUE =
57   <possible-value> SYMBOL + </possible-value>
58
59 DESCRIPTION =
60   '<description>' [ TEXT | GETTEXT ] '</description>'
61
62 GETTEXT =
63   '<gettext>' TEXT '</gettext>'
64
65 INT =
66   '<integer>' INTEGER '</integer>'
67 STR =
68   '<string>' STRING '</string>'
69 SYMBOL =
70   '<symbol>' NAME '</symbol>'
71 LIST =
72   '<list>' TERM * '</list>'
73 ERROR =
74   [ '<error>' | '<error ename="' ENAME '">"' ] STRING '</error>'
75
76 VARREF =
77   '<varref vname="' VNAME '"/>'
78
79 FUNCALL =
80   '<funcall fname="' FNAME '">' TERM * '</funcall>'
81   | PREDEFINED
82
83 PREDEFINED =
84   SET
85   | AND | OR | NOT
86   | LT | LE | EQ | GE | GT | NOTEQ
87   | ADD | SUB | MUL | DIV | MOD
88   | LOGAND | LOGIOR | LOGXOR | LSH
89   | APPEND | CONCAT | LENGTH | NTH  | COPY | INS | DEL
90   | PROGN | IF | WHEN | COND
91   | LOOP | WHILE | FOREACH | BREAK | RETURN | CATCH | THROW
92   | QUOTE | EVAL | TYPE
93
94 ;; TERM has a value, and is evaluated to a TERM as below.
95 ;; INT has an integer value, and is evaluated to itself .
96 ;; STRING has a string value, and is evaluated to itself.
97 ;; SYMBOL has a symbol value, and is evaluated to itself.
98 ;; LIST has a list value and, is evaluated to itself.
99 ;; VARREF has a variable, and is evalued to the value of that variable.
100 ;; FUNCALL has a function and arguments to it, and is evalued to the
101 ;; value of function called with those arguments.
102
103 INTTERM = INT | VAR (value is INT) | FUNCALL (return INT)
104 STRTERM = STR | VAR (value is STR) | FUNCALL (return STR)
105 SYMTERM = SYMBOL | VAR (value is SYMBOL) | FUNCALL (return SYMBOL)
106 LISTTERM = LIST | VAR (value is LIST) | FUNCALL (return LIST)
107 ANYTERM = TERM
108
109 ;; Here after, when an argument written as TERM, it is given to a
110 ;; function without being evaluted.  Otherwise, an evaluated term is
111 ;; given.  "the value is NUM" means "the value is
112 ;; <integer>NUM</integer>".
113
114 SET = '<set vname="' VNAME '">' ANYTERM '</set>'
115 ADD = '<add>' INTTERM + '</add>'
116       | '<add vname="' VNAME '">' INTTERM + '</add>'
117 SUB = '<sub>' INTTERM + '</sub>'
118       | '<sub vname="' VNAME '">' INTTERM + '</sub>'
119 MUL = '<mul>' INTTERM + '</mul>'
120       | '<mul vname="' VNAME '">' INTTERM + '</mul>'
121 DIB = '<div>' INTTERM + '</div>'
122       | '<div vname="' VNAME '">' INTTERM + '</div>'
123 MOD = '<mod>' INTTERM INTTERM '</mod>'
124       | '<mod vname="' VNAME '">' INTTERM '</div>'
125 LOGAND = '<logand> INTTERM + '</logand>'
126          | '<logand vname="' VNAME '">' INTTERM + '</logand>'
127 LOGIOR = '<logior> INTTERM + '</logior>'
128          | '<logior vname="' VNAME '">' INTTERM + '</logior>'
129 LOGXOR = '<logxor> INTTERM + '</logxor>'
130          | '<logxor vname="' VNAME '">' INTTERM + '</logxor>'
131 LSH = '<lsh>' INTTERM INTTERM '</lsh>'
132       | '<lsh vname="' VNAME '">' INTTERM '</mul>'
133 LT = '<lt>' INTTERM INTTERM '</lt>'
134 LE = '<le>' INTTERM INTTERM '</le>'
135 EQ = '<eq>' INTTERM INTTERM '</eq>'
136 NOTEQ = '<noteq>' INTTERM INTTERM '</noteq>'
137 GE = '<ge>' INTTERM INTTERM '</ge>'
138 GT ='<gt>' INTTERM INTTERM '</gt>'
139 APPEND = '<append>' TERM + '</append>'
140          | '<append vname=" VNAME '">' TERM + '</append>'
141 CONCAT = '<concat>' [ INTTERM | STRTERM | LISTTERM ] + '</concat>'
142          | '<concat vname=" VNAME '">' [ INTTERM | STRTERM | LISTTERM ] + '</concat>'
143 LENGTH = '<length>' [ STRTERM | LISTTERM ] '</length>'
144 NTH = '<nth>' INTTERM [ STRTERM | LISTTERM ] '</nth>'
145 COPY = '<copy>' LISTTERM '</nth>'
146 INS = '<ins vname="' VNAME '">' INTTERM [ STRTERM | LISTTERM ] '</ins>'
147 DEL = '<del vname="' VNAME '">' INTTERM INTTERM '</ins>'
148 AND = '<and>' TERM + '</and>'
149 OR = '<or>' TERM + '</or>'
150 NOT = '<not>' TERM '</not>'
151 PROGN = '<progn>' TERM * '</progn>'
152 IF = '<if>' TERM TERM TERM ? '</if>'
153 WHEN = '<when>' TERM TERM * '</when>'
154 COND = '<cond>' LIST + '</cond>'
155 LOOP = '<loop>' TERM + '</loop>'
156 WHILE = '<while>' TERM + '</while>'
157 FOREACH = '<foreach vname="' VNAME '">' TERM + '</foreach>'
158 BREAK = '<break>' TERM ? '</break>'
159 RETURN = '<return>' TERM ? '</return>'
160 QUOTE = '<quote>' TERM '</quote>'
161
162 CATCH = '<catch>' [ SYMBOL | ERROR ] TERM + '</catch>'
163         | '<catch vname="' VNAME '">' [ SYMBOL | ERROR ] TERM + '</catch>'
164
165 ;; Evaluate TERMs one by one until the specified SYMBOL or ERROR is
166 ;; thrown by <throw/>.  If thrown, the value is 1, otherwise the value
167 ;; is 0.  If VNAME is specified it is set to the last evaluated term.
168 ;; It is the value of <throw/> if thrown.
169
170 THROW = '<throw>' SYMBOL ANYTERM ? '</throw>'
171         | '<throw>' ERROR '</throw>'
172
173 ;; Throw to the catch for SYMBOL or ERROR.  The value is ANYTERM (if
174 ;; any) or SYMBOL in the first form, and ERROR in the second form.
175
176 EVAL = '<eval>' TERM '</eval>'
177 TYPE = '<type>' TERM '</type>'