编译原理第三周

文法的等价性

G(N),N->... 第一个产生式左边的符号往往是起始符号

借助有限个产生式和符号表述整个语言

V*={V_N^*,V_T^*}不等于V_N^*∪V_T^*

推导

直接推导?+推导?使用若干次产生式的使用

*推导:在+推导基础上加上0次可以推导的情况

最右推导?先把最右边的完成,再扩展,完成最右边的,最后完成整个推导。可以写成N-+->109,表示N通过多步推导形成109。也称规范推导。同理有最左推导。

来个例子:

直接规约,多步规约。

推导的逆过程称为规约。

证明某一句话是某个文法的句子,可以用规约也可以用推导。

N是句型:因为*包含0次使用产生式。句型:终结符非终结符,句子:终结符!

D09(句型)没有最左推导(就是一直左推导,不存在左右混合推导),不是所有的句型都有最左推导和最右推导,所有句子都有最左、最右推导。

L(G)=L(G'),则G和G'为等价文法。

PL0

以常量说明部分为例:const 定义,定义,...,定义;

这个定义是:id=整数,通过下面变量说明可推出id就是给变量/常量起的名字。

所以const 常量名=整数,常量名=整数……;

用终结符替换,最终可推导出赋值语句,以下图为例:

注意:PL0变量var只能是整型。

赋值语句文法G(S):

注意终结符集和非终结符集!

递归

B->Bb|b 左递归,记住原本的在左边(如B)就是左递归。

文法具有等价性。文法的递归性决定了其能够定义无限句子。

左递归文法的缺点,不能用自顶向下的方法进行语法分析,会产生死循环

文法的分类

语言是文法所有句子的集合

 上下文有关,一定要是上下文,少一边都不行。

Wt/tW,都只能是一个字符,一共就一个或者两个字符。而且只有左线性和右线性,没有左右线性。必须至少保证非终结符能够推出终结符。

所有的计算机高级语言都可以使用二型文法和三型文法定义。

产生式左边只有一个非终结符号:上下文无关文法,否则考虑上下文有关文法。

正则文法用于词法分析,上下文无关文法用于语法分析。

语句是由终结符集合构成,由终结符集合构成的不一定是语句:i=)i+i)就不是赋值语句。

赋值语句的递归性在于表达式E。

在计算机科学中,文法(Grammars)按照其表达能力和形式约束可以被分类为0型、1型、2型和3型。这些文法类别基本上是层次结构,也就是说,高层次的文法有更强的表达能力但也有更少的约束。

  • 0型文法(无约束文法):没有任何限制。
  • 1型文法(上下文有关文法):产生式的左侧可以是多个符号,且长度可以与右侧不同。
  • 2型文法(上下文无关文法):产生式左侧必须是单一的非终结符。
  • 3型文法(正则文法):产生式的形式更为受限。

每一种文法都对应一个或多个“语言”(也就是一组字符串的集合),这些语言由该文法的产生式生成。与这些文法类型相对应,也有一组语言类别,分别是:L0、L1、L2和L3。L0是最强大的,包含所有由0型文法生成的语言;L1包含所有由1型文法生成的语言,依此类推。

  1. 0型文法可以产生L0、L1、L2、L3:0型文法的表达能力是最强的,它可以生成任何其他类型文法所能生成的语言。

  2. 但2型文法只能产生L2、L3,不能产生L1:这意味着2型文法(上下文无关文法)不能生成所有1型文法(上下文有关文法)所能生成的语言。它的表达能力相对较弱。

这样的分类在理解编程语言、解析器和编译器设计等多个方面是非常有用的。一般而言,越高级的文法越有表达能力,但也越难以解析;而越低级的文法则相对容易解析,但其表达能力有限。

语法树与二义性文法

不能在有限步骤内证明文法不具有二义性!

 通过规范推导或规范归约所得到的句型称为规范句型

若对于一个文法的某一句子存在两棵不同的语法树则该文法是二义性文法,否则是无二义性文法。

文法的二义性:能够使用多种语法树描述其语法规则:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Joy T

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值