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 }