dmd结构
原文在此
github
的raw
数据与渲染
出来数据不一样.简直太搞笑
.
目录 | 结构 |
---|
dmd/ | 驱动和前端 |
dmd/backend/ | x86/x86-64 生成代码,同dmc 共享.但不与ldc/gdc 共享 |
dmd/root/ | 仅dmd 使用的工具库 |
DMD
结构平坦,本节按编译过程划分
组,方便浏览.
驱动
文件 | 目的 |
---|
mars.d | 入口,定义主 . |
cli.d | 命令行接口 . |
globals.d | 存储命令行 选项. |
dinifile.d | 从sc.ini 或dmd.conf 解析配置 |
vsoptions.d | 检查微软工具链/链接 . |
frontend.d | 把dmd 当库的接口 . |
errors.d | 错误报告 |
target.d | 对ldc/gdc ,为交叉编译 管理目标相关参数 |
compiler.d | 描述后端编译器 并实现相关编译器 动作 |
词法/解析
文件 | 目的 |
---|
lexer.d | 源码至令牌 |
entity.d | 定义"\&Entity;"用来转义 |
tokens.d | 定义令牌 |
parse.d | 转换为语法树 |
语义分析,符号和声明
文件 | 目的 |
---|
dsymbol.d | d符号 基类,如变量,函数,模块,枚举等. |
identifier.d | 表d符号 名. |
id.d | 预定义标识符串 ,如sizeof,string |
dscope.d | 定义可查找符号 的域 |
dtemplate.d | 模板声明或实例 |
dmodule.d | 定义包和模块 |
mtype.d | 定义表达式类型,如int ,char ,void function . |
arraytypes.d | 对T 声明,提供Array!T 别名 |
declaration.d | 杂项,声明alias ,变量,类型元组,类信息等 |
denum.d | 定义枚举声明和成员 |
attrib.d | 声明private , pragma , immutable , @UDA , align , extern 等属性. |
func.d | 定义函数声明,如函数字面,不变,单元测试 |
dversion.d | 定义版本符号 如version = ident ,debug = ident |
语法树结点
文件 | 目的 |
---|
ast_node.d | 定义语法树 节点 |
astbase.d | 解析器 可生成语法树 节点的名字空间 |
astcodegen.d | 可生成代码 语法树名字空间 . |
expression.d | 定义表达式 语法树节点 |
statement.d | 定义语句 语法树节点 |
staticassert.d | 定义静断 语法树节点 |
aggregate.d | 定义聚集 … |
dclass.d | 定义类 |
dstruct.d | 定义构/联 |
init.d | 定义变量初化 器. |
语法树访问者
文件 | 目的 |
---|
parsetimevisitor.d | 语法树节点 通用访问者 |
permissivevisitor.d | 宽松访问者 ,在未实现节点,不断定(0) .上面通用 的子类. |
strictvisitor.d | 严格访问者 ,要求子类必须对每个可能节点 实现访问 函数, |
visitor.d | 对编译器 所有节点实现访问 的访问者 |
transitivevisitor.d | 对通用 用访问 方法提供插件模板 |
apply.d | 深先 表达式访问者 |
sapply.d | 深先 语句访问者 |
statement_rewrite_walker.d | 允许替换当前访问节点 的语句访问者 . |
语义
文件 | 目的 |
---|
dsymbolsem.d | 符号标识符/类型 ,第1趟 |
semantic2.d | 初化符号 ,第2 趟. |
semantic3.d | 函数体,第3 趟. |
inline.d | 前端内联 优化 |
inlinecost.d | 计算内联函数调用成本 |
expressionsem.d | 分析表达式语义 |
statementsem.d | 分析语句语义 |
initsem.d | 分析初化器语义 |
templateparamsem.d | 分析模板语义 |
typesem.d | 分析类型语义 |
语义帮助
文件 | 目的 |
---|
opover.d | 重载操作符 |
clone.d | 对构 自动生成opEquals,opAssign 和构造器 . |
blockexit.d | 找退出控制流 方式 |
ctorflow.d | 构造器中控制流 |
constfold.d | 算术表达式 常量折叠 |
optimize.d | 更通用常量折叠 |
dcast.d | 隐显转 ,提升整 等 |
impcnvtab.d | 对基本类型定义隐式转换表 |
sideeffect.d | 对一些降级表达式 提取副作用 |
编译时执行函数
文件 | 目的 |
---|
dinterpret.d | 入口点 |
ctfeexpr.d | 包含指针/切片/连接数组 表达式的编译时执行 |
builtin.d | 如core.math,std.math和core.bitop 等外部函数的编译时执行 |
检查属性
文件 | 目的 |
---|
nogc.d | 对@无垃集 . |
safe.d | 安全 |
canthrow.d | 可抛 |
escape.d | 域 |
access.d | 公/私 |
ob.d | @活 . |
内联汇编
文件 | 目的 |
---|
iasm.d | 内联汇编依赖 编译器 |
iasmdmd.d | dmd 的 |
iasmgcc.d | gdc 的 |
其他
文件 | 目的 |
---|
aliasthis.d | 对alias X this 解析隐式 转换 |
traits.d | __traits() |
lambdacomp.d | __traits(isSame, x => y, z => w) |
cond.d | 求值静如,版本,调试 |
staticcond.d | 对静如,静断 和模板限制 懒求值静态条件 |
delegatize.d | 对懒 ,转换式 至闭包 . |
eh.d | 异常处理 |
nspace.d | 外(C++,模块) 的名字空间 |
intrange.d | 传播值区间 |
dimport.d | 重命名 导入 |
arrayop.d | a[] = b[] + c[]数组操作 |
typinf.d | 为typeid及内部 生成类型信息 |
chkformat.d | 对printf / scanf 等检查格式 |
imphint.d | 当不能 解析写行 时,给出如导入标.标io等提示 . |
库文件
文件 | 目的 |
---|
lib.d | 抽象库类 |
libelf.d | 联操elf 格式 |
libmach.d | 马操O 格式 |
libmscoff.d | 微软coff 格式(32/64 ) |
libomf.d | omf 格式 |
scanelf.d | 从elf 中取符号名 |
scanmach.d | 从O 中取 |
scanmscoff.d | 从coff 中取 |
scanomf.d | 从omf 中取 |
生成代码/后端接口
文件 | 目的 |
---|
dmsc.d | 配置和初化后端 |
toobj.d | 把通过语义后 语法树转为目标 . |
toir.d | 转换d符号 中间表示 |
e2ir.d | 表达式->中间 |
s2ir.d | 语句->中间 |
stmtstate.d | 语句至流图 |
toctype.d | d类型->后端理解的类型 |
tocsym.d | d符号=>链接器理解符号 |
argtypes_x86.d | 对x86 转换d类型=>简单寄 |
argtypes_sysv_x64.d | x86_64位 的 |
argtypes_aarch64.d | AArch64 的 |
glue.d | 对函数声明 生成目标文件 |
gluelayer.d | 前端调用后端函数的声明 |
todt.d | 转换初化器 为后端将加的段数据 结构 |
tocvdebug.d | 按cv4 格式生成调试信息 |
objc.d | 目标c 接口 |
objc_glue.d | 目标c 胶水 |
混杂名字
文件 | 目的 |
---|
cppmangle.d | c++混杂名 |
cppmanglewin.d | 窗口下c++混杂名 |
dmangle.d | d混杂名 |
链接
特殊输出
文件 | 目的 |
---|
doc.d | 生成文档 |
dmacro.d | 处理ddoc宏 |
hdrgen.d | 将语法 生成树 转为di格式d头文件 或用-vcg-ast |
json.d | 按json 格式或用-X 描述模块 |
dtoh.d | 从d源码 生成c++头 . |
工具
许多其他工具
在dmd/根
里面.
文件 | 目的 |
---|
env.d | 修改环境变量 |
console.d | 按彩色打印错误消息 |
utf.d | 变长码 |
filecache.d | 在内存保存文件 |
utils.d | 文件/路径 工具 |
complex.d | 复数 类型 |
asttypename.d | 为调试 打印语法树 内部名 |
printast.d | 打印语法树结构 |
foreachvar.d | 在ob.d 中用来迭代表达式 中所有变量 . |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现