@@ -9,6 +9,7 @@ Author: Daniel Kroening, dkr@amazon.com
99#include " hoa.h"
1010
1111#include < util/arith_tools.h>
12+ #include < util/string2int.h>
1213
1314#include < ebmc/ebmc_error.h>
1415
@@ -167,9 +168,9 @@ hoa_tokenizert::tokent hoa_tokenizert::get_token(std::istream &in)
167168 }
168169}
169170
170- mp_integer hoat::max_state_number () const
171+ hoat::intt hoat::max_state_number () const
171172{
172- mp_integer max = 0 ;
173+ intt max = 0 ;
173174
174175 for (auto &state : body)
175176 max = std::max (max, state.first .number );
@@ -208,6 +209,7 @@ class hoa_parsert
208209 labelt parse_label_expr_and ();
209210 labelt parse_label_expr_primary ();
210211 acc_sigt parse_acc_sig ();
212+ hoat::intt parse_int ();
211213};
212214
213215hoat hoat::from_string (const std::string &src)
@@ -222,6 +224,15 @@ hoat hoat::from_string(const std::string &src)
222224 return hoat{header, body};
223225}
224226
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+
225236hoat::headert hoa_parsert::parse_header ()
226237{
227238 std::string headername;
@@ -284,8 +295,7 @@ hoat::state_namet hoa_parsert::parse_state_name()
284295 state_name.label = parse_label ();
285296
286297 // INT
287- auto number = tokenizer.consume ().text ;
288- state_name.number = string2integer (number);
298+ state_name.number = parse_int ();
289299
290300 // STRING?
291301 if (tokenizer.peek ().is_string ())
@@ -324,11 +334,11 @@ hoat::edget hoa_parsert::parse_edge()
324334 edge.label = parse_label ();
325335
326336 // state-conj: INT | state-conj "&" INT
327- edge.dest_states .push_back (string2integer (tokenizer. consume (). text ));
337+ edge.dest_states .push_back (parse_int ( ));
328338 while (tokenizer.peek ().text == " &" )
329339 {
330340 tokenizer.consume ();
331- edge.dest_states .push_back (string2integer (tokenizer. consume (). text ));
341+ edge.dest_states .push_back (parse_int ( ));
332342 }
333343
334344 // acc-sig?
0 commit comments