llvm-journey

LLVM Journey
git clone git://0xff.ir/g/llvm-journey.git
Log | Files | Refs | README | LICENSE

kaleidoscope_lexer.ex.cpp (1019B)


      1 
      2 #include <iostream>
      3 #include <string>
      4 
      5 #include "kaleidoscope_lexer.hpp"
      6 
      7 int
      8 main()
      9 {
     10   std::string source{
     11     R"(
     12 extern sin(arg); # C standard library function
     13 
     14 sin(3.14159265/2)
     15 )"
     16   };
     17   auto sBegin = source.cbegin();
     18   auto sEnd = source.cend();
     19 
     20   kal::lex(sBegin,
     21            sEnd,
     22            [&](kal::TkType type, const auto& tkBegin, const auto& tkEnd) {
     23              auto b = std::distance(sBegin, tkBegin);
     24              auto e = std::distance(sBegin, tkEnd);
     25 
     26              // clang-format off
     27 
     28       std::cout << "Token{"
     29                 << "\n  /*type*/  kal::TkType::"
     30                 << kal::TKTYPE_STR[static_cast<int>(type)]
     31                 << ",\n  /*begin*/ " << b
     32                 << ",\n  /*end*/   " << e
     33                 << ",\n  /*str*/   \"" << source.substr(b, e - b) << '"';
     34 
     35              // clang-format on
     36 
     37              if (type == kal::TkType::Num)
     38                std::cout << ",\n  /*num*/   " << source.substr(b, e - b);
     39 
     40              std::cout << ",\n}\n";
     41            });
     42 
     43   return 0;
     44 }