#include "molasses/lexer.h" #include "molasses/parser_primitives.h" #include int main() { /* molasses::lexed_output initial; initial.dictionary[1] = "+"; { auto v = molasses::lex("hello hello potato 128 hello 128 +"); auto v2 = molasses::lex("salad hello potato 129 hello 128"); for (auto symbol: v.symbols) { std::cout << "v: " << symbol << " - " << v.dictionary.at(symbol) << "\n"; } std::cout << "\n"; for (auto symbol: v2.symbols) { std::cout << "v2: " << symbol << " - " << v2.dictionary.at(symbol) << "\n"; } auto v_merged = molasses::concatenate(initial, molasses::concatenate(v, v2)); std::cout << "\n"; for (auto symbol: v_merged.symbols) { std::cout << "v_merged: " << symbol << " - " << v_merged.dictionary.at(symbol) << "\n"; } } auto v = molasses::lex("1 2 +"); molasses::parser_context ctx; ctx = molasses::register_integers(ctx); ctx.operations.emplace_back(std::make_shared(std::string{"+"}, std::vector({"i32", "i32"}), std::vector({"i32"}))); if(molasses::type_check(ctx, v, v.symbols, {}, {"i32"})) { std::cout << "Checks out\n"; }*/ /* auto lexed = molasses::lex("__PROC__ sum\n" "i32 i32\n" "__--__\n" "i32\n" "__DO__\n" "+\n" "__END__");*/ auto lexed = molasses::lex("__PROC__ main\n" "__--__\n" "__DO__\n" "__END__"); molasses::parser_context ctx; ctx = molasses::register_integers(ctx); ctx = molasses::register_i32_operations(ctx); molasses::parse(ctx, lexed); }