关于3型文法

3型文法也叫正规文法,它对应于有限状态自动机。它是在2型文法的基础上满足:A→α|αB(右线性)或A→α|Bα(左线性)。

上面的话是大多数教材中的解释,十分了抽象,其中最不理解的是下面一句话

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

分析这句话,什么是左线性,什么是右线性

我觉得,左右线性其实说的就是在推导式的右边中,非终结符所位于的位置,例如aB,B(非终结符)位于a的右侧,所以是右线性

之后我在网上找到了这样的解释:
如有: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型方法的要求了。具体的说,例子A->ab,A->aB,B->a,B->cB中的A->ab不符合3型文法的定义,如果把后面的ab,改成“一个非终结符+一个终结符”的形式(即为aB)就对了。例子A->a,A->Ba,B->a,B->cB中如果把B->cB改为B->Bc的形式就对了,因为A→α|αB(右线性)和A→α|Bα(左线性)两套规则不能同时出现在一个语法中,只能完全满足其中的一个,才能算3型文法。

很多情况下我们是看不懂这样的解释的,我也是在研究了一会后,才明白,所以我就归结了一下,什么是3型文法

1. 首先他要是2型文法

2. 推导式的右边必须是一个终结符或者是一个终结符加上一个非终结符

3. 在一串推导式中,只能有一套规则,就是说,只能全部都是左线性,或者是全部都是右线性

上面解释中一共列举了3个例子:

A->a,A->aB,B->a,B->cB      这个例子是正确的,他符合上面的三条

A->ab,A->aB,B->a,B->cB     这个例子中A->ab不符合上面的第2条,所以不是3型文法

A->a,A->Ba,B->a,B->cB      A->Ba,是左线性的,但是B->cB是右线性的,违反第3条所以,也不是3型文法

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

时间: 2024-12-28 21:09:02

关于3型文法的相关文章

什么是0型文法,1型文法,2型文法,3型文法?

转载自:心动音符(http://493420337.iteye.com/blog/593981) ----------------------------------------------------------------------------------------------------------------------------------------------------------------- 乔姆斯基把方法分成四种类型,即0型.1型.2型和3型.这几种文法类型的概念一定

形式语言基本

要点: nlp 困难 形式语言 介绍:   形式语言理论主要研究的是内部结构模式这类语言的纯粹的语法领域.形式语言理论 是从语言学衍生而来,作为一种理解自然语言的句法规律.在计算机科学中,形式语 言通常作为定义编程语言和语法的基础,是正式版本的自然语言的子集.在计算复杂 性理论中,决策问题通常定义为形式语言,复杂类被定义为形式语言的集合,它能被 具有有限计算能力的机器所解析.在逻辑和数学基础中,形式语言是用来表示公理系 统的语法. 图论基础 : 图, 连通,树, 字符串的基本操作(连接,笛卡尔积

形式语言之语言和语法树

1,句型,句子和语言: 从文法的开始符号出发,利用其中的产生式逐步推导出待分析的符号串,如果能推导出这个符号串则表明此符号串是该文法的一个句型或句子.否则便不是.句型与句子的区别在于符号串是否全部由终结符构成,如果经过多步推导出的符号串全部由终结符构成就是句子,否则便是句型(句子一定是句型,句型不一定是句子).文法的所有的句子的集合就是该文法所对应的语言. 2,描述形式语言的两种方法 1,枚举(描述有穷的语言集合) 2,文法(描述无穷的语言集合) 3,文法和语言的关系:文法是用来生成(定义)语言

如何学习离散数学和在计算机科学中应用

引言 离散数学的定义及其在各学科领域的重要作用.离散数学(Discrete mathematics)是研究离散量的结构及其相互关系的数学学科,是现代数学的一个重要分支.它在各学科领域,特别在计算机科学与技术领域有着广泛的应用,同时离散数学也是计算机专业的许多专业课程,如程序设计语言.数据结构.操作系统.编译技术.人工智能.数据库.算法设计与分析.理论计算机科学基础等必不可少的先行课程.通过离散数学的学习,不但可以掌握处理离散结构的描述工具和方法,为后续课程的学习创造条件,而且可以提高抽象思维和严

用antlr4来实现《按编译原理的思路设计的一个计算器》中的计算器

上次在公司内部讲<词法分析--使用正则文法>是一次失败的尝试--上午有十几个人在场,下午就只来了四个听众. 本来我还在构思如何来讲"语法分析"的知识呢,但现在看来已不太可能. 这个课程没有预想中的受欢迎,其原因可能是: 1.课程内容相对复杂,听众知识背景与基础差异比较大. 2.授课技巧不够,不能把复杂的知识简单化的呈现给基础稍差一点的人. 针对这两个可能的原因,我要尝试做出以下调整: 1.使用antlr来实现词法和语法的部分. 2.暂时把"编译"过程改为

软考之 编译原理

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

编译原理之形式语言文法分类

高级程序设计语言的三个基本因素: 语法:描述语言成分的构成规则(包括词法规则和语法规则) 语义:描述语法成分的含义 语用:描述语法成分的使用方法 形式语言理论(formal language theory)是用数学方法研究自然语言(如英语)和人工语言(如程序设计语言)的产生方式.一般性质和规则的理论.形式语言是模拟这些语言的一类数学语言,它采用数学符号,按照严格的语法规则构成.从广义上说,形式语言是符号取自某个字母表的字符串的集合.如同自然语言具有语法规则一样,形式语言也是由形式文法生成的.一个

必要的软件架构师——编译原理&amp;#183;语法

最近软测试.我观看进程的视频! 发现里面有很多内容已经在自我不错的接触过程.而占80%比例! 但其中的一部分.我很奇怪的一部分.研究,在这里,将我研究的内容整理分享给大家! 编译原理: 首先,我第一眼看到他的时候.认为这是个特神奇的科学知识! 里面应该有非常多难点.可是.我的愿望达到了,前两次看书都有点云里雾里的感觉.可是随着接触的深入,视频,书籍,网络三方面的共同攻击下,这个神奇的东西,变得不神奇了. 编程语言的发展.我们只是多介绍.想了解的,能够去看这个站点"编程语言发展历史".我

软件测试技术(四)——闰年判断器+ int.Parse错误如何解决

目标程序 本次所测试的目标程序是一个闰年判断器,我们知道,一般情况下年份被4整除就可以了,但是如果遇到百年的时候还需要被400整除,于是有了如下的逻辑判断: bool isRunNian = false; if (year > 0) { if ((year % 100 == 0 && year % 400 == 0) || (year % 100 != 0 && year % 4 == 0)) { isRunNian = true; } } 测试方法介绍—Syntax