Make ParseItemSet & LexItemSet classes

This commit is contained in:
Max Brunsfeld 2015-10-05 15:13:43 -07:00
parent f01972c64e
commit ef2acf9496
11 changed files with 88 additions and 44 deletions

View file

@ -48,7 +48,7 @@ describe("lex_item_set_transitions", [&]() {
LexItem(Symbol(2), CharacterSet().include('e', 'x').copy())
});
AssertThat(lex_item_set_transitions(set1), Equals(map<CharacterSet, LexItemSet>({
AssertThat(set1.transitions(), Equals(map<CharacterSet, LexItemSet>({
{
CharacterSet().include('a', 'd'),
LexItemSet({

View file

@ -47,7 +47,7 @@ describe("parse_item_set_transitions(ParseItemSet, SyntaxGrammar)", [&]() {
}
});
AssertThat(parse_item_set_transitions(set1, grammar), Equals(map<Symbol, ParseItemSet>({
AssertThat(set1.transitions(grammar), Equals(map<Symbol, ParseItemSet>({
{
Symbol(1),
ParseItemSet({

View file

@ -111,11 +111,15 @@ ostream &operator<<(ostream &stream, const ProductionStep &step) {
namespace build_tables {
ostream &operator<<(ostream &stream, const build_tables::LexItem &item) {
ostream &operator<<(ostream &stream, const LexItem &item) {
return stream << string("(item ") << item.lhs << string(" ") << *item.rule
<< string(")");
}
ostream &operator<<(ostream &stream, const LexItemSet &item_set) {
return stream << item_set.entries;
}
ostream &operator<<(ostream &stream, const ParseItem &item) {
return stream << string("(item variable:") << to_string(item.variable_index)
<< string(" production:") << to_string(item.production_index)
@ -124,6 +128,10 @@ ostream &operator<<(ostream &stream, const ParseItem &item) {
<< string(")");
}
std::ostream &operator<<(std::ostream &stream, const ParseItemSet &item_set) {
return stream << item_set.entries;
}
std::ostream &operator<<(std::ostream &stream, const MetadataRange &range) {
return stream << string("{") << to_string(range.min) << string(", ")
<< to_string(range.max) << string("}");

View file

@ -111,12 +111,16 @@ namespace build_tables {
struct MetadataRange;
class LexItem;
class LexItemSet;
class ParseItem;
class ParseItemSet;
class LookaheadSet;
ostream &operator<<(ostream &, const MetadataRange &);
ostream &operator<<(ostream &, const LexItem &);
ostream &operator<<(ostream &, const LexItemSet &);
ostream &operator<<(ostream &, const ParseItem &);
ostream &operator<<(ostream &, const ParseItemSet &);
ostream &operator<<(ostream &, const LookaheadSet &);
} // namespace build_tables