source: devel-tools/trunk/LL1GrammarAnalyzers/LL1Grammars/Rf5LLGr.g @ 4112

Last change on this file since 4112 was 4112, checked in by yura, 11 years ago
  • Dummy.
File size: 3.9 KB
Line 
1/* rfpllgr.g */
2
3/* This file contains the LL(1) grammar that is actually used in */
4/* the Refal Plus compiler written by R.F.Gurin & S.A.Romanenko. */
5/* The annotated version of this grammar (contained in the file  */
6/* "rfpllgr.f") was produced by executing the command:           */
7/*      gr.exe rfpllgr.g >rfpllgr.f                              */
8
9%token SC COMMA
10%token LPAR RPAR
11%token LANGU RANGU
12%token LCURL RCURL
13
14%token MODULE
15
16%token USE
17
18%token PUBLIC
19
20%token OBJ_DECL FUNC_DECL MATCH_DIR
21
22%token NATIVE
23
24%token CONST FAIL ITER
25%token TRAP WITH
26
27%token COL COL_CURL LET NOT EQL REF
28
29%token FENCE CUT ERROR
30
31%token TRACE_ALL
32
33%token CHAR WORD NUMB
34%token VAR
35
36%token INTERFACE IMPLEMENTATION
37
38%%
39
40program :       IMPLEMENTATION implem
41        |       INTERFACE interf
42        ;
43
44implem  :       module_name imports directives
45        ;
46
47interf  :       module_name decls
48        ;
49
50module_name
51        :       /* empty */
52        |       MODULE name SC
53        ;
54
55imports :       USE names SC imports
56        |       /* empty */
57        ;
58
59directives
60        :       directive SC directives
61        |       /* empty */
62        ;
63
64directive
65        :       decl
66        |       func_def
67        |       native
68        |       trace_all
69        ;
70
71decls   :       decl SC decls
72        |       /* empty */
73        ;
74
75decl    :       PUBLIC private_decl
76        |       private_decl
77        ;
78
79private_decl
80        :       obj_decl
81        |       const_decl
82        |       func_decl
83        ;
84
85obj_decl
86        :       OBJ_DECL names
87        ;
88
89const_decl
90        :       CONST const_bindings
91        ;
92
93const_bindings
94        :       const_binding const_bindings_tail
95        |       /* empty */
96        ;
97
98const_bindings_tail
99        :       COMMA const_binding const_bindings_tail
100        |       /* empty */
101        ;
102
103const_binding
104        :       name EQL exp
105        ;
106
107func_decl
108        :       FUNC_DECL name exp EQL exp
109        ;
110
111native
112        :       NATIVE native_block
113        ;
114
115native_block
116        :       LCURL native_sentences RCURL
117        |       native_sentence
118        ;
119
120native_sentences
121        :       native_sentence SC native_sentences
122        |       /* empty */
123        ;
124
125native_sentence
126        :       name EQL name
127        ;
128
129trace_all
130        :       TRACE_ALL
131        ;
132
133func_def
134        :       name sentence
135        ;
136
137
138
139
140
141
142sentence
143        :       pattern_alt pattern_alts path_tail
144        |       pattern rest
145        ;
146
147path    :       source path_tail
148        ;
149
150path_tail
151        :       COL sentence
152        |       iter let rest /* if nothing then no empty let and rest */
153        ;
154
155iter    :       ITER source
156        |       /* empty */
157        ;
158
159let     :       LET exp
160        |       /* empty == LET 'empty exp' */
161        ;
162
163rest    :       COMMA path
164        |       FENCE path
165        |       CUT path
166        |       ERROR path
167        |       EQL path
168        |       NOT source rest
169        |       FAIL
170        |       TRAP path WITH sentence
171        |       /* empty == COMMA 'empty exp' */
172        ;
173
174source  :       alt pattern_alts
175        |       exp pattern_alts
176        ;
177
178pattern_alts
179        :       COL_CURL pattern_alt pattern_alts
180        |       /* empty */
181        ;
182
183pattern :       MATCH_DIR exp
184        |       exp
185        ;
186
187
188pattern_alt
189        :       LCURL sentences RCURL
190        ;
191
192sentences
193        :       sentence SC sentences
194        |       /* empty */
195        ;
196
197alt     :       LCURL paths RCURL
198        ;
199
200paths   :       path SC paths
201        |       /* empty */
202        ;
203
204
205
206
207
208exp
209        :       exp_head exp
210        |       /* empty */
211        ;
212
213exp_head
214        :       REF name
215        |       static_symbol
216        |       LPAR exp RPAR
217        |       VAR
218        |       LANGU name exp RANGU
219        ;
220
221static_symbol
222        :       CHAR
223        |       WORD
224        |       NUMB
225        ;
226
227names
228        :       name names
229        |       /* empty */
230        ;
231
232name    :       WORD
233        ;
Note: See TracBrowser for help on using the repository browser.