编译原理之文法的分类和判别

本文介绍了Chomsky文法的四种分类,包括0型、1型、2型和3型(右线性/左线性/正规文法),并提供了文法判别的方法和技巧。通过具体例子解释了如何根据文法规则确定其类型,例如L1、L2和L3语言的文法构造和类型识别。
1.文法的分类

Chomsky文法分类将文法分为四种,逐渐对产生式施加限制形成一个层次:

  • 0型:G = (VT , VN , S , P)
    规则形式:α → β ,α,β∈(VT , VN) *,α ≠ ε
    推导:γαδ ⇒ γβδ

  • 1型(上下文有关):规则α → β 有|α|≤|β|
    规则形式:ξAη→ξγη,A ∈ VN,ξ , γ , η ∈(VT , VN) * , γ ≠ ε

  • 2型(上下文无关)
    规则形式:A → β , A∈VN , β ∈(VT , VN) *

  • 3型(右线性/左线性/正规文法)
    A → aB或者A → a(右线性)
    A → Ba或者A → a(左线性)
    a∈ VT∪{ε}

这里写图片描述

2.文法的判别
判别小技巧:

从上图我们可以看出,四种文法中,从0型到3型,其规则和约定越来越多,限制条件也越来越多,所以,我们可以从最复杂的3型进行判断,如果不符合3型的,那再看是不是2型的,不是2型的,再看是不是1型的,依次向下判断,最后答案取其最高的符合规则。

  • 3型文法遵循的规范是:
  1. 判别式的左边必须只有一个字符,且必须是非终结符;
  2. 判别式的右边最多只能有两个字符,且当判别式的右边有两个字符时必须有一个为终结符而另一个为非终结符。当判别式的右边只有一个字符时,此字符必须为终结符;
  3. 对于3型文法中的所有产生式,其右边有两个字符的产生式,这些产生式右边两个字符中终结符和非终结符的相对位置一定要固定,如果一个产生式右边的两个字符的排列是:终结符+非终结符,那么所有产生式右边只要有两个字符的,都必须前面是终结符而后面是非终结符,这是右线性文法。要么就全是:非终结符+终结符的形式,称为左线性文法。
  • 2型文法遵循的规范是:
  1. 与3型文法的第一点相同,即:左边必须有且仅有一个非终结符。
  2. 2型文法所有产生式的右边可以含有若干个终结符和非终结符(只要是有限的就行,没有个数限制)。
  • 1型文法遵循的规范是:
  1. 1型文法所有产生式左边可以含有一个、两个或两个以上的字符,但其中必须至少有一个非终结符。
  2. 与2型文法第二点相同。
  • 0型文法遵循的规范是:
    我们能描述出来的,都属于这个类型,即0型。

最后答案取其最高的符合规则。

抛出一个小栗子

这里写图片描述

  1. 给出下面语言的相应文法,并指明其类型
    L1 = {anbn | n ≥ 1}

    解析:
    S → a…ab…b 两边分别加上a和b得到:S → a(a…ab…b)b 即S → aSb ;
    又因为 n ≥ 1,得出S → ab,所以,文法为S → aSb|ab,为2型上下文无关文法

  2. 给出下面语言的相应文法,并指明其类型
    L2 = {anbn ci | n ≥ 1,i ≥ 0}

    解析:
    S → a…ab…bc…c , 记A → a…ab…b , B→ c…c
    S → AB
    由A → a(a…ab…b)b 得 A → aAb
    又因为 n ≥ 1,得出A → ab
    A → aAb | ab
    由B → c(c…c)可得B→ cB
    又因为 i ≥ 0,得出B → ε
    B→ cB | ε
    所以,文法为:
    S → AB
    A → aAb | ab
    B→ cB | ε
    2型上下文无关文法

  3. 给出下面语言的相应文法,并指明其类型
    L3 = {ai bj ck | i , j , k ≥ 1}

    此处思考三分钟哦~

    这里写图片描述
    解析:
    S → a…ab…bc…c ,得S → a(a…ab…bc…c)
    S → aS
    由i ≥ 1可得 S → a(b…bc…c),记A→ b…bc…c 得 S → aA
    又因为 A→ b(b…bc…c),得出A → bA
    又因为 j ≥ 1,得出 A→ b(c…c),记B → c…c 得 A → bB
    由B → c(c…c)可得B→ cB
    有因为k ≥ 1,可得B→ c
    所以,文法为:
    S → aS | aA
    A → bA | bB
    B→ cB | c
    3型右线性文法
    (下面两种文法其实是等效的哦,画出他们对应的自动机就可以看出来)
    在这里插入图片描述

**PS:**还有不清楚的小伙伴们可以留言哦,我尽量讲的更细一点~喜欢就点赞和关注哦o( ̄▽ ̄)ブ

评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值