编译原理及编译程序构造-文法和语言的概念和表示

编译原理及编译程序构造

chap2 文法和语言的概念和表示

知识点

  • 语法树中带有尖括号的结点是语法成分,在形式语言中称为非终结符号;不带尖括号的是单词成分,终结符号;

  • 字母表中的元素称为符号;由字母表的符号组成的任何有穷序列称为符号串;

  • 符号串的运算:相等、长度、联结;集合的乘积 AB={xy|x∈A,y∈B} ;符号串的幂运算x0=ε;

    • 集合的幂运算
      • A0={ε}, A1=A, A2=AA;
    • 集合A的闭包A*和正闭包A+
      • A+=A1∪A2∪…∪An∪… , A*=A0∪A+
    • 文法 G=(Vn, Vt, P, Z)
      • Vn, 非终结符号集
      • Vt, 终结符号集,文法字汇表 V=Vn∪Vt
      • P, 产生式或规则的集合
      • Z, 开始符号(识别符号),Z∈Vn
  • BNF表示法 U::=x,U::=y缩写为U::=x|y

  • 直接推导在这里插入图片描述和间接推导;

  • 句型和句子(由终结符号组成);句子是句型;

  • 语言:文法G[Z]产生的所有句子的集合L(G[Z])

  • 规范推导/最右推导:符号串中有2个以上非终结符时,先推右边;在这里插入图片描述

    • 可由规范推导推出的句型是规范句型;
    • 由文法可以从结构上唯一确定语言,但由语言不能确定唯一的文法;
    • 等价文法:能产生相同的语言的文法;
  • 递归规则:在规则的右部具有和左部相同的非终结符号的规则;

    • 直接递归:文法中至少包含一条递归规则;
    • 间接递归
    • 左递归文法,不能自顶向下分析;
  • 短语:句型中某个非终结符能推出的符号串;

    • 给定文法G[Z], w=xuy∈V+是句型,若Z推导出xUy,且
      • U间接推导u,则u是句型w相对于U的短语;(U∈Vn, u∈V+, x,y∈V*)
      • U直接推导u,则u是句型w相对于U的简单短语;
    • 短语和简单短语都针对于某个句型、非终结符号;
    • 句柄:任一句型中最左边的简单短语叫句柄;一个句型可能有多个短语、简单短语,只有一个句柄;
  • 语法树

    • 句型w的语法树中,子树的叶节点连接得到的串u是相对于子树根节点U的句型w 的短语;若此子树高度为1,则叶节点连接的串u是相对于根节点U的句型w的简单短语;若在所有高度为1的子树中,此子树的最左叶节点在原符号串中的下标最小,则叶节点连接成的符号串u是句型w的句柄;
    • 子树与短语(练习2.4-5):句型中某些符号按照从左到右的顺序组成某棵子树的末端终点,由这些末端结点组成的符号串是相对于子树根的短语;
    • 规约:由树构造推导;最右推导与最左规约互为逆过程;
  • 文法二义性

    • 文法定义的某个句子有两棵不同的语法树(两个不同的最右/左推导 / 最左规约),则文法具有二义性;
    • 文法二义性不可判定,解决二义性问题:根据条件修改编译算法、根据条件修改文法;
  • 符号串分析

    • 自顶向下分析
    • 自底向上分析:每次直接归约总是归约当前句型的句柄
  • 对文法的实用限制

    • 避免有害规则:U::=U
    • 避免多余规则:一是推导中始终用不到的规则,二是一旦用了此规则就无法推出任何终结符号串;
    • 压缩文法:文法G中的每个非终结符号都不是无用符号,文法G为压缩过的或简化过的
  • 扩充的BNF表示和语法图

    • BNF表示法 U::=x,U::=y缩写为U::=x|y
      • BNF元符号:< ,>, |, ::=
      • 扩充的BNF元符号:< ,>, |, ::=,{,},[,],(,)
      • {}表示重复0到∞次,[]表示可选,()提取因子
    • 语法图
  • 文法和语言分类

    • 形式语言:用文法和自动机描述的没有语义的语言
    • 乔姆斯基把所有文法定义为四元组G=(Vn,Vt,P,Z)
    • 文法和语言分类:0型、1型、2型、3型
      • 0型:短语结构文法,左部符号序列至少一个非终结符右部可能为空,一个短语产生另一个短语;P: u::=v, u∈V+,v∈V*;L0可为图灵机接受;
      • 1型:上下文敏感,只有在x……y这样的上下文中才能把U改写为u;P:xUy::=xuy, U∈Vn,x、y、u∈V*;L1可为线性界限自动机接受;
      • 2型:上下文无关文法;P:U::=u,U∈Vn,u∈V*;与BNF表示等价(对1型文法限制x、y为空符号串得到2型文法);L2为下推自动机接受;
      • 3型:正则文法;左线性P:U::=T或U::=wT,U、w∈Vn,T∈Vt,(非终结符+终结符);L3可为有穷自动机接受;
      • L0包含L1包含L2包含L3,0型文法可以产生L0-L3,(但2型文法只能产生L2不能产生L1,待商榷);
      • 大部分程序设计语言的文法接近2型文法,算法语言中大部分与词法相关的文法属于3型文法;

    例题1:语法树、短语、简单短语、句柄

在这里插入图片描述
解答:
语法树:在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
算符优先语法分析器是一种自底向上的语法分析器,它使用了一种称为算符优先分析法的技术,用于分析输入的符号串是否符合给定文法的语法规则。下面是算符优先语法分析器的构造算法: 1. 定义文法的终结符号集合和非终结符号集合。 2. 定义操作符集合和它们的优先级关系。 3. 构造算符优先文法。 4. 构造算符优先关系表。 5. 读入待分析的符号串。 6. 初始化分析栈,将$#$和文法的起始符号入栈。 7. 从符号串中读入一个符号。 8. 比较栈顶符号和当前符号的优先级关系。 9. 如果栈顶符号的优先级高于或等于当前符号,则弹出栈顶符号进行归约。 10. 如果栈顶符号的优先级低于当前符号,则将当前符号入栈。 11. 如果栈顶符号为$#$并且当前符号也为$#$,则分析成功;否则,转到步骤8。 下面是算符优先文法构造规则: 1. 定义文法的起始符号。 2. 定义文法的产生式。 3. 为每个操作符定义一个优先级。 4. 为每个产生式定义一个优先级。 算符优先关系表是一个二维表,它记录了任意两个操作符之间的优先级关系。对于操作符$a$和$b$,如果$a$的优先级高于$b$,则在表中标记$a$在$b$的左边;如果$a$的优先级低于$b$,则在表中标记$a$在$b$的右边;如果$a$和$b$的优先级相等,则在表中标记$a$和$b$相等。 算符优先语法分析器可以用C或者C++等编程语言来实现,具体实现方式可以参考算法流程。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值