PIPS
lexer.l
Go to the documentation of this file.
1 /*
2 
3  $Id: lexer.l 23065 2016-03-02 09:05:50Z coelho $
4 
5  Copyright 1989-2016 MINES ParisTech
6 
7  This file is part of PIPS.
8 
9  PIPS is free software: you can redistribute it and/or modify it
10  under the terms of the GNU General Public License as published by
11  the Free Software Foundation, either version 3 of the License, or
12  any later version.
13 
14  PIPS is distributed in the hope that it will be useful, but WITHOUT ANY
15  WARRANTY; without even the implied warranty of MERCHANTABILITY or
16  FITNESS FOR A PARTICULAR PURPOSE.
17 
18  See the GNU General Public License for more details.
19 
20  You should have received a copy of the GNU General Public License
21  along with PIPS. If not, see <http://www.gnu.org/licenses/>.
22 
23 */
24 
25 %option nounput
26 %option noinput
27 
28 %{
29 //%option debug
30 #ifdef HAVE_CONFIG_H
31  #include "pips_config.h"
32 #endif
33 #include <stdlib.h>
34 #include <string.h>
35 
36 #include "genC.h"
37 #include "linear.h"
38 #include "ri.h"
39 
40 #include "resources.h"
41 
42 #include "ri-util.h"
43 #include "sac.h"
44 #include "patterns.h"
45 
46 %}
47 %%
48 "REFERENCE" return REFERENCE_TOK;
49 "QI_REF" return QI_REF_TOK;
50 "HI_REF" return HI_REF_TOK;
51 "SI_REF" return SI_REF_TOK;
52 "DI_REF" return DI_REF_TOK;
53 "SF_REF" return SF_REF_TOK;
54 "DF_REF" return DF_REF_TOK;
55 "SC_REF" return SC_REF_TOK;
56 "DC_REF" return DC_REF_TOK;
57 "LOG_REF" return LOG_REF_TOK;
58 "CONSTANT" return CONSTANT_TOK;
59 "=" return ASSIGN_OPERATOR_TOK;
60 "+" return PLUS_OPERATOR_TOK;
61 "-" return MINUS_OPERATOR_TOK;
62 "UNARY_MINUS" return UNARY_MINUS_OPERATOR_TOK;
63 "*" return MULTIPLY_OPERATOR_TOK;
64 "__PIPS_SAC_MULADD" return MULADD_OPERATOR_TOK;
65 "/" return DIVIDE_OPERATOR_TOK;
66 "INVERSE" return INVERSE_OPERATOR_TOK;
67 "^" return POWER_OPERATOR_TOK;
68 "%" return MODULO_OPERATOR_TOK;
69 "MIN" return MIN_OPERATOR_TOK;
70 "COS" return COS_OPERATOR_TOK;
71 "SIN" return SIN_OPERATOR_TOK;
72 "MIN0" return MIN0_OPERATOR_TOK;
73 "AMIN1" return AMIN1_OPERATOR_TOK;
74 "DMIN1" return DMIN1_OPERATOR_TOK;
75 "MAX" return MAX_OPERATOR_TOK;
76 "MAX0" return MAX0_OPERATOR_TOK;
77 "AMAX1" return AMAX1_OPERATOR_TOK;
78 "DMAX1" return DMAX1_OPERATOR_TOK;
79 "ABS" return ABS_OPERATOR_TOK;
80 "IABS" return IABS_OPERATOR_TOK;
81 "DABS" return DABS_OPERATOR_TOK;
82 "CABS" return CABS_OPERATOR_TOK;
83 "&" return AND_OPERATOR_TOK;
84 "|" return OR_OPERATOR_TOK;
85 "!" return NOT_OPERATOR_TOK;
86 "!=" return NON_EQUAL_OPERATOR_TOK;
87 "EQUIV" return EQUIV_OPERATOR_TOK;
88 "NON_EQUIV" return NON_EQUIV_OPERATOR_TOK;
89 "TRUE" return TRUE_OPERATOR_TOK;
90 "FALSE" return FALSE_OPERATOR_TOK;
91 ">=" return GREATER_OR_EQUAL_OPERATOR_TOK;
92 ">" return GREATER_THAN_OPERATOR_TOK;
93 "<=" return LESS_OR_EQUAL_OPERATOR_TOK;
94 "<" return LESS_THAN_OPERATOR_TOK;
95 "==" return EQUAL_OPERATOR_TOK;
96 "?" return PHI_TOK;
97 [0-9.-]+ { yylval.iVal = atoi(yytext); return INTEGER_TOK; }
98 [A-Za-z][0-9A-Za-z_]* { yylval.strVal = strdup(yytext); return IDENTIFIER_TOK; }
99 [ \t] ;
100 [\n] { sac_lineno ++; }
101 "#".* ;
102 . return *yytext;
103 %%