Line data Source code
1 : %{ /* -*- C++ -*- */
2 : # include <cstdlib>
3 : # include <errno.h>
4 : # include <limits.h>
5 : # include <string>
6 : # include "Lha-Reader.hpp"
7 :
8 : # undef yywrap
9 : # define yywrap() 1
10 :
11 : # define YY_DECL LHA_DECL
12 :
13 : /* By default lhalex returns int, we use token_type.
14 : Unfortunately lhaterminate by default returns 0, which is
15 : not of token_type. */
16 : #define yyterminate() return token::END
17 : #ifndef __clang_analyzer__
18 :
19 : %}
20 :
21 : %option noyywrap nounput batch debug
22 :
23 : STR [a-zA-Z][a-zA-Z_$.0-9]*
24 : GENERALSTR [a-zA-Z][a-zA-Z_$\[,\]0-9]*
25 : INT [0-9]+|[0-9]*
26 : REAL ([0-9]+|[0-9]*\.[0-9]+)([eE][-+]?[0-9]+)?
27 : blank [ \t]
28 :
29 :
30 : %{
31 : # define LHA_USER_ACTION lhalloc->columns (lhaleng);
32 : %}
33 : %%
34 : %{
35 9850 : lhalloc->step ();
36 : %}
37 2511 : {blank}+ lhalloc->step ();
38 3273 : [\n]+ lhalloc->lines (lhaleng); lhalloc->step ();
39 762 : [\%][^\n]*[\n]
40 9 :
41 : %{
42 : typedef lha::Lha_parser::token token;
43 : %}
44 : /* Convert ints to the actual type of tokens. */
45 724 : [{}] return lha::Lha_parser::token_type (lhatext[0]);
46 :
47 702 : ";" {lhalval->name = new std::string (lhatext); return token::SEMICOLON;
48 : Reader.error (*lhalloc, "; expected");}
49 :
50 1330 : "," {lhalval->name = new std::string (lhatext); return token::COMMA;
51 : Reader.error (*lhalloc, ", expected");}
52 :
53 133 : "#" {lhalval->name = new std::string (lhatext); return token::SHARP;
54 : Reader.error (*lhalloc, "# expected");}
55 :
56 143 : ":" {lhalval->name = new std::string (lhatext); return token::COLON;
57 : Reader.error (*lhalloc, ": expected");}
58 :
59 0 : "\\" {lhalval->name = new std::string (lhatext); return token::BackSlash;
60 : Reader.error (*lhalloc, ": expected");}
61 :
62 948 : "(" {lhalval->name = new std::string (lhatext); return token::LB;
63 : Reader.error (*lhalloc, "( expected");}
64 948 : ")" {lhalval->name = new std::string (lhatext); return token::RB;
65 : Reader.error (*lhalloc, ") expected");}
66 0 : "[" {lhalval->name = new std::string (lhatext); return token::LSB;
67 : Reader.error (*lhalloc, "[ expected");}
68 0 : "]" {lhalval->name = new std::string (lhatext); return token::RSB;
69 : Reader.error (*lhalloc, "] expected");}
70 28 : "&" {lhalval->name = new std::string (lhatext); return token::AND;
71 : Reader.error (*lhalloc, "& expected");}
72 6 : "|" {lhalval->name = new std::string (lhatext); return token::OR;
73 : Reader.error (*lhalloc, "& expected");}
74 9 : "!" {lhalval->name = new std::string (lhatext); return token::NOT;
75 : Reader.error (*lhalloc, "& expected");}
76 :
77 103 : "<=" {lhalval->name = new std::string (lhatext); return token::LEQ;
78 : Reader.error (*lhalloc, "<= expected");}
79 1 : ">=" {lhalval->name = new std::string (lhatext); return token::GEQ;
80 : Reader.error (*lhalloc, ">= expected");}
81 :
82 719 : "=" {lhalval->name = new std::string (lhatext); return token::EQ;
83 : Reader.error (*lhalloc, "= expected");}
84 8 : "<" {lhalval->name = new std::string (lhatext); return token::LL;
85 : Reader.error (*lhalloc, "< expected");}
86 19 : ">" {lhalval->name = new std::string (lhatext); return token::GG;
87 : Reader.error (*lhalloc, "> expected");}
88 :
89 :
90 2 : "/" {lhalval->name = new std::string (lhatext); return token::DIV;
91 : Reader.error (*lhalloc, "/ expected");}
92 102 : "*" {lhalval->name = new std::string (lhatext); return token::MUL;
93 : Reader.error (*lhalloc, "* expected");}
94 205 : "+" {lhalval->name = new std::string (lhatext); return token::PLUS;
95 : Reader.error (*lhalloc, "+ expected");}
96 0 : "-" {lhalval->name = new std::string (lhatext); return token::MINUS;
97 : Reader.error (*lhalloc, "- expected");}
98 0 : "^" {lhalval->name = new std::string (lhatext); return token::POWER;
99 : Reader.error (*lhalloc, "^ expected");}
100 :
101 0 : "LhaName" {lhalval->name = new std::string (lhatext); return token::LhaName;
102 : Reader.error (*lhalloc, "LhaName expected");}
103 :
104 :
105 :
106 50 : "const" {lhalval->name = new std::string (lhatext); return token::Const;
107 : Reader.error (*lhalloc, "const expected");}
108 :
109 0 : "hybrid" {lhalval->name = new std::string (lhatext); return token::Hybrid;
110 : Reader.error (*lhalloc, "hybrid expected");}
111 :
112 11 : "NbLocations" {lhalval->name = new std::string (lhatext); return token::NbLoc;
113 : Reader.error (*lhalloc, "NbLocations expected");}
114 :
115 11 : "NbVariables" {lhalval->name = new std::string (lhatext); return token::NbVar;
116 : Reader.error (*lhalloc, "NbVariables expected");}
117 :
118 27 : "VariablesList" {lhalval->name = new std::string (lhatext); return token::VList;
119 : Reader.error (*lhalloc, "VariablesList expected");}
120 :
121 27 : "LocationsList" {lhalval->name = new std::string (lhatext); return token::LList;
122 : Reader.error (*lhalloc, "LocationsList expected");}
123 :
124 27 : "InitialLocations" {lhalval->name = new std::string (lhatext); return token::Iloc;
125 : Reader.error (*lhalloc, "InitialLocations expected");}
126 :
127 27 : "FinalLocations" {lhalval->name = new std::string (lhatext); return token::Floc;
128 : Reader.error (*lhalloc, "FinalLocations expected");}
129 :
130 27 : "Locations" {lhalval->name = new std::string (lhatext); return token::locations;
131 : Reader.error (*lhalloc, "Locations expected");}
132 :
133 27 : "Edges" {lhalval->name = new std::string (lhatext); return token::edges;
134 : Reader.error (*lhalloc, "Edges expected");}
135 :
136 :
137 :
138 9 : "int" {lhalval->name = new std::string (lhatext); return token::INT;
139 : Reader.error (*lhalloc, "int expected");}
140 :
141 41 : "double" {lhalval->name = new std::string (lhatext); return token::DOUBLE;
142 : Reader.error (*lhalloc, "double expected");}
143 :
144 0 : "floor" {lhalval->name = new std::string (lhatext); return token::FLOOR;
145 : Reader.error (*lhalloc, "floor expected");}
146 :
147 :
148 0 : "min" {lhalval->name = new std::string (lhatext); return token::MIN;
149 : Reader.error (*lhalloc, "min expected");}
150 :
151 0 : "max" {lhalval->name = new std::string (lhatext); return token::MAX;
152 : Reader.error (*lhalloc, "max expected");}
153 :
154 0 : "mod" {lhalval->name = new std::string (lhatext); return token::MOD;
155 : Reader.error (*lhalloc, "mod expected");}
156 :
157 44 : "TRUE" {lhalval->name = new std::string (lhatext); return token::TRUE;
158 : Reader.error (*lhalloc, "TRUE expected");}
159 :
160 0 : "FALSE" {lhalval->name = new std::string (lhatext); return token::FALSE;
161 : Reader.error (*lhalloc, "FALSE expected");}
162 :
163 57 : "ALL" {lhalval->name = new std::string (lhatext); return token::ALL;
164 : Reader.error (*lhalloc, "ALL expected");}
165 :
166 196 : "Last" {lhalval->name = new std::string (lhatext); return token::LAST;
167 : Reader.error (*lhalloc, "Last expected");}
168 :
169 0 : "Min" {lhalval->name = new std::string (lhatext); return token::LhaMIN;
170 : Reader.error (*lhalloc, "Min expected");}
171 :
172 1 : "Max" {lhalval->name = new std::string (lhatext); return token::LhaMAX;
173 : Reader.error (*lhalloc, "Max expected");}
174 :
175 197 : "AVG" {lhalval->name = new std::string (lhatext); return token::AVG;
176 : Reader.error (*lhalloc, "AVG expected");}
177 :
178 0 : "VAR" {lhalval->name = new std::string (lhatext); return token::VAR;
179 : Reader.error (*lhalloc, "VAR expected");}
180 :
181 9 : "PROB" {lhalval->name = new std::string (lhatext); return token::PROB;
182 : Reader.error (*lhalloc, "PROB expected");}
183 :
184 0 : "EXISTS" {lhalval->name = new std::string (lhatext); return token::EXIST_TOK;
185 : Reader.error (*lhalloc, "EXISTS expected");}
186 :
187 0 : "NOTALLS" {lhalval->name = new std::string (lhatext); return token::NOTALL_TOK;
188 : Reader.error (*lhalloc, "NOTALLS expected");}
189 :
190 0 : "HYPOTHESIS" {lhalval->name = new std::string (lhatext); return token::SPRT;
191 : Reader.error (*lhalloc, "HYPOTHESIS expected");}
192 :
193 0 : "Integral" {lhalval->name = new std::string (lhatext); return token::INTEGRAL;
194 : Reader.error (*lhalloc, "Integral expected");}
195 :
196 0 : "Mean" {lhalval->name = new std::string (lhatext); return token::MEAN;
197 : Reader.error (*lhalloc, "Mean expected");}
198 :
199 0 : "PDF" {lhalval->name = new std::string (lhatext); return token::PDF;
200 : Reader.error (*lhalloc, "PDF expected");}
201 :
202 0 : "CDF" {lhalval->name = new std::string (lhatext); return token::CDF;
203 : Reader.error (*lhalloc, "CDF expected");}
204 :
205 16 : "DISC" {lhalval->name = new std::string (lhatext); return token::DISC;
206 : Reader.error (*lhalloc, "DISC expected");}
207 :
208 0 : "NOTDETERMINISTIC" {lhalval->name = new std::string (lhatext); return token::NOTDET;
209 : Reader.error (*lhalloc, "NOTDETERMINISTIC expected");}
210 :
211 :
212 : {INT} {
213 282 : errno = 0;
214 282 : int x=atoi(lhatext);
215 282 : lhalval->IntVal = x;
216 282 : return token::ival;
217 : }
218 :
219 : {REAL} {
220 13 : errno = 0;
221 13 : double x=atof(lhatext);
222 13 : lhalval->RealVal = x;
223 13 : return token::rval;
224 : }
225 :
226 :
227 2592 : {STR} {lhalval->name = new std::string (lhatext); return token::str;
228 : Reader.error (*lhalloc, "invalid character");}
229 :
230 10 : %%
231 10 :
232 :
233 :
234 :
235 : void
236 : Lha_Reader::scan_end ()
237 29 : {
238 : lhalex_destroy();
239 29 : }
240 29 :
241 :
242 : void Lha_Reader::scan_expression (const string& f){
243 29 : const char* ch=f.c_str();
244 29 : lhaset_debug(trace_scanning);
245 29 :
246 : // lha_BUFFER_STATE b=lha_scan_string(ch);
247 : // lha_switch_to_buffer(b);
248 : lha_scan_string(ch);
249 29 :
250 : }
251 134 : #endif // not __clang_analyzer__
|