编译器学习笔记之一:概述(未完)

来源:互联网 发布:手机淘宝详情页不显示 编辑:程序博客网 时间:2024/05/16 19:20


        编译器,是将便于人编写,阅读,维护的高级计算机语言翻译为计算机能识别,运行的低级机器语言的程序。编译器将源程序(Source program)作为输入,翻译产生使用目标语言(Target language)的等价程序。源程序一般为高级语言(High-level language),而目标语言则是汇编语言或目标机器的目标代码(Object code),有时也称作机器代码(Machine code)。

        一个现代编译器的主要工作流程如下:
源代码(sourcecode)→预处理器(preprocessor)→编译器(compiler)→汇编程序(assembler)→目标代码(objectcode)→连接器(Linker)→可执行程序(executables)

        编译器可以生成与编译器本身所在的计算机和操作系统相同的环境下运行的目标代码,这种编译器又叫做“本地”编译器。另外,编译器也可以生成其它平台上运行的目标代码,这种编译器又叫做交叉编译器

        预处理器:预处理器(preprocessor)作用是通过代入预定义等程序段将源程序补充完整。

        编译器前端:编译器前端(frontend),前端主要负责解析(parse)输入的源程序,由词法分析器和语法分析器协同工作。词法分析器负责把源程序中的‘单词’(Token)找出来,语法分析器把这些分散的单词按预先定义好的语法组装成有意义的表达式,语句 ,函数等等。 例如“a = b + c;”前端词法分析器看到的是“a = b ; + c;”,语法分析器按定义的语法,先把他们组装成表达式“b + c”,再组装成“a = b + c”的语句。 前端还负责语义(semantic checking)的检查,例如检测参与运算的变量是否是同一类型的,简单的错误处理。最终的结果常常是一个抽象的语法树(abstract syntax tree,或 AST),这样后端可以在此基础上进一步优化,处理。

        编译器后端:编译器后端(backend)编译器后端主要负责分析,优化中间代码(Intermediate representation)以及生成机器代码(Code Generation)。

0 0