大话编译原理---上篇
前序
记得第一次上编译原理这门课时,老师曾慷慨激昂的说:“学好编译原理能让你们享用一生,你们要好好学啊”。不过学完编译原理也有一段时间了,平时也找一些编译原理方面的资料学习,却始终感受不到学习编译原理的效用。究其原因还是自己学的太单薄了,毕竟像这种“内功”可不是一天两天就能练出来的!只是感觉这门课挺有意思,权当一门兴趣来学了。
正文
本文将介绍六大节的内容,其中每个部分又分为若干小节,如下图描述:
第一节 编译程序概览
1.编译程序的定义:将高级语言编写的源程序翻译成目标语言的程序。
例如用Pascal语言、C语言、C++语言等编写的程序,都是高级语言程序。而这些程序不能直接被计算机理解和执行,必须经过等价的转换,变成机器能理解与执行的机器语言才能执行。
2.编译程序的过程:词法分析、语法分析、语义分析与中间代码生成、代码优化、目标代码生成。
①.词法分析:直白的说,就是识别单词。如关键字、标示符、常数、特殊符号。
②.语法分析:在词法分析的基础上将单词序列组合成各类语法短语。如语句、表达式等等。
③.语义分析和中间代码生成:
语义分析是对源程序进行上下文有关性质的检查,看源程序有无语义错误。例如:变量是否定义、类型是否正确。
中间代码:含义明确、便于处理的记号系统。这种记号系统于源程序和机器语言之间,容易将它翻译成目标代码。如三元式、四元式、逆波兰式等。
④.代码优化:对程序代码进行等价(不改变程序的运行结果)变换。优化的目的是使最终生成的目标代码在时间和空间上效率更高。
⑤.目标代码生成:指把语法分析后或优化后的中间代码变换成目标代码。目标代码有三种形式:
⑴.可以立即执行的机器语言代码,所有地址都重定位;
⑵.待装配的机器语言模块,当需要执行时,由连接装入程序把它们和某些运行程序连接起来,转换成能执行的机器语言代码;
⑶.汇编语言代码,须经过汇编程序汇编后,成为可执行的机器语言代码。
记得第一次上编译原理这门课时,老师曾慷慨激昂的说:“学好编译原理能让你们享用一生,你们要好好学啊”。不过学完编译原理也有一段时间了,平时也找一些编译原理方面的资料学习,却始终感受不到学习编译原理的效用。究其原因还是自己学的太单薄了,毕竟像这种“内功”可不是一天两天就能练出来的!只是感觉这门课挺有意思,权当一门兴趣来学了。
正文
本文将介绍六大节的内容,其中每个部分又分为若干小节,如下图描述:
第一节 编译程序概览
1.编译程序的定义:将高级语言编写的源程序翻译成目标语言的程序。
例如用Pascal语言、C语言、C++语言等编写的程序,都是高级语言程序。而这些程序不能直接被计算机理解和执行,必须经过等价的转换,变成机器能理解与执行的机器语言才能执行。
2.编译程序的过程:词法分析、语法分析、语义分析与中间代码生成、代码优化、目标代码生成。
①.词法分析:直白的说,就是识别单词。如关键字、标示符、常数、特殊符号。
②.语法分析:在词法分析的基础上将单词序列组合成各类语法短语。如语句、表达式等等。
③.语义分析和中间代码生成:
语义分析是对源程序进行上下文有关性质的检查,看源程序有无语义错误。例如:变量是否定义、类型是否正确。
中间代码:含义明确、便于处理的记号系统。这种记号系统于源程序和机器语言之间,容易将它翻译成目标代码。如三元式、四元式、逆波兰式等。
④.代码优化:对程序代码进行等价(不改变程序的运行结果)变换。优化的目的是使最终生成的目标代码在时间和空间上效率更高。
⑤.目标代码生成:指把语法分析后或优化后的中间代码变换成目标代码。目标代码有三种形式:
⑴.可以立即执行的机器语言代码,所有地址都重定位;
⑵.待装配的机器语言模块,当需要执行时,由连接装入程序把它们和某些运行程序连接起来,转换成能执行的机器语言代码;
⑶.汇编语言代码,须经过汇编程序汇编后,成为可执行的机器语言代码。