*** 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 ?
31   <possible-value> [ INT | '<range>' INT INT '</range>' ] *</possible-value>
32   '</defvar>'
33
34 DEFVAR-STR =
35   '<defvar vname"' VNAME '">'
36   DESCRIPTION ?
37   STR ?
38   <possible-value> STR * </possible-value>
39   '</defvar>'
40
41 DEFVAR-SYM =
42   '<defvar vname"' VNAME '">'
43   DESCRIPTION ?
44   SYMBOL ?
45   <possible-value> SYMBOL * </possible-value>
46   '</defvar>'
47
48 DESCRIPTION =
49   '<description>' [ TEXT | GETTEXT ] '</description>'
50
51 GETTEXT =
52   '<gettext>' TEXT '</gettext>'
53
54 INT =
55   '<integer>' INTEGER '</integer>'
56 STR =
57   '<string>' STRING '</string>'
58 SYMBOL =
59   '<symbol>' NAME '</symbol>'
60 LIST =
61   '<list>' TERM * '</list>' | <list/>
62
63 VAR =
64   '<varref vname="' VNAME '"/>'
65
66 FUNCALL =
67   '<funcall fname="' FNAME '">' TERM * '</funcall>'
68   | '<' PREDEFINED '>' TERM * '</' PREDEFINED '>'
69   | '<' PREDEFINED 'vname="' VNAME '">' TERM * '</' PREDEFINED '>'
70
71 PREDEFINED =
72   'set'
73   | 'and' | 'or' | 'not'
74   | 'lt' | 'le' | 'eq' | 'ge' | 'gt' | 'noteq'
75   | 'add' | 'sub' | 'mul' | 'div' | 'mod'
76   | 'logand' | 'logior' | 'logxor' | 'lsh'
77   | 'append' | 'concat' | 'length' | 'nth'  | 'copy' | 'ins' | 'del'
78   | 'progn' | 'if' | 'when' | 'cond'
79   | 'loop' | 'while' | 'foreach' | 'break' | 'return'
80   | 'quote' | 'eval' | 'type'
81
82 ;; TERM has a value, and is evaluated to a TERM as below.
83 ;; INT has an integer value, and is evaluated to itself .
84 ;; STRING has a string value, and is evaluated to itself.
85 ;; SYMBOL has a symbol value, and is evaluated to itself.
86 ;; LIST has a list value and, is evaluated to itself.
87 ;; VAR has a value of TERM that is assigned to the variable,
88 ;;   and is evalued to that TERM.
89 ;; FUNCALL has a value of TERM that is returned by that function,
90 ;;   and is evalued to that TERM.
91
92 INTTERM = INT | VAR (value is INT) | FUNCALL (return INT)
93 STRTERM = STR | VAR (value is STR) | FUNCALL (return STR)
94 LISTTERM = LIST | VAR (value is LIST) | FUNCALL (return LIST)
95 ANYTERM = TERM
96
97 ;; Here after, when an argument is TERM, it is given to a function
98 ;; without being evaluted.  Otherwise, an evaluated term is given.
99
100 '<set vname="' VNAME '">' ANYTERM '</set>'
101 '<add>' INTTERM + '</add>'
102 '<add vname="' VNAME '">' INTTERM + '</add>'
103 '<sub>' INTTERM + '</sub>'
104 '<sub vname="' VNAME '">' INTTERM + '</sub>'
105 '<mul>' INTTERM + '</mul>'
106 '<mul vname="' VNAME '">' INTTERM + '</mul>'
107 '<div>' INTTERM + '</div>'
108 '<div vname="' VNAME '">' INTTERM + '</div>'
109 '<mod>' INTTERM INTTERM '</mod>'
110 '<mod vname="' VNAME '">' INTTERM '</div>'
111 '<logand> INTTERM + '</logand>'
112 '<logand vname="' VNAME '">' INTTERM + '</logand>'
113 '<logior> INTTERM + '</logior>'
114 '<logior> vname="' VNAME '">' INTTERM + '</logior>'
115 '<logxor> INTTERM + '</logxor>'
116 '<logxor> vname="' VNAME '">' INTTERM + '</logxor>'
117 '<lsh>' INTTERM INTTERM '</lsh>'
118 '<lsh vname="' VNAME '">' INTTERM '</mul>'
119 '<lt>' INTTERM INTTERM '</lt>'
120 '<le>' INTTERM INTTERM '</le>'
121 '<eq>' INTTERM INTTERM '</eq>'
122 '<noteq>' INTTERM INTTERM '</noteq>'
123 '<ge>' INTTERM INTTERM '</ge>'
124 '<gt>' INTTERM INTTERM '</gt>'
125 '<append>' ANYTERM + '</append>'
126 '<concat>' [ INTTERM | STRTERM | LISTTERM ] + '</concat>'
127 '<length>' [ STRTERM | LISTTERM ] '</length>'
128 '<nth>' INTTERM [ STRTERM | LISTTERM ] '</nth>'
129 '<copy>' LISTTERM '</nth>'
130 '<ins vname="' VNAME '">' INTTERM [ STRTERM | LISTTERM ] '</ins>'
131 '<del vname="' VNAME '">' INTTERM INTTERM '</ins>'
132 '<and>' TERM + '</and>'
133 '<or>' TERM + '</or>'
134 '<not>' TERM '</not>'
135 '<progn>' TERM * '</progn>'
136 '<if>' TERM TERM TERM ? '</if>'
137 '<when>' TERM TERM * '</when>'
138 '<cond>' LIST + '</cond>'
139 '<loop>' TERM + '</loop>'
140 '<while>' TERM + '</while>'
141 '<foreach vname="' VNAME '">' TERM + '</foreach>'
142 '<break>' ANYTERM ? '</break>'
143 '<return>' ANYTERM ? '</return>'
144 '<quote>' TERM '</quote>'
145 '<eval>' TERM '</eval>'
146 '<type>' ANYTERM '</type>'