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

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

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

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。


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


       软考路上,你最棒!


相关文章
|
设计模式 算法 安全
一文带你通俗理解23种软件设计模式(推荐收藏,适合小白学习,附带C++例程完整源码)
一文带你通俗理解23种软件设计模式(推荐收藏,适合小白学习,附带C++例程完整源码)
1749 0
|
存储 索引
【软考学习15】索引文件结构、直接索引和间接索引
【软考学习15】索引文件结构、直接索引和间接索引
594 0
|
7月前
|
人工智能 自然语言处理 PyTorch
InspireMusic:阿里通义实验室开源的音乐生成模型,支持文本或音频生成多种风格的音乐
阿里通义实验室开源的音乐生成技术,支持通过简单描述快速生成多种风格的高质量音乐作品。
1174 4
|
自然语言处理 编译器 C语言
【软件设计师-从小白到大牛】上午题基础篇:第七章 程序设计语言与语言处理程序基础(1)
语法分析阶段可以发现程序中的所有语法错误;编译正确的程序必然不包含语法错误;“除数为0”为动态语义错误,动态语义错误只有运行时才能发现。
334 0
【软件设计师-从小白到大牛】上午题基础篇:第七章 程序设计语言与语言处理程序基础(1)
|
11月前
|
算法
海明码详解
本文详细介绍了海明码(Hamming Code)的概念、原理和应用,包括信息位与校验位的关系、校验位的计算方法、错误检测与纠正过程,并通过实例展示了如何使用海明码进行编码,突出了海明码在提高数据传输可靠性方面的重要性。
911 0
海明码详解
|
11月前
|
机器学习/深度学习 人工智能 程序员
利用 AI 进行代码审查:提升软件质量的新途径
【10月更文挑战第18天】本文探讨了利用 AI 进行代码审查的优势和方法,包括提高审查效率、减少人为错误、确保一致性和标准化以及提供实时反馈。介绍了 SonarQube、DeepCode 和 GitHub Copilot 等工具,并分享了实施 AI 代码审查的最佳实践。通过结合 AI 和人工审查,可以显著提升软件质量。
|
JavaScript 安全 API
Vue 3 Composition API 与 Options API:全面比较两者的区别和优缺点
Vue 3 Composition API 与 Options API:全面比较两者的区别和优缺点
|
监控 安全 网络安全
防火墙详细讲解
防火墙是一种结合硬件和软件的隔离技术,用于保护内部网络免受外部非法用户的攻击。它由服务访问规则、验证工具、包过滤和应用网关组成,所有进出网络的数据流需经过防火墙过滤,只有符合规则的才能通过。防火墙通常包括包过滤路由器(在网络层工作)和应用级网关(在应用层通过代理服务控制)。其主要目的是确保内部资源的安全并建立安全边界。
649 3
|
缓存 负载均衡 网络协议
【亮剑】一次完整的HTTP请求的重要性和详细过程
【4月更文挑战第30天】本文介绍了HTTP请求的重要性和详细过程。首先,DNS解析将域名转换为IP地址,通过递归和迭代查询找到目标服务器。接着,TCP三次握手建立连接。然后,客户端发送HTTP请求,服务器处理请求并返回响应。最后,理解这个过程有助于优化网站性能,如使用DNS缓存、HTTP/2、Keep-Alive、CDN和负载均衡等实践建议。
526 0
|
XML Java 语音技术
Android App开发在线语音识别处理中实现中文转拼音(Pinyin4j库)功能(超详细 附源码和演示)
Android App开发在线语音识别处理中实现中文转拼音(Pinyin4j库)功能(超详细 附源码和演示)
428 0