软考路上——编译原理

编译原理在软考中的考点大体上分为以下几点:文法、语法推倒树和算符优先

下面就从这三方面来总结一下。

文法

基本元素

首先要了解文法中最基本的两个元素:非终结符和终结符。

非终结符可以理解为还可以拆分的元素,一般用大写字母来表示;终结符当然就可以看做是不可以拆分的元素,终结符不能转换为其他状态,也不能用其他的量来代替,一般用小写字母来表示。

在图中可以看到,一个文法G是由VN,VT,P,S组成的四元组,其中:VN代表非终结符的集合;VT代表终结符的集合;P是一个规则【α→β,α∈(VN∪VT)且α中至少含有一个非终结符,β∈(VN∪VT),】;S是一个符号【S∈VN】。

文法类型

0型文法(短语文法):一个文法G=(VN,VT,P,S)中,如果它的每个产生式α→β都符合α∈(VN∪VT)且α中至少含有一个非终结符,β∈(VN∪VT),那么称G是一个0型文法,如果G0({S,A,B},{a,b,c},P,S)的生成式为S→Aa,Aa→B,Ab→abc,B→aba,那么G0是一个0型文法。

1型文法(上下文有关文法):1型文法在0型文法的基础上多加了一个条件,α的长度必须大于或等于β的长度,上例中G0因为有Aa→B,所以G0({S,A,B},{a,b,c},P,S)不符合1型文法。“→”左边符号的数量必须大于等于右边。

2型文法(上下文无关文法):2型文法在1型文法的基础上多加了一个条件,α必须是非终结符,上例G0中因为有Ab→abc,Ab不是非终结符,所以G0({S,A,B},{a,b,c},P,S)不符合2型文法。“→”左边的符号必须是非终结符。

3型文法(正规文法),3型文法在2型文法的基础上多加了一个条件,β中如果包含终结符和非终结符时,非终结符要么都在左侧,要么都在右侧。比如A→aB,B→Bc,那么就不符合3型文法,但如果有A→aB,B→cB,那么就符合3型文法。

从导图中就可以看到,正规式其实就是文法的另一种表达形式,A→xB,B→y就可以推导为正规式A→xy。

       语法推倒树

可以直接用一个文法和一张图来理解:

对于文法G=({S,A},{a,b},P,S),有S→aAS|a,A→SbA|SS|ba,把它拆分得到:S→aAS,S→a,A→SbA,A→SS,A→ba,它构造句型aabAa的推倒树为:

当然,从一个语法书得到句型,直接从左到右把叶子节点排列就行。

算符优先分析法

FIRSTVT和LASTVT

FIRSTVT(A):对于非终结符A,每个推导式的右侧有A→a…或A→Ca…,则a属于FIRSTVT集;

LASTVT(B):对于非终结符B,每个推导式的右侧有B→…b或B→…bC,则b属于LASTVT集。

优先关系

三种优先关系的运算为:

?关系:直接看产生式的右部,如果有A→…ab…或者A→…aBb… ,则有a?b;

?关系:当A→…aB…时,对每一b∈FIRSTVT(B),都有a?b;

?关系:当A→…Bb…时,对每一a∈FIRSTVT(B),都有a?b。

以上仅是对在视频中所学知识的总结,理解还不够具体,希望在后面看书和做题的过程中能够把知识吃透。

软考路上,我最棒!

时间: 2024-10-07 07:53:23

软考路上——编译原理的相关文章

软考之 编译原理

看完书后做了一套真题,都是眼泪呀,经过对试题的分析,发现弱点是编译原理和组成原理部分;因为这两块本来就是薄弱地带,再加上看书之后没有认真地总结过,就开始了真题,难免在做题时遇到困难,下面针对编译原理做一下总结,从一张思维导图开始: 从导图中可以看出,程序语言的部分都不是难点,分类和基本成分都是平时接触的,唯一需要去理解的就是可能平时不太去关注的,低级语言.高级语言.编译程序.解释程序的特点. 把中重点放在语言处理程序的部分,其中分为三部分: 1.汇编程序 其中需要明白的就是指令语句,伪指令语句和

软考(编译原理)

软件设计师考试编译原理部分,笔记记录.分享.2016-09-14

【软考路上】——总结篇——软考收获+复习建议

无论你现在正在学习什么知识,不要认为它不重要,因为在你今后的某个时刻一定会用上. 这句话,软考给了我很明确的验证.软考复习过程中,很多知识点都是在自考和自己的专业课中学习过的的.软考中的考点大致如下: 还记得琛琛在动员大会上为大家做的考点分析,分析到最后,原来这些知识点大部分都是我们学过的啊~~ 从考试的角度来说,结合自己经历的分享一点小建议: 1.J2SE学习:有人说软考阶段,J2SE学习不重要,如果这么想的话那就大错特错了,学习J2SE并不仅仅是学习java中那几个关键字,更主要的是更深.更

软考路上——用例图之include和extend

记得去年刚学UML的时候,写了一篇用例图的博客--<UML图-用例图>. 2011年5月的软考下午题,考到了用例图,突然感觉对用例图中的include和extend概念有些模糊,因此搬出来,与大家共同学习. 其实仔细思考后,这两者的概念还是很好理解的,顾名思义,include就是"包含"的意思,extend就是"扩展"的意思. include 虽然include是包含的意思,但笔者认为,include在用例图中,主要体现的是"抽象"的

软考路上——操作系统

计算机系统由硬件和软件两个部分组成,缺一不可,只有硬件.没有软件的计算机(裸机)就像一个没有灵魂.没有思想的植物人,根本无法运行:而硬件又是软件的载体,说白了,软件就是硬件的状态,软件就是由硬件的两种状态(高低电平)来体现的,所以没有硬件,软件也就不存在. 正巧这次自考和软考碰到一块了,索性一起总结一下操作系统的知识.画了满满的一张图,还是先宏观再微观地来看一下吧: 整体上把操作系统所涉及的知识点分为处理器.存储.文件和外围设备四部分: 处理器 处理器是整个操作系统的核心. 进程是程序的一次动态

软考之路(五)---编译原理 概念篇

从组成原理到编译原理,都是相互联系的,学习的知识都是在层层推进,顺利成章的,整个软考的所有的知识都可以从计算机的发展(组成原理)--->软件的开发(软件工程)--->软件的算法设计(数据结构)-->高级语言写的系统--->在计算机上识别(编译原理)--->各个系统的背后数据的支持--->(数据库)---->---网络知识的应用---->网络基础--,可以把整个所有的软考的课本给串起来,这些都是构成现在丰富世界的必不可少的条件. 当然由于机器语言由0.1组成,

软考-程序设计语言基础(编译原理)

首先声明一下,本系列软考的文章是针对软件设计师(中级)的. 在软件设计师考试中,关于程序设计语言这一章节,前面的知识很基础,像一些控制结构和数据类型的知识我想大家都非常熟练就没有总结在图里. 本章节的重点内容在于编译原理,编译原理指的是编译器是将汇编或高级计算机语言翻译为二进制机器语言代码的计算机程序.内容主要包括文法.正规式.有限自动机.语法推导树. 好了,不多说,还是老规矩用图来介绍. 重点看一下编译原理,展开前三项看看. 文法,是描述语法结构的形式规则: 正规式是描述程序语言单词的表达式,

软考基础知识—编译原理

编译原理和组成原理这一块,是我们比较头疼的.这一块接触的比较少,所以再理解起来的时候,就比较困难.但是所有的知识都是相联系的,万变不离其宗. 例如,学习组成原理的时候,我们联系我们以前的拆装机 ,学习编译原理的时候,我们联系我们学的java和.Net等编程语言等. 由于,计算机的硬件只能识别0和1,组成的机器指令程序,所以计算机编程语言由低级语言(机器语言.汇编语言)发展到了我们现在用的高级语言(java..net.VB.C++等) . 为什么我们说这一块的学习,要联系我们的java呢? Jav

软考——CPU构成与原理

一.基本组成: 运算器: 算术逻辑单元(ALU):负责数据处理,实现对数据的算术运算和逻辑运算,暂时存储计算结果等 累加寄存器(AC):当ALU执行算术或是逻辑运算的时候,为ALU提供一个工作区. 数据缓冲寄存器(DR):作为CPU和内存,外围设备之间数据的中转站.是CPU和内存,外围设备之间在操作速度上的缓冲 状态条件寄存器(PSW):保存算术指令和逻辑指令的结果,分为状态标志和控制标志. 控制器: 程序计数器PC:具有寄存信息和记数两种功能,又称为指令计数器. 指令寄存器IR:当CPU执行一