diff options
Diffstat (limited to 'src/semantic_analyzer.cpp')
| -rw-r--r-- | src/semantic_analyzer.cpp | 36 |
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); } |
