From 2737ebd9fc8b87b772258f8ccde30a312c3b1f34 Mon Sep 17 00:00:00 2001 From: jing <3030349106@qq.com> Date: Wed, 11 Mar 2026 23:29:17 +0800 Subject: [PATCH] =?UTF-8?q?style(sema):=20=E8=A7=84=E8=8C=83=E7=AC=A6?= =?UTF-8?q?=E5=8F=B7=E8=A1=A8=E4=BB=A3=E7=A0=81=E4=BD=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/irgen/IRGen.h | 8 +------- src/irgen/IRGenExp.cpp | 6 +++--- src/irgen/IRGenFunc.cpp | 3 +-- src/sem/Sema.h | 2 +- src/sem/SymbolTable.cpp | 14 ++++++++++++++ src/sem/SymbolTable.h | 13 +++---------- 6 files changed, 23 insertions(+), 23 deletions(-) diff --git a/src/irgen/IRGen.h b/src/irgen/IRGen.h index f05d63f..6f09a69 100644 --- a/src/irgen/IRGen.h +++ b/src/irgen/IRGen.h @@ -1,4 +1,4 @@ -// 将语法树翻译为极简 IR。 +// 将语法树翻译为 IR。 // 实现拆分在 IRGenFunc/IRGenStmt/IRGenExp/IRGenDecl。 #pragma once @@ -11,12 +11,6 @@ #include "ir/IR.h" #include "sem/Sema.h" -namespace antlr4 { -namespace tree { -class ParseTree; -} -} // namespace antlr4 - namespace ir { class Module; class Function; diff --git a/src/irgen/IRGenExp.cpp b/src/irgen/IRGenExp.cpp index a7c7292..de74bb9 100644 --- a/src/irgen/IRGenExp.cpp +++ b/src/irgen/IRGenExp.cpp @@ -22,7 +22,7 @@ ir::Value* IRGenImpl::GenAddExpr(SysYParser::AddExpContext& add) { ir::Value* acc = GenPrimary(*terms[0]); for (size_t i = 1; i < terms.size(); ++i) { ir::Value* rhs = GenPrimary(*terms[i]); - std::string name = ir::DefaultContext().NextTemp(); + std::string name = module_.context().NextTemp(); acc = builder_.CreateBinary(ir::Opcode::Add, acc, rhs, name); } return acc; @@ -30,7 +30,7 @@ ir::Value* IRGenImpl::GenAddExpr(SysYParser::AddExpContext& add) { ir::Value* IRGenImpl::GenPrimary(SysYParser::PrimaryContext& primary) { if (primary.Number()) { - return ir::DefaultContext().GetConstInt(std::stoi(primary.Number()->getText())); + return builder_.CreateConstInt(std::stoi(primary.Number()->getText())); } if (primary.Ident()) { auto* decl = sema_.ResolveVarUse(&primary); @@ -43,7 +43,7 @@ ir::Value* IRGenImpl::GenPrimary(SysYParser::PrimaryContext& primary) { throw std::runtime_error("[irgen] 变量声明缺少存储槽位: " + primary.Ident()->getText()); } - return builder_.CreateLoad(it->second, ir::DefaultContext().NextTemp()); + return builder_.CreateLoad(it->second, module_.context().NextTemp()); } if (primary.exp()) { return GenExpr(*primary.exp()); diff --git a/src/irgen/IRGenFunc.cpp b/src/irgen/IRGenFunc.cpp index be90ecd..4792f1e 100644 --- a/src/irgen/IRGenFunc.cpp +++ b/src/irgen/IRGenFunc.cpp @@ -41,8 +41,7 @@ void IRGenImpl::GenFuncDef(SysYParser::FuncDefContext& func) { } func_ = module_.CreateFunction( - func.Ident()->getText(), - std::make_shared(ir::Type::Kind::Int32)); + func.Ident()->getText(), module_.context().Int32()); builder_.SetInsertPoint(func_->entry()); storage_map_.clear(); diff --git a/src/sem/Sema.h b/src/sem/Sema.h index 3dcc830..793dfc6 100644 --- a/src/sem/Sema.h +++ b/src/sem/Sema.h @@ -1,4 +1,4 @@ -// 基于语法树的极简语义检查与名称绑定。 +// 基于语法树的语义检查与名称绑定。 #pragma once #include diff --git a/src/sem/SymbolTable.cpp b/src/sem/SymbolTable.cpp index 67ba4d4..cde3941 100644 --- a/src/sem/SymbolTable.cpp +++ b/src/sem/SymbolTable.cpp @@ -3,3 +3,17 @@ // - 变量/函数/参数/常量的注册、查找与遮蔽规则 #include "sem/SymbolTable.h" + +void SymbolTable::Add(const std::string& name, + SysYParser::VarDeclContext* decl) { + table_[name] = decl; +} + +bool SymbolTable::Contains(const std::string& name) const { + return table_.find(name) != table_.end(); +} + +SysYParser::VarDeclContext* SymbolTable::Lookup(const std::string& name) const { + auto it = table_.find(name); + return it == table_.end() ? nullptr : it->second; +} diff --git a/src/sem/SymbolTable.h b/src/sem/SymbolTable.h index 06d59f4..40cc1df 100644 --- a/src/sem/SymbolTable.h +++ b/src/sem/SymbolTable.h @@ -8,16 +8,9 @@ class SymbolTable { public: - void Add(const std::string& name, SysYParser::VarDeclContext* decl) { - table_[name] = decl; - } - bool Contains(const std::string& name) const { - return table_.find(name) != table_.end(); - } - SysYParser::VarDeclContext* Lookup(const std::string& name) const { - auto it = table_.find(name); - return it == table_.end() ? nullptr : it->second; - } + void Add(const std::string& name, SysYParser::VarDeclContext* decl); + bool Contains(const std::string& name) const; + SysYParser::VarDeclContext* Lookup(const std::string& name) const; private: std::unordered_map table_;