用例子来区分4种文法

编译原理中文法这部分内容很重要,软考中也涉及到了,刚开始这部分内容挺乱的,我连定义都看不懂就别说区分它们了,这是经过做题,从题中分析,再联系定义,再与同学们一起讨论终于把它们分清楚了,它们的关系用下面的图表示一下

1.文法

文法G定义为四元组(VN ,VT ,P,S)

  • VN :非终结符集,通常用大写字母表示
  • VT  : 终结符集,通常用小写字母表示
  • P    :产生式集合(规则集合)
  • S     :开始符号(识别符号)

提示:下面例子中的大写字母表示的是非终结符,而小写字母表示的是终结符。

2.0型文法(短语)

设G=(VN,VT,P,S),如果它的每个产生式α→β是这样一种结构:α∈(VN∪VT)*且至少含有一个非终结符,而β∈(VN∪VT)*,则G是一个0型文法。0型文法是这几类文法中,限制最少的一个,所以我们在试题中见到的,至少是0型文法。

0型文法相当于图灵机。

3.1型文法(上下文有关文法)

它是在0型文法的基础上每一个α→β,都有|β|>=|α|。这里的|β|表示的是β的长度。

1型文法相当于线性有界自动机。

例子:如有A->Ba则|β|=2,|α|=1符合1型文法要求。反之,如aA->a,则不符合1型文法。

特例:α→ε也满足1型文法。

4.2型文法(上下文无关文法)

2型文法是在1型文法的基础上,再满足:每一个α→β都有α是一个非终结符。如A->Ba,符合2型文法要求。

2型文法相当于下推自动机。

例子:Ab->Bab虽然符合1型文法要求,但不符合2型文法要求,因为其α=Ab,而Ab不是一个非终结符。A->Bab就对啦

5.3型文法(正规文法)

它是在2型文法的基础上满足:A→α|αB(右线性)或A→α|Bα(左线性)。

3型文法相当于有限状态自动机。

注意:3型文法中只能满足右线性,或只能满足左线性,不能两种同时都有

例子:A->a,A->aB,B->a,B->cB,则符合3型文法的要求。但如果推导为:A->ab,A->aB,B->a,B->cB或推导

为:A->a,A->Ba,B->a,B->cB则不符合3型方法的要求了。

相信大家通过我举得例子一定能理解这部分,能非常清楚的它们之间的区别

时间: 2024-10-27 11:26:36

用例子来区分4种文法的相关文章

自己的理解——编译原理中的四种文法

转载请注明来源http://www.cnblogs.com/qjkobe/p/5332612.html,谢谢. 编译原理学文法类型的时候,会出现乔姆斯基给出的四种文法类型,然而,这些概念太过于抽象了,对于初学者实在很难理解,所以,在这里,我给出一些我自己的理解,希望能对大家有所帮助. 在这之前,你必须对终结符和非终结符有所了解,简单来说,非终结符就是这个东西还能→别的东西(→的标准叫法是定义为),但是终结符就不能了,比如说,分子→原子,原子→夸克.夸克就不能再分了,所以不能由其他粒子定义.(随便

LOL人工智能可区分百万种恶意言论 玩家骂人行为得到纠正(转)

相信不少玩家在<英雄联盟> 中都会遇到骂人或者被骂的玩家,尤其是一些低龄玩家更是口无遮拦,这些玩家通常会给其他玩家的游戏体验带来消极的影响.作为游戏的开发商Riot Games来说,对抗游戏中的恶意言论是一个巨大的挑战,因为在全球拥有如此数量庞大的玩家群体,每个国家地区的玩家使用的骂人方式也各不一样,如何区分 这么多的玩家言行是非常困难的. 被称为“小学生”类型的玩家 多年以来,Riot Games尝试了各种各样的技术,包括人工智能技术,对玩家的言行进行监控和引导,目前已经取得了相当不错的效果

httpClient Post例子,Http 四种请求访问代码 HttpGet HttpPost HttpPut HttpDelete

httpclient post方法 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 //----1. HttpPost request = new HttpPost(url); // 先封装一个 JSON 对象 JSONObject param = new JSONObject(); param.put("name", "rarnu"); param.put("password", "123456"

一个简单的Java程序例子以及其几种注释

在说道主题前,先来啰嗦两句,o()︿︶)o 唉,不说两句心里就有个疙瘩,也许这就是所谓的强迫症吧,好了说说我想啰嗦的,其实也就是这样子的,关于Java开发工具箱的下载以及环境的配置.Java的下载进入到oracle官网下载即可(具体的步骤就不赘述了如今网络资源丰富你懂得),下载好之后然后开始安装,根据安装过程中的说明进行下一步直至完成即可,等等不要激动,还没完了,要开始配置Java的开发环境(说明下我这说的只是正对window操作系统的),其实也很简单,就是对着桌面上的”我的电脑”鼠标右键带点击

3年不辭職!記住,在石頭上也要坐3年!(但也要区分5种不值得留的公司,12种留不住人才的公司)

Q:萬一真如你書中所說,碰到很糟糕.只會抱怨公司的Mentor,身為新人應該怎麼處理? A:碰到這種人,可以把他們當作「反面教師」.想想看,他們為何抱怨公司?該怎麼做才能改善?用正面的思考去面對. Q:要是在新人訓練時,發現工作內容跟預期有落差,應該怎麼面對? A:這種情形很常見.新人訓練課程,多少會跟實際工作不同,所以請在被交付的工作上全力以赴! 根據史丹佛大學教授約翰?克倫伯茲(JohnD.Krumboltz)提出的知名理論「計劃性巧合理論」(Planned-HappenstanceTheo

如何区分3种变量重名的问题

原文地址:https://www.cnblogs.com/wulinmiao/p/12104120.html

编译原理中,形式语言里怎么区分文法类型

四种文法的判断非常简单,说到到,四种文法就是规定产生式的左和右边的字符的组成规则不同而已,其它的不能理解就不要去想了,你只要知道判断的时候就是以产生式的左边和右边符合的规则进行判断.下面解释一下如何根据产生式左边和右边的特征来进行判断. 首先,应该明确,四种文法,从0型到3型,其规则和约定越来越多,限制条件也越来越多,所以,我们判断时可以从最复杂的3型进行判断,依次向下判断,如果不符合3型的,那再看是不是2型的,不是2型的,再看是不是1型的,当然,对于作题作的熟的朋友,不用这么复杂,可以一眼直接

设计模式学习第一天:23种设计模式(全)

C#常见的设计模式 一.概要: 模式分为三种,设计模式.体系结构模式与惯用法.其中惯用法是一种语言紧密相关的模式,例如,定界加锁模式其实是一种惯用法. 在C#项目开发过程中,很多情况下您已经使用了某些模式,但或许您并不知道自己所使用的这种解决方案是一种已经被总结归纳的模式. 工厂.策略.桥接.模板方法.代理等等23种Gof经典模式是属于设计模式,设计模式的粒度相对较小,基本上用于提高模块内部的可扩展性和可维护性需求 三层.MVC.IoC/DI等属于体系结构模式,粒度比设计模式大,它是从项目的整体

四种表单验证方法的分析和比较

前言 任何可以交互的站点都有输入表单,只要有可能,就应该对用户输入的数据进行验证.无论服务器后端是什么样的系统,都不愿意把时间浪费在一些无效的信息上,必须对表单数据进行校验,若有不符合规定的表单输入,应及时返回并给出相应的提示信息.本文将列举四种不同原理的表单验证方法,并给出各方法在 PHP 服务器上的实现. 回页首 浏览器端验证 传统上,表单数据一般都通过浏览器端的 Javascript 验证.浏览器端的验证速度快,若有不符合要求的输入,响应信息快速的返回给用户.由于验证数据不需要提交给服务器