编译原理课程总结
刚开始学习这门课的时候还是有些懵懂,感觉不到这门课是要做什么,有什么实用性价值,但是在通过费老师的讲解后,我有了一些初步的认识,课后又通过网络,图书馆书籍等了解到,编译原理是计算机的核心,是高级程序语言得以实现的基础,可以说是连接计算机语言,汇编语言,高级程序语言的桥梁。
汇编语言作为计算机专业的专业课程,让我感觉到不仅在难度、深度上有所增加,而且贯穿了几乎所有的专业课程,费老师说想要我们写一个编译器,我敢说真正写好一个编译器,即使在这个行业不能说特别厉害,也可以称得上是大牛了吧。通过这门课程的学习,我觉得我专业知识还是非常欠缺,我敢问如果自问如果让我写个编译器我会感觉无从下手,接下来就简单谈一谈我通过此次课程学到的知识。
一、首先简单写一下编译程序总体结构:
词法分析
语法分析
语义分析和中间代码产生
代码优化
目标代码生成
外加表格管理和出错处理
二、一些我个人容易混淆的概念:
短语:S*->aAc,A+->d则d是句型aAc针对A的短语
直接短语:A->d则称d为句型aAc针对A->a的直接短语
句柄:一个句型的最左直接短语是句柄
综合属性:在语法树上,一个节点的综合属性由该节点的子节点的属性确定,他的计算规则自底向上。
继承属性:在语法树中,一个节点的继承属性由该节点的父节点/兄弟节点的属性确定,他的计算自顶向下。
三、就每个结构谈谈我自己的看法:
1.词法分析,词法分析在输入源符号字符串,从单词层面分析,根据规则分离出单词。为了方便设计出了不确定的有限状态自动机,进而有确定的有限状态自动机,从NFA到DFA的转换是词法分析的难点,应该先根据正规表达式画出状态转换图,进而得到NFA,然后通过子集法列表得到未化简的DFA,最后通过最小化化简DFA得到最简DFA,这一部分说实话我是在实实在在做上了几个题目才有种捅破窗户纸的感觉的。
2.语法分析,这一部分设计的内容较多,我觉得在编译程序过程中也是最重要的一部分,语法分析,根据词法分析得到的单词,进而通过规则进行归类生成句子。这一部分主要的文法有自上而下次LL(1),自下而上LR(0)、算符优先、LR(1)、SLR(1)等等。
3.语义分析和中间代码产生,通过语法分析的到句子以后,要通过规则进行语义分析,否则会造成很多歧义,诸如很多文法具有的二义性,会在分支处处理不当产生错误。
4.此次课程最后我们学了三元式、四元式、逆波兰式,逆波兰式就是后缀表达式。
三元式举例:
a:=b*c+b*d
(1) (* b,c)
(2) (* b,d)
(3) (+ (1),(2))
(4) (:= (3),a)
四元式举例:
a:=b*c+b*d
(1) (*,b,c,t1)
(2) (*,b,d,t2)
(3) (+,t1,t2,t3)
(4)(:=,t3,-,a)
总的来说,通过编译原理的学习,我将之前学过的专业知识能有一个系统的认知,将新旧知识串联;同时我认识到自己在计算机专业方面的知识还是欠缺很多,自己必须在读研之前将专业课知识复习扎实,并且在以后多多扩展自己在专业方面的技能。最后在考试的时候我感觉自己对这些所学知识的掌握程度不好,还是有很多点很生涩,在后期复习考研专业课的时候我也会将专业课与编译原理相结合的去学习。
有句话说的好,课程的结束并不是这门学科知识的结束,而是学习这门知识的开始,老师只是将这门课程学习方法教授给学生,如果真是为了应付考试,那么这样的学习真的毫无意义可言,如果真是这样,我也不知道现在大学生毕业以后会干点啥,只是做些形式的作业而没有人真正的去钻研科研。从编译原理这门课就能看出,我们如果真想学习技术,可以学的技术真的很多,自己的专业知识真的很匮乏。我目前准备在扎实自己专业课的基础上学习R或者Python其中一种,考研往人工智能大数据方向靠拢,最后感谢费老师能在我大学三年督促我学好习,最后一学期的课程了,希望这次课程总结能为大学最后几次课画上一个圆满的句号。