编译器---综述


编译器,就是将编程语言通过 读入代码程序,识别单词(输出token),检查语法(输出抽象语法树),检查语义(输出中间表示),等价优化(输出中间表示),翻译成底层代码的一系列流水线分析过程,转换成可执行文件的一种程序。


实际上,编译器可以分为以下几个步骤:

1. 词法分析

  • 输入:语言程序代码
  • 动作:识别程序源码的单词,检查是否有非法词
  • 输出:一个记号流(每个记号包含一个源程序符号,以及相关的属性)

2. 语法分析

  • 输入:一个记号流
  • 动作:通过读入记号流,检查其是否符合规定的语法,若是,则将其转换成一个抽象语法树,否则报错
  • 输出:抽象语法树

3. 语义分析

  • 输入:抽象语法树
  • 动作:检查变量是否定义,表达式运算是否类型匹配,管理变量作用域,以及相关优化...
  • 输出:某种中间代码

4. 代码生成

  • 输入:中间代码
  • 动作:把中间代码翻译成目标机器上可执行的代码
  • 输出:可执行代码

实际上,在过去,往往语义分析完成后,可以直接生成可执行代码,但是如今的编程语言过于复杂,所以往往需要代码生成这个模块,来减小每一个部分的处理难度。对照上面编译器的分析过程,你会发现,每一个部分,输入和输出的数据结构都不太相同,所以,写编译器之前,需要一些数据结构的知识。

我写的编译器主要由java完成,但是词法分析部分使用python来完成的,主要是因为java的io接口一点都不简洁,所以决定用python完成主要的io过程。编译器用于编译 t语言(自己起了一个名字),但是由于某些原因,最终输出不是可执行代码,而是伪汇编代码,<操作指令,操作数1,操作数2,结果存放>

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,879评论 19 139
  • 一、温故而知新 1. 内存不够怎么办 内存简单分配策略的问题地址空间不隔离内存使用效率低程序运行的地址不确定 关于...
    SeanCST阅读 12,386评论 0 27
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 32,567评论 18 399
  • 第一部分C语言的组成 一.基本数据类型 java中有八中基本数据类型,而在c/c++中没有byte和boolean...
    lemonCode阅读 3,180评论 0 1
  • 现在是晚上10点半,我居然已经吃完西瓜冲好凉,洗完衣服坐在电脑前敲昨天的晨读感想了,想想之前十点半之前都无法下班的...
    小二关阅读 1,562评论 0 0

友情链接更多精彩内容