dmd源码结构

dmd结构

原文在此
githubraw数据与渲染出来数据不一样.简直太搞笑.

目录结构
dmd/驱动和前端
dmd/backend/x86/x86-64生成代码,同dmc共享.但不与ldc/gdc共享
dmd/root/dmd使用的工具库

DMD结构平坦,本节按编译过程划分组,方便浏览.

驱动

文件目的
mars.d入口,定义.
cli.d命令行接口.
globals.d存储命令行选项.
dinifile.dsc.inidmd.conf解析配置
vsoptions.d检查微软工具链/链接.
frontend.ddmd当库的接口.
errors.d错误报告
target.dldc/gdc,为交叉编译管理目标相关参数
compiler.d描述后端编译器并实现相关编译器动作

词法/解析

文件目的
lexer.d源码至令牌
entity.d定义"\&Entity;"用来转义
tokens.d定义令牌
parse.d转换为语法树

语义分析,符号和声明

文件目的
dsymbol.dd符号基类,如变量,函数,模块,枚举等.
identifier.dd符号名.
id.d预定义标识符串,如sizeof,string
dscope.d定义可查找符号
dtemplate.d模板声明或实例
dmodule.d定义包和模块
mtype.d定义表达式类型,如int,char,void function.
arraytypes.dT声明,提供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.dcore.math,std.math和core.bitop等外部函数的编译时执行

检查属性

文件目的
nogc.d@无垃集.
safe.d安全
canthrow.d可抛
escape.d
access.d公/私
ob.d@活.

内联汇编

文件目的
iasm.d内联汇编依赖编译器
iasmdmd.ddmd
iasmgcc.dgdc

其他

文件目的
aliasthis.dalias 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.da[] = b[] + c[]数组操作
typinf.dtypeid及内部生成类型信息
chkformat.dprintf / scanf等检查格式
imphint.d不能解析写行时,给出如导入标.标io等提示.

库文件

文件目的
lib.d抽象库类
libelf.d联操elf格式
libmach.d马操O格式
libmscoff.d微软coff格式(32/64)
libomf.domf格式
scanelf.delf中取符号名
scanmach.dO中取
scanmscoff.dcoff中取
scanomf.domf中取

生成代码/后端接口

文件目的
dmsc.d配置和初化后端
toobj.d通过语义后语法树转为目标.
toir.d转换d符号中间表示
e2ir.d表达式->中间
s2ir.d语句->中间
stmtstate.d语句至流图
toctype.dd类型->后端理解的类型
tocsym.dd符号=>链接器理解符号
argtypes_x86.dx86转换d类型=>简单寄
argtypes_sysv_x64.dx86_64位
argtypes_aarch64.dAArch64
glue.d函数声明生成目标文件
gluelayer.d前端调用后端函数的声明
todt.d转换初化器为后端将加的段数据结构
tocvdebug.dcv4格式生成调试信息
objc.d目标c接口
objc_glue.d目标c胶水

混杂名字

文件目的
cppmangle.dc++混杂名
cppmanglewin.d窗口下c++混杂名
dmangle.dd混杂名

链接

文件目的
link.d按单独进程调用链接器

特殊输出

文件目的
doc.d生成文档
dmacro.d处理ddoc宏
hdrgen.d语法生成转为di格式d头文件或用-vcg-ast
json.djson格式或用-X描述模块
dtoh.dd源码生成c++头.

工具

许多其他工具dmd/根里面.

文件目的
env.d修改环境变量
console.d彩色打印错误消息
utf.d变长码
filecache.d在内存保存文件
utils.d文件/路径工具
complex.d复数类型
asttypename.d调试打印语法树内部名
printast.d打印语法树结构
foreachvar.dob.d中用来迭代表达式中所有变量.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值