编译原理入门笔记

什么是编译原理?

    编译原理这门课程本来是很多大学必修的一门课程,但是我的本科课程里面并没有安排这门课程,由于研究生需要研究这方面的基础,于是开始自学。相信很多人都知道这门课程是计算机基础课程中比较难入门的课程,于是我在开始之前也有点方,于是开始参考各路大神的经验。

知乎上有关于相关问题的回答

最终我在慕课上参加了哈工大张陈鄞老师的课程,其实网上的课程基本都差不多,反正都比较枯燥,选择你喜欢的就好。(ps:我主要是看脸,哈哈哈哈~,陈老师说话好温柔,听着舒服!!!!)

下面就是我学习过程做的一些笔记,在这里记录一下。

First:啥也不说了,这门课程开始一定要有一定的基础,不然真的看不下去。。。。。

首先你必须学习:C语言程序设计,了解基本的C语言语法等,然后就是离散数学的集合和图论,数据结构也需要了解一点。就差不多了。

看完上面的基础就可以开始上课了。其实只要跟着老师学还是可以听懂的。


编译原理入门笔记_第1张图片

上图主要说明了编译器工作的一个过程-主要工作就是翻译的过程。把高级语言编写的源代码变成目标语言。

编译原理入门笔记_第2张图片

编译器的主要流程如上图所示。

词法分析:词法分析的主要任务从左向右逐行扫描源程序的字符,识别出各个单词,确定单词的类型。将识别出的单词转换成统一的机内表示——词法单元(token)形式

编译原理入门笔记_第3张图片

比如:int a;这句代码输入,相应的token就是;,<,SEMI,->其中INT表示int关键字,IDC表示变量名,SEMI表示分号。ps:这里用的INT,IDC并不是标准统一的符号,这里只是为了举例子,方便理解,如果自己写编译器是可以自己定义的。

语法分析:语法分析器(parser)从词法分析器输出的token序列中识别出各类短语,并构造语法分析树(parse tree)

编译原理入门笔记_第4张图片

语义分析:收集标识符的属性信息——包括:存储位置、长度、值、作用域、参数和返回值信息等,同时在语义分析步骤过程,还需要进行语义检查——变量或过程未经声明就使用、变量或过程名重复声明、运算分量类型不匹配、操作符与操作数之间的类型不匹配、数组下标不是整数、对非数组变量使用数组访问操作符、对非过程名使用过程调用操作符、过程调用的参数类型或数目不匹配、函数返回类型有误。

中间代码生成:类似把程序变成汇编指令的样子。

比如,a=b+c;   中间代码就是<+,a,b,c>这样的四元式。

学到这里我们对编译原理有了初步的了解,接下来详细介绍每一个步骤。


你可能感兴趣的:(编译原理)