forked from diffblue/cbmc
-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathxml_parser.cpp
60 lines (44 loc) · 1.17 KB
/
xml_parser.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
/*******************************************************************\
Module:
Author: Daniel Kroening, [email protected]
\*******************************************************************/
#include "xml_parser.h"
#include <fstream>
int xml_parsert::instance_count = 0;
int yyxmllex_init_extra(xml_parsert *, void **);
int yyxmllex_destroy(void *);
int yyxmlparse(xml_parsert &, void *);
bool xml_parsert::parse()
{
void *scanner;
yyxmllex_init_extra(this, &scanner);
bool parse_fail = yyxmlparse(*this, scanner) != 0;
yyxmllex_destroy(scanner);
return parse_fail;
}
// 'do it all' function
bool parse_xml(
std::istream &in,
const std::string &filename,
message_handlert &message_handler,
xmlt &dest)
{
xml_parsert xml_parser{message_handler};
xml_parser.set_file(filename);
xml_parser.in=∈
bool result = xml_parser.parse();
// save result
xml_parser.parse_tree.element.swap(dest);
return result;
}
// 'do it all' function
bool parse_xml(
const std::string &filename,
message_handlert &message_handler,
xmlt &dest)
{
std::ifstream in(filename);
if(!in)
return true;
return parse_xml(in, filename, message_handler, dest);
}