Advertisement
Guest User

circle lexertl working

a guest
Jan 26th, 2020
462
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.49 KB | None | 0 0
  1. #include "../lexertl14/include/lexertl/generator.hpp"
  2. #include "../lexertl14/include/lexertl/iterator.hpp"
  3. #include "../lexertl14/include/lexertl/lookup.hpp"
  4. #include <ostream>
  5. #include "../lexertl14/include/lexertl/match_results.hpp"
  6. #include <string>
  7.  
  8. void lex()
  9. {
  10.     @meta lexertl::rules rules;
  11.     @meta lexertl::state_machine temp_sm;
  12.  
  13.     @meta rules.push("[a-z]+", 1);
  14.     @meta rules.push("[0-9]+", 2);
  15.     @meta rules.push(".", rules.skip());
  16.     @meta lexertl::generator::build(rules, temp_sm);
  17.  
  18.     @meta std::vector<uint16_t> &lookup = temp_sm._internals._lookup[0];
  19.     @meta std::vector<uint16_t> &dfa_alphabet = temp_sm._internals._dfa_alphabet;
  20.     @meta std::vector<uint16_t> &dfa = temp_sm._internals._dfa[0];
  21.     lexertl::state_machine sm;
  22.  
  23.     sm._internals._eoi = temp_sm._internals._eoi;
  24.     sm._internals._lookup.emplace_back(std::vector<uint16_t>());
  25.     sm._internals._lookup[0] = {@pack_nontype(lookup)...};
  26.     sm._internals._dfa_alphabet = {@pack_nontype(dfa_alphabet)...};
  27.     sm._internals._features = temp_sm._internals._features;
  28.     sm._internals._dfa.emplace_back(std::vector<uint16_t>());
  29.     sm._internals._dfa[0] = {@pack_nontype(dfa)...};
  30.  
  31.     std::string input = "123 abc 456 def";
  32.     lexertl::citerator iter(input.c_str(), input.c_str() + input.size(), sm);
  33.     lexertl::citerator end;
  34.  
  35.     for (; iter != end; ++iter)
  36.     {
  37.         std::cout << iter->id << ": " << iter->str() << '\n';
  38.     }
  39. }
  40.  
  41. int main(int argc, char** argv)
  42. {
  43.     lex();
  44. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement