aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorCori Barker <coribarker2@gmail.com>2026-03-10 22:53:50 +0000
committerCori Barker <coribarker2@gmail.com>2026-03-10 22:53:50 +0000
commit32a1609b59fcbbfe24e223c078d51f8bfa08566f (patch)
tree0aafc1e1d19ab0a3e610ee227f92ab6a8a327813 /src
parentc364efa08dff0abef9e043e2e28cf2d8dc6b95b3 (diff)
continued development of the semantic analyzer and symbol table generation
Diffstat (limited to 'src')
-rw-r--r--src/semantic_analyzer.cpp36
1 files changed, 24 insertions, 12 deletions
diff --git a/src/semantic_analyzer.cpp b/src/semantic_analyzer.cpp
index 48a9448..f9d051b 100644
--- a/src/semantic_analyzer.cpp
+++ b/src/semantic_analyzer.cpp
@@ -1,24 +1,36 @@
#include "semantic_analyzer.hpp"
-SemanticAnalyzer::SemanticAnalyzer() : symbol_table(), current_scope(nullptr), current_scope_level(-1) { }
+SemanticAnalyzer::SemanticAnalyzer() : symbol_table(SymbolTable();), current_scope(nullptr), current_scope_level(-1) { }
SymbolTable SemanticAnalyzer::analyze(ASTNode* node) {
- for (auto function : node->function_delcarations) {
- analyzeFunction(function);
- }
-}
+ Scope* global_scope = new Scope();
-ASTNode* SemanticAnalyzer::advance() {
- if (dynamic_cast<ProgramNode*>(node)) {
-
+ for (auto function : node->function_declarations) {
+ global_scope->addSymbol(analyzeFunction(function));
}
}
-ASTNode* SemanticAnalyzer::peek() { }
+Symbol* SemanticAnalyzer::analyzeVariable(ASTNode* node) {
+ std::string identifier = node->identifier;
+ Type data_type = node->type;
+ int line = node->line;
+ int column = node->column;
-Symbol* SemanticAnalyzer::analyzeVariable(ASTNode* node) { }
+ return new Symbol(identifier, data_type, line, column);
+}
-Symbol* SemanticAnalyzer::analyzeFunctionDeclaration(ASTNode* node) {
+Symbol* SemanticAnalyzer::analyzeFunction(ASTNode* node) {
std::string identifier = node->identifier;
- symbol_type = SymbolType::FUNCTION_DECLARATION;
+ Type return_type = node->return_type;
+ std::vector<std::string> parameter_identifiers;
+ std::vector<Type> parameter_types;
+ int line = node->line;
+ int column = node->column;
+
+ for (auto parameter : node->parameters) {
+ parameter_identifiers.push_back(parameter->identifier);
+ parameter_types.push_back(parameter->type);
+ }
+
+ return new Symbol(identifer, return_type, parameter_identifiers, parameter_types, line, column);
}