乔姆斯基把方法分成四种类型,即0型、1型、2型和3型。这几种文法类型的概念一定要掌握,是一个非常重要的考点。对于这几种文法,一般书上都只有简单的概念介绍,比较抽象,所以很多学员都没有真正理解。下面我将把概念结合例题进行讲解。
0型文法
设G=(VN,VT,P,S),如果它的每个产生式α→β是这样一种结构:α∈(VN∪VT)*且至少含有一个非终结符,而β∈(VN∪VT)*,则G是一个0型文法。0型文法也称短语文法。一个非常重要的理论结果是:0型文法的能力相当于图灵机(Turing)。或者说,任何0型文语言都是递归可枚举的,反之,递归可枚举集必定是一个0型语言。0型文法是这几类文法中,限制最少的一个,所以我们在试题中见到的,至少是0型文法。
1型文法
1型文法也叫上下文有关文法,此文法对应于线性有界自动机。它是在0型文法的基础上每一个α→β,都有|β|>=|α|。这里的|β|表示的是β的长度。
注意:虽然要求|β|>=|α|,但有一特例:α→ε也满足1型文法。
如有A->Ba则|β|=2,|α|=1符合1型文法要求。反之,如aA->a,则不符合1型文法。
2型文法
2型文法也叫上下文无关文法,它对应于下推自动机。2型文法是在1型文法的基础上,再满足:每一个α→β都有α是非终结符。如A->Ba,符合2型文法要求。
如Ab->Bab虽然符合1型文法要求,但不符合2型文法要求,因为其α=Ab,而Ab不是一个非终结符。
3型文法
3型文法也叫正规文法,它对应于有限状态自动机。它是在2型文法的基础上满足:A→α|αB(右线性)或A→α|Bα(左线性)。
如有: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型文法。
注意:上面例子中的大写字母表示的是非终结符,而小写字母表示的是终结符。
引用
Ps:
看了上面的文法的解释,终于有点明白了什么是文法.在这里记下了.但我想不出这个文法有啥用啊,不知道大家有没有懂的指点一二.
虽然问题有点BT,但本小姐打算今年过软设没着得搞会它啊, .
分享到:
相关推荐
在理论计算机科学中,乔姆斯基谱系(Chomsky Hierarchy)是一系列递归地定义的形式语言的分类体系,其中包括0型、1型、2型和3型文法。其中1型文法也被称为上下文相关文法(Context-Sensitive Grammar, CSG),它是一...
LL(1)型文法分析是编译器设计领域中的一个重要概念,主要涉及解析技术。在编译原理中,理解并能运用LL(1)文法分析是构建编译器的关键步骤之一。本文将深入探讨LL(1)文法的定义、特性、构造方法以及在编译器设计中的...
Chomsky 文法类型主要分为四类:0 型文法、1 型文法、2 型文法和 3 型文法。 1. 0 型文法(短语文法) 0 型文法也称为无限制文法,具有以下形式:u::=v,其中 u∈V+,v∈V*。这种文法没有任何限制,因此称为无限制...
它按照生成语言的能力将文法分为四种类型:0型文法(也称作无限制文法)、1型文法(上下文有关文法)、2型文法(上下文无关文法)和3型文法(正则文法)。每种类型的文法有着不同的特性和应用范围。 1. **0型文法...
3) 整理文法的结构,判断该文法的文法类型,是否为0型,1型,2型或3型文法,并输出判断结果; 4) 在计算机屏幕或者文本框中输出文法,文法输出按照一个非终结符号一行,开始符号引出的产生式写在第一行,同一个非...
1. 实验内容 1、 让计算机接受一个文法,示例如(仅供参考): G[S] 为: ...2、 编程实现对上述文法是否是LL(1)文法的判断,是则给出肯定回答,否则给出否定回答。 3、判别是否是LL(1)文法 。。。。。。
2. **LL(1)文法**:一种特殊的上下文无关文法,满足以下条件:对于任何非终结符A的所有产生式A → α | β,都要求FIRST(α) ∩ FIRST(β) = Ø,且如果某个产生式可以推导出空串ε,则要求FOLLOW(A) ∩ FIRST(β)...
1. LR(0)文法的定义和特点 LR(0)文法是一种特殊的上下文无关文法,具有识别活前缀的能力。LR(0)文法的定义是指满足一定条件的文法,能够被 LR(0)分析器正确地识别和分析。 2. LR(0)文法的判断原理 LR(0...
在编译原理中,LL1文法是一种重要的形式文法,它对于编译器的前端设计,特别是词法分析和语法分析阶段具有重要意义。LL1文法是指自左至右(Left-to-Right)扫描输入串,并使用一个左most衍生(Leftmost Derivation)...
**3型文法**,又称为正规文法或者右线性文法,是形式语言理论中的一个重要概念,属于乔姆斯基分层中的第三层。3型文法的语法规则形式为:`A → taB` 或 `A → ta`,其中 `A` 和 `B` 是非终结符,`t` 是终结符,而 `...
3. **递归和左递归检测**:对可能的递归和左递归进行特殊处理,这些通常是判断0型或1型文法的关键。 4. **结果输出**:根据分析结果,输出文法所属的乔姆斯基文法类型。 通过运行这个程序,我们可以对给定的文法...
如果存在冲突,文法不是LR(0)文法,需要修改文法或使用更复杂的分析技术(如LALR(1))。 9. **C++源代码**:在提供的压缩包中,可能包含一个C++实现的LR(0)分析器。这个实现通常会涉及构造LR(0)项目集、生成DFA、...
1. **3型文法**:给出的示例展示了如何识别和处理3型文法。 2. **2型文法**:示例包括不含左递归的情况、含左递归但可消除的情况,以及含左递归但不可消除的情况。 3. **1型文法**:给出了一个简单的1型文法例子。 4...
(1)对输入文法,它能判断是否为LL(1)文法,若是,则转(2);否则报错并终止; (2)输入已知文法,由程序自动生成它的LL(1)分析表; (3)对于给定的输入串,应能判断识别该串是否为给定文法的句型。 2.分析 ...
2. **消除左递归**:如果文法存在左递归,需要通过转换将其消除,以满足LL(1)文法的要求。 3. **消除公共前缀**:对于具有相同预测符号但不同产生式的非终结符,需要消除公共前缀,避免冲突。 4. **构建预测分析表**...
3. **2型文法判断**:在确认文法至少是1型文法的基础上,进一步检查每个产生式的左侧是否仅包含一个非终结符。如果满足,则文法至少是2型文法。 4. **3型文法判断**:在确认文法至少是2型文法的基础上,检查每个产生...
在编译原理中,文法是描述编程语言结构的重要工具,而LL(1)文法是一种重要的解析技术,常用于自顶向下的语法分析。这个实验主要关注的是如何将一个非LL(1)文法转化为LL(1)文法,以便进行有效的编译过程。 LL(1)文法...
LL(1) 语法分析是一种常用的语法分析方法,它可以根据某一文法对任意输入的符号串进行分析,以判断它是否为文法的一个句子。本实验报告的目的是设计和实现一个 LL(1) 语法分析程序,以便加深对预测分析 LL(1) 分析法...