这是第一篇,突然觉得应该继续总结总结才行,所以学期末趁着赶进度“预习”别人复习的内容时的空余时间梳理一下知识。
进入语法分析之后感觉编译技术这门课明显变难了,表现为看书的过程中感觉特别多的字23333,感觉好不容易看完了一两页却感觉看的内容都是不知道有什么用的东西,而看老师的ppt又觉得太过简略。但是知识就是这样,温故而知新,在我慢慢的做完第六次作业之后,我回首一看之前的内容,顿时感觉豁然开朗,知识点已经连成线了,这种感觉非常爽。
下面说明需要用到的例子:
表达式文法:
E->E+T|T
T->T*F|F
F->(E)|id
先是自底向上语法分析这个概念——
从一个输入串构造语法分析树,比如书中的例子就是怎么样把输入的id*id还原成E,而LR(0),SLR,LR(1),LALR这四种方法实际上都是为了达成这样的目的来证明语法分析没有出错。
首先最开始它就告诉我这玩意的通式叫“移进-归约”分析,但是肯定还是云里雾里。先解释归约,实际上就是把用E->E+T这样的文法把输入串中的具有文法右边形式的简化成左边形式的,最终归约的目的就是回到初始的非终结符,比如表达式文法需要使得整个输入可以简化为一个E。而移进是专门指代分析过程,我们分析是从前往后读入输入串的,在每次输入串的单个输入为a时,我们需要根据此时已经读入的存放在栈中的内容的状态来决定——是把a加入栈中呢还是暂时不处理a而是对栈中内容进行归约呢?当最后成功读完