编译器---综述

作者: 拉丁吴 | 来源:发表于2015-09-17 20:42 被阅读157次

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


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

    1. 词法分析

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

    2. 语法分析

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

    3. 语义分析

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

    4. 代码生成

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

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

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

    相关文章

      网友评论

        本文标题:编译器---综述

        本文链接:https://www.haomeiwen.com/subject/dwebcttx.html