PIPS
step_lexer.l
Go to the documentation of this file.
1 %{
2 #ifdef HAVE_CONFIG_H
3  #include "pips_config.h"
4 #endif
5 
6 #include "defines-local.h"
7 #include "step_bison_parser.h"
8 %}
9 
10 %option warn
11 %option noyywrap
12 %option noyy_top_state
13 %option noinput
14 %option nounput
15 %option stack
16 
17 %x unknow_pragma
18 %x omp_pragma omp_reduction
19 %x step_pragma
20 %x variable_list
21 %x schedule_arg
22 
23 letter [a-zA-Z]
24 ident ({letter}|"_")({letter}|[0-9]|"_")*
25 
26 %%
27 <INITIAL>. {yy_push_state(unknow_pragma); yymore();}
28 <unknow_pragma>.*\n {yy_pop_state(); step_lexerlval.string = strdup(yytext); return TK_RAW;}
29 
30 
31 <INITIAL>^(?i:omp) {yy_push_state(omp_pragma); return TK_OMP_PRAGMA;}
32 <omp_pragma>{
33  \n {yy_pop_state(); return TK_EOL;}
34  ("!"|"//")[^\n]* {step_lexerlval.string = strdup(yytext); return TK_COMMENT;}
35  (?i:parallel) {step_lexerlval.integer = STEP_PARALLEL; return TK_OMP_PARALLEL;}
36  (?i:do)|(?i:for) {step_lexerlval.integer = STEP_DO; return TK_OMP_LOOP;}
37  (?i:master) {step_lexerlval.integer = STEP_MASTER; return TK_OMP_MASTER;}
38  (?i:single) {step_lexerlval.integer = STEP_SINGLE; return TK_OMP_SINGLE;}
39  (?i:barrier) {step_lexerlval.integer = STEP_BARRIER; return TK_OMP_BARRIER;}
40  (?i:threadprivate) {/*is stored as both a directive and a clause */
41  step_lexerlval.integer = STEP_THREADPRIVATE; yy_push_state(variable_list); return TK_OMP_THREADPRIVATE;}
42 
43  (?i:end) {step_lexerlval.integer = 0; return TK_OMP_END;}
44 
45  (?i:nowait) {return TK_OMP_NOWAIT;}
46  (?i:shared) {yy_push_state(variable_list); return TK_OMP_SHARED;}
47  (?i:private) {yy_push_state(variable_list); return TK_OMP_PRIVATE;}
48  (?i:copyin) {yy_push_state(variable_list); return TK_OMP_COPYIN;}
49  (?i:firstprivate) {yy_push_state(variable_list); return TK_OMP_FIRSTPRIVATE;}
50  (?i:schedule) {yy_push_state(schedule_arg); return TK_OMP_SCHEDULE;}
51  (?i:reduction) {yy_push_state(omp_reduction); return TK_OMP_REDUCTION;}
52  (?i:default) {yy_push_state(variable_list); return TK_OMP_DEFAULT;}
53 }
54 <omp_reduction>{
55  "(" {return TK_LPAREN;}
56  "+" {step_lexerlval.integer = STEP_SUM_REDUCE; return TK_OPERATOR;}
57  "*" {step_lexerlval.integer = STEP_PROD_REDUCE; return TK_OPERATOR;}
58  (?i:max) {step_lexerlval.integer = STEP_MAX_REDUCE; return TK_OPERATOR;}
59  (?i:min) {step_lexerlval.integer = STEP_MIN_REDUCE; return TK_OPERATOR;}
60  ":" {yy_pop_state(); yy_push_state(variable_list); return TK_COLON;}
61 }
62 
63 
64 <INITIAL>^(?i:step) {yy_push_state(step_pragma); return TK_STEP_PRAGMA;}
65 <step_pragma>{
66  \n {yy_pop_state(); return TK_EOL;}
67  (?i:mpi) {step_lexerlval.integer = STEP_TRANSFORMATION_MPI; return TK_STEP_TRANSFORMATION;}
68  (?i:no_mpi) {step_lexerlval.integer = STEP_TRANSFORMATION_OMP; return TK_STEP_TRANSFORMATION;}
69  (?i:hybrid) {step_lexerlval.integer = STEP_TRANSFORMATION_HYBRID; return TK_STEP_TRANSFORMATION;}
70  (?i:ignore) {step_lexerlval.integer = STEP_TRANSFORMATION_SEQ; return TK_STEP_TRANSFORMATION;}
71 }
72 
73 
74 <variable_list>{
75 "(" {return TK_LPAREN;}
76 "," {return TK_COMMA;}
77 ")" {yy_pop_state(); return TK_RPAREN;}
78 {ident} {step_lexerlval.string = strdup(yytext); return TK_IDENT;}
79 }
80 
81 <schedule_arg>{
82 "(" {return TK_LPAREN;}
83 "," {return TK_COMMA;}
84 ")" {yy_pop_state(); return TK_RPAREN;}
85 {letter}+ {step_lexerlval.string = strdup(yytext); return TK_IDENT;}
86 [0-9]+ {step_lexerlval.string = strdup(yytext); return TK_IDENT;}
87 }
88 
89 <*>[ \t] {}
90 <*>[^ \t] {pips_debug(1, "\tunexepected character: %s\n", yytext); return TK_ERROR;}
91 
92 %%
93