Remove unused consumed_symbols vector from parse items
This commit is contained in:
parent
d957021982
commit
3f770ff3c3
12 changed files with 203 additions and 220 deletions
|
|
@ -29,22 +29,23 @@ describe("computing closures of item sets", []() {
|
|||
|
||||
it("computes the item set closure", [&]() {
|
||||
ParseItemSet item_set = item_set_closure(ParseItemSet({
|
||||
ParseItem(Symbol("E"), grammar.rule(Symbol("E")), {}, Symbol("__END__"))
|
||||
ParseItem(Symbol("E"), grammar.rule(Symbol("E")), 0, Symbol("__END__"))
|
||||
}), grammar);
|
||||
|
||||
AssertThat(item_set, Equals(ParseItemSet({
|
||||
ParseItem(Symbol("F"), grammar.rule(Symbol("F")), {}, Symbol("__END__")),
|
||||
ParseItem(Symbol("F"), grammar.rule(Symbol("F")), {}, Symbol("+")),
|
||||
ParseItem(Symbol("F"), grammar.rule(Symbol("F")), {}, Symbol("*")),
|
||||
ParseItem(Symbol("T"), grammar.rule(Symbol("T")), {}, Symbol("__END__")),
|
||||
ParseItem(Symbol("T"), grammar.rule(Symbol("T")), {}, Symbol("+")),
|
||||
ParseItem(Symbol("E"), grammar.rule(Symbol("E")), {}, Symbol("__END__")),
|
||||
ParseItem(Symbol("F"), grammar.rule(Symbol("F")), 0, Symbol("__END__")),
|
||||
ParseItem(Symbol("F"), grammar.rule(Symbol("F")), 0, Symbol("+")),
|
||||
ParseItem(Symbol("F"), grammar.rule(Symbol("F")), 0, Symbol("*")),
|
||||
ParseItem(Symbol("T"), grammar.rule(Symbol("T")), 0, Symbol("__END__")),
|
||||
ParseItem(Symbol("T"), grammar.rule(Symbol("T")), 0, Symbol("+")),
|
||||
ParseItem(Symbol("E"), grammar.rule(Symbol("E")), 0, Symbol("__END__")),
|
||||
})));
|
||||
|
||||
ParseItemSet next_item_set = sym_transitions(item_set, grammar)[Symbol("v")];
|
||||
AssertThat(next_item_set, Equals(ParseItemSet({
|
||||
ParseItem(Symbol("F"), rules::blank(), { false }, Symbol("__END__")),
|
||||
ParseItem(Symbol("F"), rules::blank(), { false }, Symbol("*")),
|
||||
ParseItem(Symbol("F"), rules::blank(), { false }, Symbol("+")),
|
||||
ParseItem(Symbol("F"), rules::blank(), 1, Symbol("__END__")),
|
||||
ParseItem(Symbol("F"), rules::blank(), 1, Symbol("*")),
|
||||
ParseItem(Symbol("F"), rules::blank(), 1, Symbol("+")),
|
||||
})));
|
||||
});
|
||||
});
|
||||
|
|
|
|||
|
|
@ -3,6 +3,8 @@
|
|||
|
||||
#include <iostream>
|
||||
#include <set>
|
||||
#include <unordered_map>
|
||||
#include <unordered_set>
|
||||
#include <vector>
|
||||
|
||||
using std::cout;
|
||||
|
|
@ -33,6 +35,18 @@ namespace std {
|
|||
return stream << ">";
|
||||
}
|
||||
|
||||
template<typename T>
|
||||
inline std::ostream& operator<<(std::ostream &stream, const std::unordered_set<T> &set) {
|
||||
stream << std::string("#<set: ");
|
||||
bool started = false;
|
||||
for (auto item : set) {
|
||||
if (started) stream << std::string(", ");
|
||||
stream << item;
|
||||
started = true;
|
||||
}
|
||||
return stream << ">";
|
||||
}
|
||||
|
||||
template<typename TKey, typename TValue>
|
||||
inline std::ostream& operator<<(std::ostream &stream, const std::map<TKey, TValue> &map) {
|
||||
stream << std::string("#<map: ");
|
||||
|
|
@ -46,6 +60,20 @@ namespace std {
|
|||
}
|
||||
return stream << ">";
|
||||
}
|
||||
|
||||
template<typename TKey, typename TValue>
|
||||
inline std::ostream& operator<<(std::ostream &stream, const std::unordered_map<TKey, TValue> &map) {
|
||||
stream << std::string("#<map: ");
|
||||
bool started = false;
|
||||
for (auto pair : map) {
|
||||
if (started) stream << std::string(", ");
|
||||
stream << pair.first;
|
||||
stream << std::string(" => ");
|
||||
stream << pair.second;
|
||||
started = true;
|
||||
}
|
||||
return stream << ">";
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue