Skip to content

Commit 92e7cf5

Browse files
committed
SMV: move parse tree output into a method
This makes the code for outputting a parse tree a method of the parse tree class.
1 parent 6450994 commit 92e7cf5

File tree

3 files changed

+64
-51
lines changed

3 files changed

+64
-51
lines changed

src/smvlang/smv_language.cpp

Lines changed: 1 addition & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -129,57 +129,7 @@ Function: smv_languaget::show_parse
129129

130130
void smv_languaget::show_parse(std::ostream &out, message_handlert &)
131131
{
132-
for(smv_parse_treet::modulest::const_iterator
133-
it=smv_parse_tree.modules.begin();
134-
it!=smv_parse_tree.modules.end(); it++)
135-
{
136-
const smv_parse_treet::modulet &module=it->second;
137-
out << "Module: " << module.name << std::endl << std::endl;
138-
139-
out << " PARAMETERS:\n";
140-
141-
for(auto &parameter : module.parameters)
142-
out << " " << parameter << '\n';
143-
144-
out << '\n';
145-
146-
out << " VARIABLES:" << std::endl;
147-
148-
for(auto &element : module.elements)
149-
if(element.is_var() && element.expr.type().id() != ID_smv_submodule)
150-
{
151-
symbol_tablet symbol_table;
152-
namespacet ns{symbol_table};
153-
auto identifier = to_smv_identifier_expr(element.expr).identifier();
154-
auto msg = type2smv(element.expr.type(), ns);
155-
out << " " << identifier << ": " << msg << ";\n";
156-
}
157-
158-
out << std::endl;
159-
160-
out << " SUBMODULES:" << std::endl;
161-
162-
for(auto &element : module.elements)
163-
if(element.is_var() && element.expr.type().id() == ID_smv_submodule)
164-
{
165-
symbol_tablet symbol_table;
166-
namespacet ns(symbol_table);
167-
auto identifier = to_smv_identifier_expr(element.expr).identifier();
168-
auto msg = type2smv(element.expr.type(), ns);
169-
out << " " << identifier << ": " << msg << ";\n";
170-
}
171-
172-
out << std::endl;
173-
174-
out << " ITEMS:" << std::endl;
175-
176-
for(auto &element : module.elements)
177-
{
178-
out << " TYPE: " << to_string(element.element_type) << '\n';
179-
out << " EXPR: " << element.expr.pretty() << '\n';
180-
out << std::endl;
181-
}
182-
}
132+
smv_parse_tree.show(out);
183133
}
184134

185135
/*******************************************************************\

src/smvlang/smv_parse_tree.cpp

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,12 @@ Author: Daniel Kroening, kroening@kroening.com
88

99
#include "smv_parse_tree.h"
1010

11+
#include <util/namespace.h>
12+
#include <util/symbol_table.h>
13+
14+
#include "expr2smv.h"
15+
#include "smv_expr.h"
16+
1117
/*******************************************************************\
1218
1319
Function: smv_parse_treet::swap
@@ -90,3 +96,57 @@ std::string to_string(smv_parse_treet::modulet::elementt::element_typet i)
9096

9197
return "";
9298
}
99+
100+
void smv_parse_treet::show(std::ostream &out) const
101+
{
102+
for(auto &module_it : modules)
103+
{
104+
auto &module = module_it.second;
105+
106+
out << "Module: " << module.name << std::endl << std::endl;
107+
108+
out << " PARAMETERS:\n";
109+
110+
for(auto &parameter : module.parameters)
111+
out << " " << parameter << '\n';
112+
113+
out << '\n';
114+
115+
out << " VARIABLES:" << std::endl;
116+
117+
for(auto &element : module.elements)
118+
if(element.is_var() && element.expr.type().id() != ID_smv_submodule)
119+
{
120+
symbol_tablet symbol_table;
121+
namespacet ns{symbol_table};
122+
auto identifier = to_smv_identifier_expr(element.expr).identifier();
123+
auto msg = type2smv(element.expr.type(), ns);
124+
out << " " << identifier << ": " << msg << ";\n";
125+
}
126+
127+
out << std::endl;
128+
129+
out << " SUBMODULES:" << std::endl;
130+
131+
for(auto &element : module.elements)
132+
if(element.is_var() && element.expr.type().id() == ID_smv_submodule)
133+
{
134+
symbol_tablet symbol_table;
135+
namespacet ns(symbol_table);
136+
auto identifier = to_smv_identifier_expr(element.expr).identifier();
137+
auto msg = type2smv(element.expr.type(), ns);
138+
out << " " << identifier << ": " << msg << ";\n";
139+
}
140+
141+
out << std::endl;
142+
143+
out << " ITEMS:" << std::endl;
144+
145+
for(auto &element : module.elements)
146+
{
147+
out << " TYPE: " << to_string(element.element_type) << '\n';
148+
out << " EXPR: " << element.expr.pretty() << '\n';
149+
out << std::endl;
150+
}
151+
}
152+
}

src/smvlang/smv_parse_tree.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ Author: Daniel Kroening, kroening@kroening.com
1212
#include <util/std_expr.h>
1313
#include <util/string_hash.h>
1414

15+
#include <iosfwd>
1516
#include <unordered_map>
1617
#include <unordered_set>
1718

@@ -293,6 +294,8 @@ class smv_parse_treet
293294

294295
void swap(smv_parse_treet &smv_parse_tree);
295296
void clear();
297+
298+
void show(std::ostream &) const;
296299
};
297300

298301
#endif

0 commit comments

Comments
 (0)