@@ -9,6 +9,7 @@ Author: Daniel Kroening, dkr@amazon.com
9
9
#include " hoa.h"
10
10
11
11
#include < util/arith_tools.h>
12
+ #include < util/string2int.h>
12
13
13
14
#include < ebmc/ebmc_error.h>
14
15
@@ -167,9 +168,9 @@ hoa_tokenizert::tokent hoa_tokenizert::get_token(std::istream &in)
167
168
}
168
169
}
169
170
170
- mp_integer hoat::max_state_number () const
171
+ hoat::intt hoat::max_state_number () const
171
172
{
172
- mp_integer max = 0 ;
173
+ intt max = 0 ;
173
174
174
175
for (auto &state : body)
175
176
max = std::max (max, state.first .number );
@@ -208,6 +209,7 @@ class hoa_parsert
208
209
labelt parse_label_expr_and ();
209
210
labelt parse_label_expr_primary ();
210
211
acc_sigt parse_acc_sig ();
212
+ hoat::intt parse_int ();
211
213
};
212
214
213
215
hoat hoat::from_string (const std::string &src)
@@ -222,6 +224,15 @@ hoat hoat::from_string(const std::string &src)
222
224
return hoat{header, body};
223
225
}
224
226
227
+ hoat::intt hoa_parsert::parse_int ()
228
+ {
229
+ auto text = tokenizer.consume ().text ;
230
+ auto int_opt = string2optional<hoat::intt>(text);
231
+ if (!int_opt.has_value ())
232
+ throw ebmc_errort () << " HOA-parser failed to parse INT" ;
233
+ return int_opt.value ();
234
+ }
235
+
225
236
hoat::headert hoa_parsert::parse_header ()
226
237
{
227
238
std::string headername;
@@ -284,8 +295,7 @@ hoat::state_namet hoa_parsert::parse_state_name()
284
295
state_name.label = parse_label ();
285
296
286
297
// INT
287
- auto number = tokenizer.consume ().text ;
288
- state_name.number = string2integer (number);
298
+ state_name.number = parse_int ();
289
299
290
300
// STRING?
291
301
if (tokenizer.peek ().is_string ())
@@ -324,11 +334,11 @@ hoat::edget hoa_parsert::parse_edge()
324
334
edge.label = parse_label ();
325
335
326
336
// state-conj: INT | state-conj "&" INT
327
- edge.dest_states .push_back (string2integer (tokenizer. consume (). text ));
337
+ edge.dest_states .push_back (parse_int ( ));
328
338
while (tokenizer.peek ().text == " &" )
329
339
{
330
340
tokenizer.consume ();
331
- edge.dest_states .push_back (string2integer (tokenizer. consume (). text ));
341
+ edge.dest_states .push_back (parse_int ( ));
332
342
}
333
343
334
344
// acc-sig?
0 commit comments