From 71b04e69a8a7c11e154bf19ea4e3598107dbc9ed Mon Sep 17 00:00:00 2001 From: Martin Zak <zakmart1@fit.cvut.cz> Date: Mon, 11 Nov 2013 19:39:57 +0100 Subject: [PATCH] Adds formatting into GrammarPrinter --- alib/src/grammar/GrammarPrinter.cpp | 58 +++++++++++++++-------------- alib/src/grammar/GrammarPrinter.h | 15 ++++---- 2 files changed, 38 insertions(+), 35 deletions(-) diff --git a/alib/src/grammar/GrammarPrinter.cpp b/alib/src/grammar/GrammarPrinter.cpp index 10122134fd..fea3634a9a 100644 --- a/alib/src/grammar/GrammarPrinter.cpp +++ b/alib/src/grammar/GrammarPrinter.cpp @@ -9,58 +9,60 @@ namespace grammar { +const string GrammarPrinter::INDENTATION = "\t"; + void GrammarPrinter::toXML(const Grammar& grammar, ostream& out) { out << "<grammar>\n"; - printNonTerminals(grammar, out); - printTerminals(grammar, out); - printRules(grammar, out); - printStartSymbol(grammar, out); + printNonTerminalSymbols(grammar, out, INDENTATION); + printTerminalSymbols(grammar, out, INDENTATION); + printRules(grammar, out, INDENTATION); + printStartSymbol(grammar, out, INDENTATION); out << "</grammar>\n"; } -void GrammarPrinter::printNonTerminals(const Grammar& grammar, ostream& out) { - out << "<nonTerminalSymbols>\n"; +void GrammarPrinter::printNonTerminalSymbols(const Grammar& grammar, ostream& out, string prefix) { + out << prefix << "<nonTerminalSymbols>\n"; for (auto &symbol : grammar.getNonTerminalSymbols()) { - symbol.toXML(out, ""); + symbol.toXML(out, prefix + INDENTATION); } - out << "</nonTerminalSymbols>\n"; + out << prefix << "</nonTerminalSymbols>\n"; } -void GrammarPrinter::printTerminals(const Grammar& grammar, ostream& out) { - out << "<terminalSymbols>\n"; +void GrammarPrinter::printTerminalSymbols(const Grammar& grammar, ostream& out, string prefix) { + out << prefix << "<terminalSymbols>\n"; for (auto& symbol : grammar.getTerminalSymbols()) { - symbol.toXML(out, ""); + symbol.toXML(out, prefix + INDENTATION); } - out << "</terminalSymbols>\n"; + out << prefix <<"</terminalSymbols>\n"; } -void GrammarPrinter::printRules(const Grammar& grammar, ostream& out) { - out << "<rules>\n"; +void GrammarPrinter::printRules(const Grammar& grammar, ostream& out, string prefix) { + out << prefix << "<rules>\n"; for (auto& rule : grammar.getRules()) { - printRule(rule, out); + printRule(rule, out, prefix + INDENTATION); } - out << "</rules>\n"; + out << prefix << "</rules>\n"; } -void GrammarPrinter::printRule(const Rule& rule, ostream& out) { - out << "<rule>\n"; - out << "<leftSide>\n"; +void GrammarPrinter::printRule(const Rule& rule, ostream& out, string prefix) { + out << prefix << "<rule>\n"; + out << prefix << INDENTATION << "<leftSide>\n"; for (auto& symbol : rule.getLeftSide()) { - symbol.toXML(out, ""); + symbol.toXML(out, prefix + INDENTATION + INDENTATION); } - out << "</leftSide>\n"; - out << "<rightSide>\n"; + out << prefix << INDENTATION << "</leftSide>\n"; + out << prefix << INDENTATION << "<rightSide>\n"; for (auto& symbol : rule.getRightSide()) { - symbol.toXML(out, ""); + symbol.toXML(out, prefix + INDENTATION + INDENTATION); } - out << "</rightSide>\n"; - out << "</rule>\n"; + out << prefix << INDENTATION << "</rightSide>\n"; + out << prefix << "</rule>\n"; } -void GrammarPrinter::printStartSymbol(const Grammar& grammar, ostream& out) { - out << "<startSymbol>"; +void GrammarPrinter::printStartSymbol(const Grammar& grammar, ostream& out, string prefix) { + out << prefix << "<startSymbol>"; out << grammar.getStartSymbol().getSymbol(); - out << "</startSymbol>\n"; + out <<"</startSymbol>\n"; } } /* namespace grammar */ diff --git a/alib/src/grammar/GrammarPrinter.h b/alib/src/grammar/GrammarPrinter.h index 28a15c0bea..c3ad03b67b 100644 --- a/alib/src/grammar/GrammarPrinter.h +++ b/alib/src/grammar/GrammarPrinter.h @@ -16,15 +16,16 @@ namespace grammar { using namespace std; class GrammarPrinter { -public: - static void toXML(const Grammar& grammar, ostream& out); protected: - static void printNonTerminals(const Grammar& grammar, ostream& out); - static void printTerminals(const Grammar& grammar, ostream& out); - static void printRules(const Grammar& grammar, ostream& out); - static void printRule(const Rule& rule, ostream& out); - static void printStartSymbol(const Grammar& grammar, ostream& out); + static const string INDENTATION; + static void printNonTerminalSymbols(const Grammar& grammar, ostream& out, string prefix); + static void printTerminalSymbols(const Grammar& grammar, ostream& out, string prefix); + static void printRules(const Grammar& grammar, ostream& out, string prefix); + static void printRule(const Rule& rule, ostream& out, string prefix); + static void printStartSymbol(const Grammar& grammar, ostream& out, string prefix); +public: + static void toXML(const Grammar& grammar, ostream& out); }; } /* namespace grammar */ -- GitLab