1 // =================================
 2 // Copyright (c) 2020 Seppo Laakko
 3 // Distributed under the MIT license
 4 // =================================
 5 
 6 #ifndef SNG2HTML_SNG2HTML_GRAMMAR_HTML_GENERATOR_INCLUDED
 7 #define SNG2HTML_SNG2HTML_GRAMMAR_HTML_GENERATOR_INCLUDED
 8 #include <sng2html/sng2html/Visitor.hpp>
 9 #include <sng2html/sng2html/Grammar.hpp>
10 #include <sng2html/sng2html/LexerFile.hpp>
11 #include <sngxml/dom/Element.hpp>
12 #include <unordered_map>
13 
14 namespace sng2html { namespace sng2html {
15 
16 class GrammarHtmlGeneratorVisitor public Visitor
17 {
18 public:
19     GrammarHtmlGeneratorVisitor(bool verbose_std::std::unordered_map<GrammarParser*Grammar*>&parserGrammarMap_std::std::unordered_map<RuleParser*Rule*>&parserRuleMap_
20         std::std::unordered_map<LexerFile*Grammar*>&lexerGrammarMap_std::std::unordered_map<Expression*Rule*>&lexerRuleMap_
21         std::std::unordered_map<std::u32stringLexerFile*>&lexerMap_conststd::u32string&styleFilePath_);
22     void Visit(Char& symbol) override;
23     void Visit(Any& symbol) override;
24     void Visit(Range& symbol) override;
25     void Visit(Class& symbol) override;
26     void Visit(Alt& alt) override;
27     void Visit(Cat& cat) override;
28     void Visit(Kleene& kleene) override;
29     void Visit(Pos& pos) override;
30     void Visit(Opt& opt) override;
31     void Visit(ParenExpr& parenExpr) override;
32     void Visit(SymbolExpr& symbolExpr) override;
33     void Visit(RefExpr& refExpr) override;
34     void Visit(EmptyParser& parser) override;
35     void Visit(TokenParser& parser) override;
36     void Visit(CharParser& parser) override;
37     void Visit(StringParser& parser) override;
38     void Visit(CharSetParser& parser) override;
39     void Visit(OptionalParser& parser) override;
40     void Visit(KleeneParser& parser) override;
41     void Visit(PositiveParser& parser) override;
42     void Visit(ExpectationParser& parser) override;
43     void Visit(GroupingParser& parser) override;
44     void Visit(SequenceParser& parser) override;
45     void Visit(AlternativeParser& parser) override;
46     void Visit(DifferenceParser& parser) override;
47     void Visit(ListParser& parser) override;
48     void Visit(ActionParser& parser) override;
49     void Visit(NonterminalParser& parser) override;
50     void Visit(RuleParser& parser) override;
51     void Visit(GrammarParser& parser) override;
52     void Visit(ParserFile& parserFile) override;
53     void Visit(Domain& domain) override;
54     void Visit(LexerFile& lexerFile) override;
55     Grammar* GetGrammar(GrammarParser* parser) const;
56     Rule* GetRule(RuleParser* parser) const;
57 private:
58     bool verbose;
59     std::std::unordered_map<GrammarParser*Grammar*>&parserGrammarMap;
60     std::std::unordered_map<RuleParser*Rule*>&parserRuleMap;
61     std::std::unordered_map<LexerFile*Grammar*>&lexerGrammarMap;
62     std::std::unordered_map<Expression*Rule*>&lexerRuleMap;
63     std::std::unordered_map<std::u32stringLexerFile*>&lexerMap;
64     LexerFile* lexerFile;
65     std::u32string styleFilePath;
66     sngxml::dom::Element* ruleTable;
67     sngxml::dom::Element* ruleBodyElement;
68     GrammarParser* currentGrammar;
69 };
70 
71 } } // namespace sng2html::sng2html
72 
73 #endif // SNG2HTML_SNG2HTML_GRAMMAR_HTML_GENERATOR_INCLUDED