编译原理--文法分类和推导树

引言:上篇博客简单介绍了一下文法的基础知识,这篇博客重点介绍文法的分类和推导树。

 1956年,Noam Chomsky根据对产生式所施加限制的不同行,把分发分为了四种类型,并定义了相应的四类形式语言,如下:

文法类型

产生式限制

文法产生的语言

0型文法

α→β

其中α、β属于(VTUVN)*,且α长度不为0

0型语言

1型文法

α→β

其中α、β属于(VTUVN)*,且α的长度小于β的长度

1型语言/上下文有关语言

2型文法

A→β

A属于VN,β属于(VTUVN)*

2型语言/上下文无关语言

3型文法

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

其中A,B属于VN,α属于VT或空集

3型语言/正规语言


文法限制

    0型到3型文法,限制逐步增多,且呈包含关系。


0型文法

    0型文法也称为短语文法。一个很重要的结论是,0型文法的能力相当于图灵机。任何0型语言都是递归可枚举的;反之,递归可枚举集必定是一个0型语言。

    0型文法是限制最少的一个文法,产生式只需满足左部包含一个非终结符(大写)即可,例如:A0→A0 , A1→B。


1型文法

    1型文法又称为上下文有关文法,在0型文法的基础上,新加一条限制:产生式右部长度大于等于左部长度,例外情况是 S→ε,即推导出来的是空集。例如0A0→011000。


2型文法

    2型文法又称为上下文无关文法,在1型文法的基础上继续添加限制:产生式左部都是非终结符。例如:A→ab,AB→BAc。


3型文法

    3型文法是最严格的一种文法,也称之为正规文法,在2型文法的基础上继续添加限制:即其产生式的右部至多有两个符号,而且具有下面形式之一: A →a ,A →aB, 其中A,B∈VN ,a∈VT 。注意3型文法只能是左线性或右线性,不能二者同时有,左线性和右线性指的是产生式右部,非终结符所在位置是左还是右。

    注意不同的文法可能产生相同的语言。

推导树

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

    一棵语法树应具有以下特征:
    1.每个结点都有一个标记,此标记是V的一个符号:
    2.根的标记是S:
    3.若一结点n至少有一个它自己除外的子孙,并且有标记A,则A肯定在VN中;
    4.   加果结点n的直接子孙,从左到右的次序是结点n1,n2……nk,其标记分别是:A1,A2,…,Ak,那么A一>A1,A2…Ak,一定是p中的一个产生式。

    现有文法G=({a,b},{S,A},S,P),其中:S→aAS|a,A→SbA|SS|ba,构造aabAa相对应的推导树。
    由产生式可以得到VT={a,b},VN={S,A},分解出S→aAS|a,即S→aAS,S→a,A→SbA|SS|ba,即A→SbA,A→SS,A→ba,根据分解出的产生式,可以得到推导树:

        

正规式

        正规式又叫正则表达式,是一种表示正规级的工具,每个正规式对应一个正规文法(3型文法)。

        正规文法转为正规式

        

        规则1:由A→xB,B→y得到:A→xB→xy
        规则2:由A→xA|y,可知:A→xA,A→y,依次往下推A→xA→x^2A→x^3A……→x*A→x*y
        规则3:A→x,A→y简写成A=x|y

        例如语言L={a^mb^n|m>=0,n>=1}的正规式:因为*代表0到多个、m的值为大于等于0,所以a^m可以表示为a*,而n大于等于1,可以使用bb*来表示,所以语言L的正规式可以表示为a*bb*。


相关文章链接《编译原理--文法基础知识


  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值