Advertisement
Guest User

Untitled

a guest
Jan 22nd, 2017
66
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.17 KB | None | 0 0
  1.         Config config;
  2.         config.grammar.start = "re";
  3.         config.grammar.variables = {"re"};
  4.         std::ifstream infile("regexLexer.lxs");
  5.         config.grammar.terminals = lxs::input::InputParser::getTokens(infile);
  6.         // config.grammar.terminals = {"CHAR"};
  7.         config.parserType = "SLR(1)";
  8.         config.lexesisFile = "regexLexer.lxs";
  9.  
  10.         //RULES
  11.         config.grammar.rules.push_back(std::make_shared<Rule>(Rule("re", {"re", "PIPE", "re"}, "or", std::make_pair(true, std::make_pair(5,PrecedenceType::LEFT)))));
  12.         config.grammar.rules.push_back(std::make_shared<Rule>(Rule("re", {"LPAREN", "re", "RPAREN"}, "paren", std::make_pair(true, std::make_pair(4,PrecedenceType::LEFT)))));
  13.         config.grammar.rules.push_back(std::make_shared<Rule>(Rule("re", {"re", "STAR"}, "star", std::make_pair(true, std::make_pair(1,PrecedenceType::LEFT)))));
  14.         config.grammar.rules.push_back(std::make_shared<Rule>(Rule("re", {"re", "PLUS"}, "plus", std::make_pair(true, std::make_pair(1,PrecedenceType::LEFT)))));
  15.         config.grammar.rules.push_back(std::make_shared<Rule>(Rule("re", {"re", "QUESTIONMARK"}, "optional", std::make_pair(true, std::make_pair(1,PrecedenceType::LEFT)))));
  16.         config.grammar.rules.push_back(std::make_shared<Rule>(Rule("re", {"re", "re"}, "concat", std::make_pair(true, std::make_pair(2,PrecedenceType::LEFT)))));
  17.  
  18.         for(auto term: config.grammar.terminals) {
  19.             if(term == "STAR" || term == "PLUS" || term == "QUESTIONMARK" || term == "PIPE" || term == "LPAREN" || term == "RPAREN")
  20.                 continue;
  21.             config.grammar.rules.push_back(std::make_shared<Rule>(Rule("re", {term}, "char", std::make_pair(true, std::make_pair(2,PrecedenceType::LEFT)))));
  22.         }
  23.         config.grammar.precedence["QUESTIONMARK"] = std::make_pair(1,PrecedenceType::LEFT);
  24.         config.grammar.precedence["PLUS"] = std::make_pair(1,PrecedenceType::LEFT);
  25.         config.grammar.precedence["STAR"] = std::make_pair(1,PrecedenceType::LEFT);
  26.         config.grammar.precedence["PIPE"] = std::make_pair(5,PrecedenceType::LEFT);
  27.         config.grammar.precedence["LPAREN"] = std::make_pair(2,PrecedenceType::LEFT);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement