《自己动手写编译器、链接器》第1章引言1
1.1HelloWorld编译过程分析1
1.1.1HelloWorld程序源文件1
1.1.2词法分析2
1.1.3语法分析3
1.1.4语义分析3
1.1.5链接器4
1.2SCC编译器简介7
1.2.1SCC编译器架构7
1.2.2SCC编译器开发环境7
1.2.3SCC编译器运行环境8
第2章文法知识10
2.1语言概述10
2.2形式语言11
2.2.1字母表和符号串11
2.2.2文法与语言的形式定义12
2.2.3文法与语言的类型13
2.2.4程序设计语言描述工具15
2.3词法分析方法16
2.3.1词法定义例举17
2.3.2状态转换图17
2.3.3词法分析程序流程图17
2.4语法分析方法18
2.4.1LL分析器18
2.4.2LL(k)文法19
2.4.3LL(1)文法19
2.4.4递归子程序法21
2.4.5文法的等价变换24目录自己动手写编译器、链接器第3章SC语言定义26
3.1SC语言的蓝本选择26
3.1.1K&R C26
3.1.2C8926
3.1.3C9927
3.2SC语言对C89简化原则27
3.3SC语言的字符集27
3.3.1基本字符集28
3.3.2扩展字符集28
3.4SC语言词法定义29
3.4.1关键字29
3.4.2标识符30
3.4.3整数常量31
3.4.4字符常量31
3.4.5字符串常量32
3.4.6运算符及分隔符32
3.4.7注释33
3.5SC语言语法定义33
3.5.1外部定义33
3.5.2语句35
3.5.3表达式39
3.6SC语言与C语言功能对比46
3.6.1关键字46
3.6.2数据类型46
3.6.3存储类型47
3.6.4常量47
3.6.5变量47
3.6.6函数48
3.6.7语句48
3.6.8表达式50
第4章SC语言词法分析52
4.1词法分析任务的官方说法52
4.2单词编码53
4.3词法分析用到的数据结构55
4.3.1动态字符串56
4.3.2动态数组58
4.3.3哈希表61
4.3.4单词表62
4.4错误处理,未雨绸缪67
4.5词法分析过程72
4.5.1词法分析主程序72
4.5.2预处理76
4.5.3解析标识符79
4.5.4解析整数80
4.5.5解析字符串80
4.5.6词法分析流程图82
4.6词法着色84
4.7控制程序85
4.8词法分析成果展示86
第5章SC语言语法分析87
5.1外部定义87
5.1.1翻译单元87
5.1.2外部声明88
5.1.3类型区分符90
5.1.4结构区分符92
5.1.5函数调用约定95
5.1.6结构成员对齐95
5.1.7声明符96
5.1.8初值符100
5.2语句101
5.2.1复合语句102
5.2.2表达式语句103
5.2.3选择语句104
5.2.4循环语句104
5.2.5跳转语句105
5.3表达式107
5.3.1赋值表达式108
5.3.2相等类表达式109
5.3.3关系表达式109
5.3.4加减类表达式110
5.3.5乘除类表达式111
5.3.6一元表达式112
5.3.7后缀表达式113
5.3.8初值表达式114
5.4语法缩进116
5.4.1用到的全局变量及枚举116
5.4.2语法缩进程序117
5.5总控程序118
5.6成果展示119
第6章符号表120
6.1符号表简介121
6.1.1收集符号属性121
6.1.2语义的合法性检查122
6.2符号表用到的主要数据结构123
6.2.1栈结构123
6.2.2符号表结构127
6.2.3数据类型结构132
6.2.4存储类型133
6.3符号表的构造过程134
6.3.1外部声明134
6.3.2类型区分符137
6.3.3结构区分符138
6.3.4声明符144
6.3.5变量初始化149
6.3.6复合语句150
6.3.7sizeof表达式150
6.3.8初等表达式152
6.4控制程序153
6.5成果展示155
第7章生成COFF目标文件157
7.1COFF文件结构157
7.1.1基本概念157
7.1.2总体结构158
7.1.3COFF文件头158
7.1.4节头表161
7.1.5代码节内容168
7.1.6数据节与导入节内容168
7.1.7COFF符号表169
7.1.8COFF字符串表173
7.1.9COFF重定位信息173
7.2生成COFF目标文件175
7.2.1生成节表176
7.2.2生成符号表178
7.2.3生成重定位信息182
7.2.4生成目标文件183
7.3成果展示185
第8章x86机器语言187
8.1x86机器语言简介187
8.2通用指令格式188
8.2.1指令前缀188
8.2.2操作码190
8.2.3ModR/M字节190
8.2.4SIB字节191
8.2.5偏移量与立即数193
8.3x86寄存器193
8.3.1数据寄存器193
8.3.2变址寄存器193
8.3.3指针寄存器194
8.3.4段寄存器194
8.3.5指令指针寄存器194
8.3.6标志寄存器195
8.4指令参考196
8.4.1符号说明196
8.4.2数据传送指令198
8.4.3算术运算指令200
8.4.4逻辑运算指令203
8.4.5控制转移指令205
8.4.6串操作指令208
8.4.7处理器控制指令208
8.5生成x86机器语言208
8.5.1操作数栈209
8.5.2生成通用指令210
8.5.3生成数据传送指令213
8.5.4生成算术与逻辑运算指令217
8.5.5生成控制转移指令221
8.5.6寄存器使用224
8.5.7本章用到的全局变量227
8.6成果展示227
第9章SCC语义分析229
9.1外部定义229
9.1.1声明与函数定义229
9.1.2初值符232
9.1.3函数体234
9.2语句237
9.2.1表达式语句237
9.2.2选择语句 238
9.2.3循环语句 239
9.2.4跳转语句241
9.3表达式 244
9.3.1赋值表达式244
9.3.2相等类表达式245
9.3.3关系表达式246
9.3.4加减类表达248
9.3.5乘除类表达式249
9.3.6一元表达式250
9.3.7后缀表达式253
9.3.8初值表达式257
9.4成果展示259
第10章链接器261
10.1链接方式与库文件261
10.2PE文件格式263
10.2.1总体结构263
10.2.2DOS部分264
10.2.3NT头265
10.2.4节头表272
10.2.5代码节272
10.2.6数据节274
10.2.7导入节274
10.3链接器代码实现278
10.3.1生成PE文件头278
10.3.2加载目标文件281
10.3.3加载引入库文件282
10.3.4解析外部符号285
10.3.5计算节区的RVA地址288
10.3.6重定位符号地址291
10.3.7修正需要重定位的地址292
10.3.8写PE文件293
10.3.9生成EXE文件295
10.4SCC编译器、链接器总控程序297
10.5成果展示301
10.6全书代码架构302
第11章SC语言程序开发304
11.1SC语言程序开发流程304
11.2SCC编译器测试程序304
11.2.1表达式测试304
11.2.2语句测试308
11.2.3结构体测试310
11.2.4函数参数传递测试312
11.2.5字符串测试314
11.2.6全局变量测试315
11.3语言举例316
11.3.1可接收命令行参数的控制台程序316
11.3.2可接收命令行参数的Win32应用程序317
11.3.3HelloWindows窗口程序318
11.3.4文件复制程序323
11.3.5九九乘法表325
11.3.6打印菱形326
11.3.7屏幕捕捉程序328
参考文献336
附录ASC语言文法定义中英文对照表337

转载于:https://www.cnblogs.com/boyublog/p/4216966.html

自己动手写编译器、链接器目录结构相关推荐

  1. 【原创】自己动手写工具----签到器[Beta 1.0]

    写在前面 最近公司没有什么项目,想通过项目练练手的机会也没有,只能自己学习了,因此空下来的时间也挺多的,就打开网页看看吧,哎,一打开就让签到(像什么百度知道啊.百度云盘啊之类的),我签到的目的是获取积 ...

  2. 自己动手写编译器:符号表及其实现

    本节我们要完成一个任务,给定如下一段代码: {int x; char y; {bool y; x; y;} x; y;} 解析上面代码后输出结果为: {{x:int; y:bool} x:int; y ...

  3. 自己动手写编译器:中间代码生成1

    我们到了简单编译器开发的最后一个阶段,也就是生成中间代码.以前我们提到过编译器分为两部分,分别为前端和后端,所谓前端就是将代码转译成中间语言,后端负责进行优化和转译成目标平台的机器指令,现在我们来到了 ...

  4. 自己动手写编译器:汤普森构造法

    上节我们描述了正则表达式的规则,有过一些编程经验的同学或许都用过正则表达式功能,通常使用它来检验特定格式的字符串,例如检验输入的邮箱是否合法等.当然大多数时候我们只要"调用"即可, ...

  5. python实现编译器链接器_Python入门之Python编译器

    注释是用来向用户提示或解释某些代码的作用和功能,它可以出现在代码的任何位置.Python解释器在执行代码时会忽略注释,而不像不存在一样处理注释.注解最重要的是提高程序的可读性,没有注解的程序简直是天书 ...

  6. 易语言静态连接器提取_易语言静态编译链接器切换工具

    使用说明 将exe程序和"链接器目录配置.ini"文件,复制到易语言安装目录的"tools"文件夹下 并且对"链接器目录配置.ini"进行修 ...

  7. 搜索引擎——反向索引原理揭秘及手写ik分词器

    原创不易,转载请标明地址,或者直接附上我的博客首页https://georgedage.blog.csdn.net/ 上篇博客我们说到,数据库为什么不适合搜索引擎的底层存储?,那么什么适合呢? ela ...

  8. pycharm项目目录结构_「Actix-web项目」-项目整体目录结构

    前言 完成一个前后端分离项目,后端技术选型Rust的框架Actix-web,那么用这个框架完成后端代码它的项目目录很重要,今天就来着重介绍一下. 目录结构 下面是自己用Rust Actix-web框架 ...

  9. iOS高级进阶系列之项目开发基础(上)多环境配置,Mach-O与链接器。

    前言 最近对项目进行优化,就顺便写一些日常开发中会用到的中高级开发技巧.这篇文章聊一下下面三个内容:多环境配置,Mach-O与链接器,Symbol. 多环境配置 聊到多环境配置,我们先说几个概念 上图 ...

最新文章

  1. 写给深圳首期Python自动化开发周未班的信
  2. 2016/06/22 中色启动筹码分析作业
  3. linux 命令 抛后台,Linux 后台执行命令
  4. css文本外观属性大全(内附实例与图解)
  5. PHP100视频教程(2012-2013版)下载地址及密码
  6. python pygame鼠标点击_Python之pygame学习鼠标操作(12)
  7. dns服务器对网速有影响吗,更换DNS服务器可以提高网速吗?
  8. 冯诺依曼计算机模型中存储器,在冯诺依曼计算机模型中存储器是指什么单元?...
  9. Linux常用命令讲解(pdf在我的资源可以下载,有图)
  10. linux gtk主题安装教程,如何获取、安装和制作 GTK 主题
  11. ThinkPad E460如何进入bios
  12. 面向对象的讨论-2022年5月4日
  13. 微信公众平台开发入门教程(图文)
  14. vgg16构造模型图(转)
  15. arcgis栅格缺值填补
  16. halcon闭合轮廓线
  17. Apache Kafka Consumer 消费者集
  18. 【简单工厂设计模式】
  19. 无参考图像质量评价之图像质量评价方法(一)[均方根误差、峰值信噪比、结构相似度]
  20. 入门PCB设计之AD9电路板设计_杜洋工作室_学习笔记

热门文章

  1. linux安装时键盘失灵,在archlinux安装界面这卡住了,鼠标键盘失灵
  2. 毫米波雷达障碍物检测算法介绍
  3. Bezier(贝塞尔)曲线(三阶)的轨迹规划在自动驾驶中的应用(四)
  4. kettle使用数据库来生成序列_kettle专题5:数据转换
  5. 星河经纬加入会员可靠吗_星河湾外墙防水补漏 星河湾外墙防水补漏公司 星河湾外墙防水补漏师傅 星河湾外墙防水补漏施工队电话...
  6. html5标签属性大全_HTML/HTML5 知识点思维导图
  7. oracle如何不让表自动建分区,怎么自动创建表空间和表分区
  8. plotly包安装_Plotly(一)安装指南
  9. 自己动手写操作系统(二)一个最小的“操作系统”
  10. CSAPP:第八章 异常控制流1