`
mixer_a
  • 浏览: 364121 次
社区版块
存档分类
最新评论

编译原理之文法二

阅读更多

四、著名语言学家NoamChomsky(乔姆斯基)根据对产生式所施加的限制的不同,把文法分成四种类型,即0型、1型、2型和3型。


文法类型

产生式的限制

文法产生的语言

0型文法

αβ

其中αβ∈(VTVN) *,∣α∣≠0

0型语言

1型文法

αβ

其中αβ∈(VTVN) *,∣α∣≤∣β

1型语言,即上下文有关语言

2型文法

Aβ

其中AVNβ∈(VTVN) *

2型语言,即上下文无关语言

3型文法

A→α|αB(右线性)A→α|Bα(左线性)

其中,ABVNαVT{ε}

3型语言,即正规语言,

又分为左线性语言和右线性语言

 

0型文法:α∈(VTVN) * 且至少含有一个非终结符,而β∈(VTVN) *

                       例:A→a,Aa→a,aA→a(左边至少有一个大写字母)


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

         例:A→a,A→ab,Aa→BAc(左边至少有一个大写字母,且左边的长度小于等于右边的长度)


2型文法:每一个Aβ都有A非终结符

        例:A→a,A→ab,AB→BAc(在1型文法的前提下,左边必须都是大写字母)


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型方法的要求了。

例子: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型文法。

 

如果所有终端结点都是与终结符关联的,每棵推导树的终端结点自左至右所构成的字符串应该是文法G的一个句型,则该字符串是文法G的一个句子,此时该推导树是完全推导树

 

如:文法G={a,b}{S,A},S,P,其中:SaAS|a,ASbA|SS|ba,句型aabAa相对应的构造树。

 

解释:

文法G={VTVNSP},即VT={a,b}VN={S,A}

SaAS|a,即SaASSa

ASbA|SS|ba,即ASbAASSAba

                                              

 

五、正规文法到正规式:


 

文法产生式

正规式

规则1

AxBBy

A=xy

规则2

AxA|y

A=x*y

规则3

Ax,Ay

A=x|y


 

规则1:由AxBBy,可知:AxBxy


规则2:由AxA|y,可知:AxA,Ay,依次往下推AxAx2Ax3A……x*Ax*y


规则3:Ax,Ay简写成A=x|y


六、关于对计算机的意义和作用:

    对于形式语言的一个分层,正规语言是最小的集合,上下文无关语言、上下文相关语言、计算语言是那些语言的扩充集合,这些语言它们可以被不同类型的设备识别,有限状态自动机,下推自动机,线性有界自动机,图灵机等等。

 

详细参加:http://zhidao.baidu.com/question/124218285.html(英文的)

 

七、小结:


    上面描述的这些文法是对一些式子做一些运算,α属于某个集合,β属于某个集合,αβ,需要满足的一些具体的条件,根据不同的条件又可以分为不同的类型,可以采用递推的方式,将这些式子接着往下推,即可得到正规文法到正规式。

分享到:
评论

相关推荐

    编译原理 压缩文法等价变换

    此程序采用了加标记法 输入一个程序 得到的是压缩后的结果

    编译原理实验二:压缩文法的等价变换

    实验报告“编译原理实验二:压缩文法的等价变换.doc”会详细记录实验步骤、结果分析和遇到的问题及解决方案,是理论与实践结合的重要参考资料。 总结来说,这个实验涵盖了编译原理中的重要概念——压缩文法的等价...

    编译原理实验 文法的输入输出

    本程序解决了编译原理中文法的输入输出问题,识别符号是固定的,其他文法顺序自定。

    编译原理 正规文法 代码

    正规文法则是编译原理中的一种形式语法,用于描述编程语言的结构。在这个压缩包中,包含了一个名为“正规文法”的文件夹,里面存放的是C++源代码,这些源代码很可能是一个编译器或解析器的一部分,用于处理正规文法...

    编译原理LL1文法实现

    在编程领域,编译原理是理解计算机语言处理过程的关键部分,特别是对于开发编译器或解释器的工程师来说。本文将深入探讨LL1文法及其实现。LL1文法是一种自左向右(Left-to-Right)扫描输入,并且只需要一个看前缀...

    编译原理2文法和形式语言

    编译原理2文法和形式语言 编译原理2文法和形式语言 编译原理2文法和形式语言 编译原理2文法和形式语言 编译原理2文法和形式语言

    编译原理课程设计LL1文法

    在这个"编译原理课程设计LL1文法"项目中,我们主要关注的是LL1分析法,这是一种用于解析程序语法的方法。 LL1分析法全称为“Left-to-right scanning, Leftmost derivation, First set, and One Lookahead”。这种...

    编译原理实验(文法的输入输出)

    根据给定的信息,本文将对“编译原理实验(文法的输入输出)”这一主题进行深入探讨。本文首先解析了题目中的核心概念——正则文法,并详细介绍了如何通过编程实现对该文法的分析与处理,特别是如何提取文法中的终结...

    编译原理:C语言文法

    《编译原理:C语言文法》 C语言文法是理解编程语言底层运作机制的关键,对于学习编译原理有着至关重要的作用。本文将详细解析C语言的语法结构,包括程序的基本构造、声明和定义、函数以及表达式等多个方面。 首先...

    编译原理之LL1文法 (C++)

    本资源是针对大学编译原理课程的一个实验项目,使用C++语言实现,对于学习和理解LL1文法有极大的帮助。 首先,让我们深入了解一下LL1文法的概念。"LL1"这个术语由三个部分组成:L代表自左至右(Left-to-Right),L...

    编译原理LL1文法MFC

    在"编译原理开发设计,采用LL1文法,界面MFC设计"的项目中,我们可以想象这样一个场景:开发者使用LL1文法来解析特定的编程语言,构建一个前端分析器,这个分析器可以有效地识别和处理源代码的结构。同时,利用MFC库...

    编译原理课程设计 LL1文法

    编译原理课程设计,LL1文法的实现。采用MFC。输入文法,分别求出每一个非终结符FIRST 集FOLLOW集和SELECT集,画出预测分析表,判定读入的文法是否是LL(1)文法,给定的任意符号串判定是否是文法中的句子,将分析过程...

    计算机编译原理(文法压缩)

    ### 计算机编译原理中的文法压缩技术解析 #### 一、引言 在计算机科学领域,特别是在编译器设计与实现过程中,文法压缩技术被广泛应用于提高编译效率、减少存储空间占用等方面。本文将通过分析一段关于文法压缩的...

    编译原理的文法和语言概述

    在编译原理中,文法和语言的概念是至关重要的,它们构成了高级编程语言的基础描述方式。形式语言理论为编译提供了坚实的理论支持,通过严谨的符号体系——文法,能够精确描述并理解高级语言。 首先,我们要理解文法...

    编译原理实验文法分析,文法压缩,预测分析

    在编译原理中,文法分析是至关重要的一个环节,它是编译器设计的核心部分,主要目的是将源程序转换成中间表示,以便后续的优化和目标代码生成。本实验涉及了文法分析的多个关键概念,包括文法压缩、预测分析和确定...

    编译原理(文法分析)

    在IT领域的编译原理中,文法分析是一个核心概念,它涉及到如何解析源代码,将其转换为计算机可以理解的形式。文法分析是编译器设计中的一个重要环节,它基于形式语言理论,通过文法规则来识别和分析源代码的结构。 ...

    编译原理算符优先文法分析器

    在编译原理中,算符优先文法是一种用于解析表达式的重要工具,它为解析程序设计提供了简洁且高效的实现方式。本项目是一个基于算符优先文法的分析器,使用Java语言编写,专注于解析含有算术和逻辑运算符的表达式。...

    编译原理课程设计 LL(1)文法判定

    《编译原理课程设计:LL(1)文法判定》 在计算机科学领域,编译原理是一门核心的课程,它研究如何将高级语言转换为机器可执行的指令。其中,LL(1)文法是一种重要的语法分析方法,广泛应用于编译器的设计。本次课程...

    编译原理实验 chomsky文法类型判断

    根据给定的文件信息,我们可以总结出以下关于“编译原理实验 Chomsky文法类型判断”的相关知识点。 ### 编译原理实验:Chomsky文法类型判断 #### 一、Chomsky文法类型简介 在形式语言理论中,Chomsky文法是一种...

Global site tag (gtag.js) - Google Analytics