aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCori Barker <coribarker2@gmail.com>2026-03-10 15:14:30 +0000
committerCori Barker <coribarker2@gmail.com>2026-03-10 15:14:30 +0000
commit64c0ed967b0a800ce950c58cb6c20395ccef86ec (patch)
tree7453219131ff2e1d8ff0f0b156f549f35ba05e75
parentca44ea33919127b66b3ea9f8714ff0c30be61fee (diff)
refactored semantic analyzer
-rw-r--r--include/semantic_analyzer.hpp6
-rw-r--r--src/semantic_analyzer.cpp24
2 files changed, 30 insertions, 0 deletions
diff --git a/include/semantic_analyzer.hpp b/include/semantic_analyzer.hpp
index ec1e4a1..8db3d05 100644
--- a/include/semantic_analyzer.hpp
+++ b/include/semantic_analyzer.hpp
@@ -1,10 +1,16 @@
#pragma once
#include "symbol_table.hpp"
+#include "ast_node.hpp"
class SemanticAnalyzer {
public:
explicit SemanticAnalyzer();
+ SymbolTable analyze(ASTNode* node);
+ Symbol* analyzeVariable(ASTNode* node);
+ Symbol* analyzeFunction(ASTNode* node);
+ ASTNode* advance();
+ ASTNode* peek();
private:
SymbolTable symbol_table;
diff --git a/src/semantic_analyzer.cpp b/src/semantic_analyzer.cpp
new file mode 100644
index 0000000..48a9448
--- /dev/null
+++ b/src/semantic_analyzer.cpp
@@ -0,0 +1,24 @@
+#include "semantic_analyzer.hpp"
+
+SemanticAnalyzer::SemanticAnalyzer() : symbol_table(), current_scope(nullptr), current_scope_level(-1) { }
+
+SymbolTable SemanticAnalyzer::analyze(ASTNode* node) {
+ for (auto function : node->function_delcarations) {
+ analyzeFunction(function);
+ }
+}
+
+ASTNode* SemanticAnalyzer::advance() {
+ if (dynamic_cast<ProgramNode*>(node)) {
+
+ }
+}
+
+ASTNode* SemanticAnalyzer::peek() { }
+
+Symbol* SemanticAnalyzer::analyzeVariable(ASTNode* node) { }
+
+Symbol* SemanticAnalyzer::analyzeFunctionDeclaration(ASTNode* node) {
+ std::string identifier = node->identifier;
+ symbol_type = SymbolType::FUNCTION_DECLARATION;
+}