-
Notifications
You must be signed in to change notification settings - Fork 0
/
leftmost_derivation.cpp
39 lines (32 loc) · 1.26 KB
/
leftmost_derivation.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
#include "leftmost_derivation.h"
#include <iomanip>
leftmost_derivation::leftmost_derivation(std::vector<sentential_expression> _expressions,
std::vector<error> _errors) {
expressions = _expressions;
errors = _errors;
}
std::vector<sentential_expression> leftmost_derivation::get_expressions() {
return expressions;
}
std::vector<error> leftmost_derivation::get_errors() {
return errors;
}
std::ostream &operator<<(std::ostream &stream, const leftmost_derivation &derivation) {
int max_sentential = -1;
int max_production = -1;
for (const sentential_expression &expr : derivation.expressions) {
max_production = std::max(max_production, (int) expr.get_production().length());
max_sentential = std::max(max_sentential, (int) expr.get_symbols_str().length());
}
for (const sentential_expression &expr : derivation.expressions) {
stream << std::setw(max_sentential + 4) << std::left << expr.get_symbols_str()
<< expr.get_production() << std::endl;
}
if (!derivation.errors.empty()) {
stream << "\n" << "Errors: \n";
for (const error & err : derivation.errors) {
stream << err << std::endl;
}
}
return stream;
}