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