| [aad342c] | 1 | parser grammar OmpParser;
|
|---|
| 2 |
|
|---|
| 3 | options
|
|---|
| 4 | {
|
|---|
| 5 | language=Java;
|
|---|
| 6 | tokenVocab=OmpLexer;
|
|---|
| 7 | output=AST;
|
|---|
| 8 | }
|
|---|
| 9 |
|
|---|
| 10 | import CivlCParser;
|
|---|
| 11 |
|
|---|
| 12 | tokens
|
|---|
| 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.
|
|---|
| 24 | Our solution for this is: add the header (package, imported package)
|
|---|
| 25 | to the generated java file in ant.
|
|---|
| 26 | @header
|
|---|
| 27 | {
|
|---|
| 28 | package 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 |
|
|---|
| 49 | openmp_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 |
|
|---|
| 68 | parallel_directive
|
|---|
| 69 | : PARALLEL (p+=parallel_clause)*
|
|---|
| 70 | -> ^(PARALLEL $p*)
|
|---|
| 71 | ;
|
|---|
| 72 |
|
|---|
| 73 | parallel_clause
|
|---|
| 74 | : unique_parallel_clause
|
|---|
| 75 | | data_clause
|
|---|
| 76 | ;
|
|---|
| 77 |
|
|---|
| 78 | master_directive
|
|---|
| 79 | : MASTER -> ^(MASTER)
|
|---|
| 80 | ;
|
|---|
| 81 |
|
|---|
| 82 | critical_directive
|
|---|
| 83 | : CRITICAL (LPAREN id=IDENTIFIER RPAREN)?
|
|---|
| 84 | -> ^(CRITICAL $id?)
|
|---|
| 85 | ;
|
|---|
| 86 |
|
|---|
| 87 | sections_directive
|
|---|
| 88 | : SECTIONS (s+=sections_clause)*
|
|---|
| 89 | -> ^(SECTIONS $s*)
|
|---|
| 90 | ;
|
|---|
| 91 |
|
|---|
| 92 | sections_clause
|
|---|
| 93 | : data_clause
|
|---|
| 94 | | nowait_directive
|
|---|
| 95 | ;
|
|---|
| 96 |
|
|---|
| 97 | section_directive
|
|---|
| 98 | : SECTION -> ^(SECTION)
|
|---|
| 99 | ;
|
|---|
| 100 |
|
|---|
| 101 | parallel_for_directive
|
|---|
| 102 | : PARALLEL FOR p+=parallel_for_clause*
|
|---|
| 103 | -> ^(PARALLEL_FOR $p*)
|
|---|
| 104 | ;
|
|---|
| 105 |
|
|---|
| 106 | parallel_for_clause
|
|---|
| 107 | : unique_parallel_clause
|
|---|
| 108 | | unique_for_clause
|
|---|
| 109 | | data_clause
|
|---|
| 110 | ;
|
|---|
| 111 |
|
|---|
| 112 | parallel_sections_directive
|
|---|
| 113 | : PARALLEL SECTIONS p+=parallel_sections_clause*
|
|---|
| 114 | -> ^(PARALLEL_SECTIONS $p*)
|
|---|
| 115 | ;
|
|---|
| 116 |
|
|---|
| 117 | parallel_sections_clause
|
|---|
| 118 | : unique_parallel_clause
|
|---|
| 119 | | data_clause
|
|---|
| 120 | ;
|
|---|
| 121 |
|
|---|
| 122 | simd_directive
|
|---|
| 123 | : SIMD a+=simd_clause*
|
|---|
| 124 | -> ^(SIMD $a*)
|
|---|
| 125 | ;
|
|---|
| 126 |
|
|---|
| 127 | simd_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 |
|
|---|
| 137 | single_directive
|
|---|
| 138 | : SINGLE s+=single_clause*
|
|---|
| 139 | -> ^(SINGLE $s*)
|
|---|
| 140 | ;
|
|---|
| 141 |
|
|---|
| 142 | single_clause
|
|---|
| 143 | : data_clause
|
|---|
| 144 | | nowait_directive
|
|---|
| 145 | ;
|
|---|
| 146 |
|
|---|
| 147 | barrier_directive
|
|---|
| 148 | : BARRIER -> ^(BARRIER)
|
|---|
| 149 | ;
|
|---|
| 150 |
|
|---|
| 151 | ompatomic_directive
|
|---|
| 152 | : OMPATOMIC c0=atomic_clasue? c1=seq_cst_clause?
|
|---|
| 153 | -> ^(OMPATOMIC $c0? $c1?)
|
|---|
| 154 | ;
|
|---|
| 155 |
|
|---|
| 156 | atomic_clasue
|
|---|
| 157 | : READ | WRITE | UPDATE | CAPTURE
|
|---|
| 158 | ;
|
|---|
| 159 |
|
|---|
| 160 | seq_cst_clause
|
|---|
| 161 | : SEQ_CST
|
|---|
| 162 | ;
|
|---|
| 163 |
|
|---|
| 164 | flush_directive
|
|---|
| 165 | : FLUSH f=flush_vars?
|
|---|
| 166 | -> ^(FLUSH $f?)
|
|---|
| 167 | ;
|
|---|
| 168 |
|
|---|
| 169 | flush_vars
|
|---|
| 170 | : LPAREN i=identifier_list RPAREN
|
|---|
| 171 | -> $i
|
|---|
| 172 | ;
|
|---|
| 173 |
|
|---|
| 174 | ordered_directive
|
|---|
| 175 | : ORDERED -> ^(ORDERED)
|
|---|
| 176 | ;
|
|---|
| 177 |
|
|---|
| 178 | nowait_directive
|
|---|
| 179 | : NOWAIT -> ^(NOWAIT)
|
|---|
| 180 | ;
|
|---|
| 181 |
|
|---|
| 182 | threadprivate_directive
|
|---|
| 183 | : THD_PRIVATE LPAREN i=identifier_list RPAREN
|
|---|
| 184 | -> ^(THD_PRIVATE $i)
|
|---|
| 185 | ;
|
|---|
| 186 |
|
|---|
| 187 | for_directive
|
|---|
| 188 | : FOR (f+=for_clause)*
|
|---|
| 189 | -> ^(FOR $f*)
|
|---|
| 190 | ;
|
|---|
| 191 |
|
|---|
| 192 | for_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 |
|
|---|
| 198 | unique_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 |
|
|---|
| 204 | ordered_clause
|
|---|
| 205 | :
|
|---|
| 206 | ORDERED (LPAREN e1=expression RPAREN)?
|
|---|
| 207 | -> ^(ORDERED $e1?)
|
|---|
| 208 | ;
|
|---|
| 209 |
|
|---|
| 210 | schedule_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 |
|
|---|
| 217 | collapse_clause
|
|---|
| 218 | :
|
|---|
| 219 | COLLAPSE LPAREN i=INTEGER_CONSTANT RPAREN
|
|---|
| 220 | -> ^(COLLAPSE $i)
|
|---|
| 221 | ;
|
|---|
| 222 |
|
|---|
| 223 | schedule_kind
|
|---|
| 224 | : STATIC -> ^(STATIC)
|
|---|
| 225 | | DYNAMIC -> ^(DYNAMIC)
|
|---|
| 226 | | GUIDED -> ^(GUIDED)
|
|---|
| 227 | | RUNTIME -> ^(RUNTIME)
|
|---|
| 228 | | AUTO -> ^(AUTO)
|
|---|
| 229 | ;
|
|---|
| 230 |
|
|---|
| 231 | unique_parallel_clause
|
|---|
| 232 | : i=if_clause
|
|---|
| 233 | -> ^(UNIQUE_PARALLEL $i)
|
|---|
| 234 | | n=num_threads_clause
|
|---|
| 235 | -> ^(UNIQUE_PARALLEL $n)
|
|---|
| 236 | ;
|
|---|
| 237 |
|
|---|
| 238 | if_clause
|
|---|
| 239 | : IF LPAREN e1=expression RPAREN
|
|---|
| 240 | -> ^(IF $e1)
|
|---|
| 241 | ;
|
|---|
| 242 |
|
|---|
| 243 | num_threads_clause
|
|---|
| 244 | : NUM_THREADS LPAREN e2=expression RPAREN
|
|---|
| 245 | -> ^(NUM_THREADS $e2)
|
|---|
| 246 | ;
|
|---|
| 247 |
|
|---|
| 248 | data_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 |
|
|---|
| 267 | private_clause
|
|---|
| 268 | : PRIVATE LPAREN i1=identifier_list RPAREN
|
|---|
| 269 | -> ^(PRIVATE $i1)
|
|---|
| 270 | ;
|
|---|
| 271 |
|
|---|
| 272 | firstprivate_clause
|
|---|
| 273 | : FST_PRIVATE LPAREN i2=identifier_list RPAREN
|
|---|
| 274 | -> ^(FST_PRIVATE $i2)
|
|---|
| 275 | ;
|
|---|
| 276 |
|
|---|
| 277 | lastprivate_clause
|
|---|
| 278 | : LST_PRIVATE LPAREN i3=identifier_list RPAREN
|
|---|
| 279 | -> ^(LST_PRIVATE $i3)
|
|---|
| 280 | ;
|
|---|
| 281 |
|
|---|
| 282 | shared_clause
|
|---|
| 283 | : SHARED LPAREN i4=identifier_list RPAREN
|
|---|
| 284 | -> ^(SHARED $i4)
|
|---|
| 285 | ;
|
|---|
| 286 |
|
|---|
| 287 | default_clause
|
|---|
| 288 | : DEFAULT LPAREN SHARED RPAREN
|
|---|
| 289 | -> ^(DEFAULT SHARED)
|
|---|
| 290 | | DEFAULT LPAREN NONE RPAREN
|
|---|
| 291 | -> ^(DEFAULT NONE)
|
|---|
| 292 | ;
|
|---|
| 293 |
|
|---|
| 294 | reduction_clause
|
|---|
| 295 | : REDUCTION LPAREN r=reduction_operator COLON i5=identifier_list RPAREN
|
|---|
| 296 | -> ^(REDUCTION $r $i5)
|
|---|
| 297 | ;
|
|---|
| 298 |
|
|---|
| 299 | copyin_clause
|
|---|
| 300 | : COPYIN LPAREN i6=identifier_list RPAREN
|
|---|
| 301 | -> ^(COPYIN $i6)
|
|---|
| 302 | ;
|
|---|
| 303 |
|
|---|
| 304 | copyprivate_clause
|
|---|
| 305 | : COPYPRIVATE LPAREN i7=identifier_list RPAREN
|
|---|
| 306 | -> ^(COPYPRIVATE $i7)
|
|---|
| 307 | ;
|
|---|
| 308 |
|
|---|
| 309 | reduction_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 |
|
|---|
| 321 | identifier_list
|
|---|
| 322 | :
|
|---|
| 323 | i1=IDENTIFIER ( COMMA i2+=IDENTIFIER)*
|
|---|
| 324 | -> ^(IDENTIFIER_LIST $i1 $i2*)
|
|---|
| 325 | ;
|
|---|
| 326 |
|
|---|