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

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

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

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++例程完整源码)
2684 0
|
存储 数据可视化 安全
一张图的七十二变——阿里云OSS图片处理实践
      小张是某视频网站的新入职的UED,日常工作就是创作各式各样的海报banner。踌躇满志的小张,上了三天班就蔫了。因为他在完成一张图的创作后,还需要考虑:• 同一张图会以不同的形式应用于网站各处:有时候需裁剪成不同形状,有时需要加水印,有时需转换格式....• 为了风格统一,不同的图需要保持样式统一:不同图片排列组成成一组,每组图片风格(
3091 0
|
机器学习/深度学习 人工智能 程序员
利用 AI 进行代码审查:提升软件质量的新途径
【10月更文挑战第18天】本文探讨了利用 AI 进行代码审查的优势和方法,包括提高审查效率、减少人为错误、确保一致性和标准化以及提供实时反馈。介绍了 SonarQube、DeepCode 和 GitHub Copilot 等工具,并分享了实施 AI 代码审查的最佳实践。通过结合 AI 和人工审查,可以显著提升软件质量。
|
开发者
哨兵2号分幅规则介绍及网格矢量下载
本文介绍哨兵2号(Sentinel-2)遥感影像数据的空间分幅规则,并提供其格网参考系(Military Grid Reference System,MGRS)的.kml格式文件、.shp格式矢量文件的下载方法~
1398 1
哨兵2号分幅规则介绍及网格矢量下载
|
vr&ar
编译原理----算符优先级的分析(自底向上)
编译原理----算符优先级的分析(自底向上)
486 4
|
算法
海明码详解
本文详细介绍了海明码(Hamming Code)的概念、原理和应用,包括信息位与校验位的关系、校验位的计算方法、错误检测与纠正过程,并通过实例展示了如何使用海明码进行编码,突出了海明码在提高数据传输可靠性方面的重要性。
2304 0
海明码详解
|
弹性计算 Kubernetes 容器
k8s基于flannel VXLAN模式网络无法跨主机ping通其他节点上pod
基于云ECS搭建的k8s,通常网络问题需要从网络配置,路由表、iptables 规则 以及FDB配置去判断问题,另外需要注意的是阿里云有一层企业安全组配置会对网络有影响,遇到配置问题都正常需要从安全组的角度去考虑了
8725 0
k8s基于flannel VXLAN模式网络无法跨主机ping通其他节点上pod
|
安全 数据安全/隐私保护 开发者
为了管理公司公共应用账号,差点手搓一个浏览器
任何一个公司都存在或多或少的公共账号,或者叫做共享账号,定义就是一个系统,有限个账号,多个人使用。原因多种多样,比如常见的一些自媒体号(知乎号、抖音号、百家号等等)用于企业日常的宣传经营,这些平台企业只能注册一个账号,而这一个账号老板要使用、多个运营人员也要使用。又比如招聘网站(BOSS 直聘、拉钩、猎聘等等)的管理员账号,往往也是使用公司特有的电话号码或者公共邮箱注册,然后给多个人共享使用。
483 1
为了管理公司公共应用账号,差点手搓一个浏览器
|
设计模式 监控 架构师
如何在项目中考虑非功能需求
软件非功能需求包括性能、可靠性、安全性、易用性、可维护性、可移植性、兼容性、可重用性、可扩展性和可观察性。质量属性分为开发期和运行期,如易理解性、可扩展性、可测试性等是开发期质量,性能、安全性、易用性等是运行期质量。评估方法有ATAM(架构评估技术)、ADMEMS矩阵方法、SAAM(软件架构分析法)和CBAM(成本效益分析法)。ATAM包括建立评估小组、获取架构信息、风险承担者观点和形成最终报告四个阶段。
957 0
|
XML 开发框架 Java
《Spring6核心源码解析》已完结,涵盖IOC容器、AOP切面、AOT预编译、SpringMVC,面试杠杠的!
全网首个全面解析Spring6核心源码的专栏,涵盖:IOC容器、AOP切面、声明式事务、AOT预编译和SpringMVC,让你从根本上彻底掌握Spring6核心技术。
859 1
《Spring6核心源码解析》已完结,涵盖IOC容器、AOP切面、AOT预编译、SpringMVC,面试杠杠的!