source: CIVL/mods/dev.civl.abc/grammar/c/OmpParser.g

main
Last change on this file was aad342c, checked in by Stephen Siegel <siegel@…>, 3 years ago

Performing huge refactor to incorporate ABC, GMC, and SARL into CIVL repo and use Java modules.

git-svn-id: svn://vsl.cis.udel.edu/civl/trunk@5664 fb995dde-84ed-4084-dfe6-e5aef3e2452c

  • Property mode set to 100644
File size: 5.8 KB
RevLine 
[aad342c]1parser grammar OmpParser;
2
3options
4{
5 language=Java;
6 tokenVocab=OmpLexer;
7 output=AST;
8}
9
10import CivlCParser;
11
12tokens
13{
14 IDENTIFIER_LIST;
15 PARALLEL_FOR;
16 PARALLEL_SECTIONS;
17 UNIQUE_FOR;
18 UNIQUE_PARALLEL;
19 DATA_CLAUSE;
20 FOR_CLAUSE;
21}
22
23/* ANTLR 3.5 doesn't allow redefinition of headers in composite grammars.
24Our solution for this is: add the header (package, imported package)
25to the generated java file in ant.
26@header
27{
28package dev.civl.abc.parse.common;
29}*/
30
31@members {
32 @Override
33 public void displayRecognitionError(String[] tokenNames, RecognitionException e) {
34 String hdr = getErrorHeader(e);
35 String msg = getErrorMessage(e, tokenNames);
36
37 throw new RuntimeParseException(hdr+" "+msg, e.token);
38 }
39
40 @Override
41 public void emitErrorMessage(String msg) { // don't try to recover!
42 throw new RuntimeParseException(msg);
43 }
44}
45
46// openMP grammar : a bit old
47// missing some things, e.g., collapse, block, ...
48
49openmp_construct
50 :
51 parallel_for_directive
52 | parallel_sections_directive
53 | parallel_directive
54 | for_directive
55 | sections_directive
56 | single_directive
57 | simd_directive
58 | master_directive
59 | critical_directive
60 | ordered_directive
61 | section_directive
62 | ompatomic_directive
63 | barrier_directive
64 | flush_directive
65 | threadprivate_directive
66 ;
67
68parallel_directive
69 : PARALLEL (p+=parallel_clause)*
70 -> ^(PARALLEL $p*)
71 ;
72
73parallel_clause
74 : unique_parallel_clause
75 | data_clause
76 ;
77
78master_directive
79 : MASTER -> ^(MASTER)
80 ;
81
82critical_directive
83 : CRITICAL (LPAREN id=IDENTIFIER RPAREN)?
84 -> ^(CRITICAL $id?)
85 ;
86
87sections_directive
88 : SECTIONS (s+=sections_clause)*
89 -> ^(SECTIONS $s*)
90 ;
91
92sections_clause
93 : data_clause
94 | nowait_directive
95 ;
96
97section_directive
98 : SECTION -> ^(SECTION)
99 ;
100
101parallel_for_directive
102 : PARALLEL FOR p+=parallel_for_clause*
103 -> ^(PARALLEL_FOR $p*)
104 ;
105
106parallel_for_clause
107 : unique_parallel_clause
108 | unique_for_clause
109 | data_clause
110 ;
111
112parallel_sections_directive
113 : PARALLEL SECTIONS p+=parallel_sections_clause*
114 -> ^(PARALLEL_SECTIONS $p*)
115 ;
116
117parallel_sections_clause
118 : unique_parallel_clause
119 | data_clause
120 ;
121
122simd_directive
123 : SIMD a+=simd_clause*
124 -> ^(SIMD $a*)
125 ;
126
127simd_clause
128 : SAFELEN LPAREN e=expression RPAREN
129 -> ^(SAFELEN $e)
130 | SIMDLEN LPAREN e=expression RPAREN
131 -> ^(SIMDLEN $e)
132 | if_clause
133 | data_clause
134 | collapse_clause
135 ; //TODO: incompleted, aligned, linear, ...
136
137single_directive
138 : SINGLE s+=single_clause*
139 -> ^(SINGLE $s*)
140 ;
141
142single_clause
143 : data_clause
144 | nowait_directive
145 ;
146
147barrier_directive
148 : BARRIER -> ^(BARRIER)
149 ;
150
151ompatomic_directive
152 : OMPATOMIC c0=atomic_clasue? c1=seq_cst_clause?
153 -> ^(OMPATOMIC $c0? $c1?)
154 ;
155
156atomic_clasue
157 : READ | WRITE | UPDATE | CAPTURE
158 ;
159
160seq_cst_clause
161 : SEQ_CST
162 ;
163
164flush_directive
165 : FLUSH f=flush_vars?
166 -> ^(FLUSH $f?)
167 ;
168
169flush_vars
170 : LPAREN i=identifier_list RPAREN
171 -> $i
172 ;
173
174ordered_directive
175 : ORDERED -> ^(ORDERED)
176 ;
177
178nowait_directive
179 : NOWAIT -> ^(NOWAIT)
180 ;
181
182threadprivate_directive
183 : THD_PRIVATE LPAREN i=identifier_list RPAREN
184 -> ^(THD_PRIVATE $i)
185 ;
186
187for_directive
188 : FOR (f+=for_clause)*
189 -> ^(FOR $f*)
190 ;
191
192for_clause
193 : u=unique_for_clause -> ^(FOR_CLAUSE $u)
194 | d=data_clause -> ^(FOR_CLAUSE $d)
195 | n=nowait_directive -> ^(FOR_CLAUSE $n)
196 ;
197
198unique_for_clause
199 : o=ordered_clause ->^(UNIQUE_FOR $o)
200 | s1=schedule_clause -> ^(UNIQUE_FOR $s1)
201 | c=collapse_clause -> ^(UNIQUE_FOR $c)
202 ;
203
204ordered_clause
205 :
206 ORDERED (LPAREN e1=expression RPAREN)?
207 -> ^(ORDERED $e1?)
208 ;
209
210schedule_clause
211 : SCHEDULE LPAREN s1=schedule_kind COMMA e=expression RPAREN
212 -> ^(SCHEDULE $s1 $e)
213 | SCHEDULE LPAREN s=schedule_kind RPAREN
214 -> ^(SCHEDULE $s)
215 ;
216
217collapse_clause
218 :
219 COLLAPSE LPAREN i=INTEGER_CONSTANT RPAREN
220 -> ^(COLLAPSE $i)
221 ;
222
223schedule_kind
224 : STATIC -> ^(STATIC)
225 | DYNAMIC -> ^(DYNAMIC)
226 | GUIDED -> ^(GUIDED)
227 | RUNTIME -> ^(RUNTIME)
228 | AUTO -> ^(AUTO)
229 ;
230
231unique_parallel_clause
232 : i=if_clause
233 -> ^(UNIQUE_PARALLEL $i)
234 | n=num_threads_clause
235 -> ^(UNIQUE_PARALLEL $n)
236 ;
237
238if_clause
239 : IF LPAREN e1=expression RPAREN
240 -> ^(IF $e1)
241 ;
242
243num_threads_clause
244 : NUM_THREADS LPAREN e2=expression RPAREN
245 -> ^(NUM_THREADS $e2)
246 ;
247
248data_clause
249 : d1=private_clause
250 -> ^(DATA_CLAUSE $d1)
251 | d2=firstprivate_clause
252 -> ^(DATA_CLAUSE $d2)
253 | d3=lastprivate_clause
254 -> ^(DATA_CLAUSE $d3)
255 | d4=shared_clause
256 -> ^(DATA_CLAUSE $d4)
257 | d5=default_clause
258 -> ^(DATA_CLAUSE $d5)
259 | d6=reduction_clause
260 -> ^(DATA_CLAUSE $d6)
261 | d7=copyin_clause
262 -> ^(DATA_CLAUSE $d7)
263 | d8=copyprivate_clause
264 -> ^(DATA_CLAUSE $d8)
265 ;
266
267private_clause
268 : PRIVATE LPAREN i1=identifier_list RPAREN
269 -> ^(PRIVATE $i1)
270 ;
271
272firstprivate_clause
273 : FST_PRIVATE LPAREN i2=identifier_list RPAREN
274 -> ^(FST_PRIVATE $i2)
275 ;
276
277lastprivate_clause
278 : LST_PRIVATE LPAREN i3=identifier_list RPAREN
279 -> ^(LST_PRIVATE $i3)
280 ;
281
282shared_clause
283 : SHARED LPAREN i4=identifier_list RPAREN
284 -> ^(SHARED $i4)
285 ;
286
287default_clause
288 : DEFAULT LPAREN SHARED RPAREN
289 -> ^(DEFAULT SHARED)
290 | DEFAULT LPAREN NONE RPAREN
291 -> ^(DEFAULT NONE)
292 ;
293
294reduction_clause
295 : REDUCTION LPAREN r=reduction_operator COLON i5=identifier_list RPAREN
296 -> ^(REDUCTION $r $i5)
297 ;
298
299copyin_clause
300 : COPYIN LPAREN i6=identifier_list RPAREN
301 -> ^(COPYIN $i6)
302 ;
303
304copyprivate_clause
305 : COPYPRIVATE LPAREN i7=identifier_list RPAREN
306 -> ^(COPYPRIVATE $i7)
307 ;
308
309reduction_operator
310 : PLUS -> ^(PLUS)
311 | STAR -> ^(STAR)
312 | SUB -> ^(SUB)
313 | AMPERSAND -> ^(AMPERSAND)
314 | BITXOR -> ^(BITXOR)
315 | BITOR -> ^(BITOR)
316 | AND -> ^(AND)
317 | OR -> ^(OR)
318 | IDENTIFIER -> ^(IDENTIFIER)
319 ;
320
321identifier_list
322 :
323 i1=IDENTIFIER ( COMMA i2+=IDENTIFIER)*
324 -> ^(IDENTIFIER_LIST $i1 $i2*)
325 ;
326
Note: See TracBrowser for help on using the repository browser.