【软考路上】——编译原理

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

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

91.png


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


      文法


      基本元素


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


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


      在图中可以看到,一个文法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的推倒树为:

92.png

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


       算符优先分析法


       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。


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


       软考路上,你最棒!


相关文章
|
5月前
|
算法
技术感悟:编程之路上的点滴收获
【8月更文挑战第19天】在编程的世界里,我如同一名探险家,不断探索、发现和创造。从最初的迷茫到现在的游刃有余,我经历了许多挑战和困难,也收获了许多宝贵的经验和感悟。本文将分享我在编程之路上的点滴收获,希望能给同样热爱编程的你带来一些启示和鼓励。
48 0
使用感悟
一名普通大学生对阿里云服务器的使用和感受
109 0
使用感悟
|
数据挖掘
书单:分享我的读书笔记和最近阅读的几本好书
人最重要的是三个能力:①学习力-学习总结的能力;②输出力-逻辑思维和沟通表达的能力;③反思力-自省和修正的能力; 阅读、学习,让自己更加快乐,让自己有更多的可能性,让生命的意义有可能延展和突破。
825 2
书单:分享我的读书笔记和最近阅读的几本好书
|
JavaScript 前端开发 Java
一名大三学生的使用体会
讲述了我怎么步入编程这个大门的,还有就是对一些新手的建议,以及初次使用服务器后的体会,说实话,很激动!哈哈哈 最后就是希望能过审了。
一名大三学生的使用体会
|
设计模式 Java 数据库
【软考路上】——总结篇——软考收获+复习建议
无论你现在正在学习什么知识,不要认为它不重要,因为在你今后的某个时刻一定会用上。
【软考路上】——总结篇——软考收获+复习建议
|
弹性计算
感悟
上手困难 后面越来越顺
|
开发框架 安全 程序员
我编程,我快乐,献给所有的程序员
  最近读了《我编程,我快乐》,里面有一些观点给我了不少启发,特别是一些职业规划的方面的内容。   我编程,我快乐,献给所有的程序员   如果生活的大部分时间都被工作占据着,那么热爱工作就是热爱生活。 比起那些枯燥的简单任务,充满挑战、有驱动力、有回报的工作更能让你有动力在清晨从温暖的被窝里爬起来。工作做得好意味着你在充分发挥着才能。相反,如果工作做得不好,就证明你大部分时间都只能在懊悔,懊悔自己碌碌无为。
183 0
|
算法 Java
自学编程,看书还是视频?
自学编程,看书还是视频?
153 0