3 #include "pips_config.h"
6 #include "defines-local.h"
7 #include "step_bison_parser.h"
12 %option noyy_top_state
18 %x omp_pragma omp_reduction
24 ident ({letter}|"_")({letter}|[0-9]|"_")*
27 <INITIAL>. {yy_push_state(unknow_pragma); yymore();}
28 <unknow_pragma>.*\n {yy_pop_state(); step_lexerlval.string = strdup(yytext); return TK_RAW;}
31 <INITIAL>^(?i:omp) {yy_push_state(omp_pragma); return TK_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;}
43 (?i:end) {step_lexerlval.integer = 0; return TK_OMP_END;}
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;}
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;}
64 <INITIAL>^(?i:step) {yy_push_state(step_pragma); return TK_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;}
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;}
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;}
90 <*>[^ \t] {pips_debug(1, "\tunexepected character: %s\n", yytext); return TK_ERROR;}