aboutsummaryrefslogtreecommitdiff
path: root/module-test
diff options
context:
space:
mode:
author_ov4 <ov4@ov4.org>2026-09-05 16:42:34 +0000
committer_ov4 <ov4@ov4.org>2026-09-05 16:42:34 +0000
commit1d6f877864f3c1e8c04a2be8cb007fc598360642 (patch)
treeaddd479c4ceb1be6f3b034f2593ea51f5dbe2b4e /module-test
parente4818de45bea799629b288c30514a52fc22abfb2 (diff)
fix typo
Diffstat (limited to 'module-test')
-rw-r--r--module-test/ast.cc93
1 files changed, 93 insertions, 0 deletions
diff --git a/module-test/ast.cc b/module-test/ast.cc
new file mode 100644
index 0000000..f9dcbb8
--- /dev/null
+++ b/module-test/ast.cc
@@ -0,0 +1,93 @@
+// TEST FILE
+// ONLY FOR DEMONSTRATION
+// will be removed as soon as lexer is completed
+
+
+#include <iostream>
+#include <string>
+#include <type_traits>
+#include <unistd.h>
+#include <cstring>
+#include <vector>
+#include <print>
+
+#include "magic_enum/magic_enum.hpp"
+
+#include "lexer/shared.h"
+#include "lexer/ast.h"
+#include "lexer/enum_type.h"
+#include "lexer/token.h"
+
+using namespace std;
+using namespace ov4;
+
+constexpr int MAXLINE = 1024;
+
+
+
+
+int main()
+{
+ int test_case = 5;
+ string s;
+
+ switch (test_case)
+ {
+ case 0:
+ s = "hello | hi || foo && bar || baz &";
+ break;
+ case 1:
+ s = "hi";
+ break;
+ case 2:
+ s = "&&";
+ break;
+ case 3:
+ s = "hi (hello || foo)";
+ break;
+ case 4:
+ s = "alpha || beta (gamma argument && (delta || epsilon second_argument & ) )";
+ break;
+ case 5:
+ s = "alpha || beta && (gamma || epsilon)";
+ break;
+ default:
+ return 0;
+ }
+
+
+
+ tokenizer(s);
+ cout << "---------- tokenizer ----------" << endl;
+ for (auto c : token)
+ {
+ if (c.token_type == LOGIC_AND)
+ println("{} LOGIC_AND", c.bracket_depth);
+ else if (c.token_type == LOGIC_OR)
+ println("{} LOGIC_OR", c.bracket_depth);
+ else if (c.token_type == ASYNC)
+ println("{} ASYNC", c.bracket_depth);
+ else if (c.token_type == PIPE)
+ println("{} PIPE", c.bracket_depth);
+ else if (c.token_type == LEFT_BRACKET)
+ println("{} LEFT_BRACKET", c.bracket_depth);
+ else if (c.token_type == RIGHT_BRACKET)
+ println("{} RIGHT_BRACKET", c.bracket_depth);
+ else if (c.token_type == TEXT)
+ println("{} TEXT .{}.", c.bracket_depth, c.text);
+ }
+
+ cout << "---------- parse ----------" << endl;
+
+ parse(0, token.size(), alloc_ast());
+
+ cout << "---------- AST ----------" << endl;
+ for (size_t i = 0; i < ast.size(); i++)
+ {
+ print("{}: type: {} left: {} right: {}", i, magic_enum::enum_name(ast[i].token_type), ast[i].left, ast[i].right);
+ if (ast[i].token_type == TEXT)
+ print(" command: {}", ast[i].command_text);
+ println();
+ }
+ return 0;
+}