目录

一、句型的分析

1、规范推导和规范归约

2、短语、简单短语和句柄

3、语法树

4、通过树来寻找短语、简单短语、句柄

二、文法的二义性

1、文法二义性的定义

2、文法二义性的消除

(1)定义规定或规则

(2)改写文法

三、例题

1、语言L={ambn ,m>=1,n>=1},试写出文法。

2、语言L={anbncm ,m>=1,n>=1},试写出文法。

3、语言L={anbbn ,n>=1},试写出文法。

4、语言L={anbmcmdn ,m>=1,n>=1},试写出文法。

5、语言L={ambn ,n>=m>=1},试写出文法。


一、句型的分析

1、规范推导和规范归约

最左(右)推导:在任一步推导v=>w中,都是对符号串v的最左(右)非终结符号进行替换,称最左(右)推导。

规范推导:即最右推导。

规范句型:由规范推导所得的句型。

规范归约:规范推导的逆过程,称规范归约或最左归约。

例:

G[<标识符>]
<标识符>→<字母>|<标识符><字母>
|<标识符><数字>
<字母>→a|b|...|z|A|...|Z
<数字>→0|1|2|...|9

规范推导
<标识符>
=><标识符> <字母>
=><标识符>y
=><标识符> <数字>y
=><标识符>4y
=><字母>4y
=>a4y

规范归约
a4y
<≠<字母>4y
<≠ <标识符>4y
<≠ <标识符><数字>y
<≠<标识符>y
<≠ <标识符><字母>
<≠ <标识符>

2、短语、简单短语和句柄

短语:文法G[Z], ω=xuy是一句型,x,y∈V*,如有 Z=*>xUy,且U=+>u, U∈Vn, u ∈V+,称u是一个相对于非终结符号U句型ω的短语。

简单短语:文法G[Z], ω=xuy是一句型,如有 Z=*>xUy,且U=>u, U∈Vn, u ∈V+,称u是一个相对于非终结符号U句型ω的简单短语。

句柄:句型最左边的简单短语为该句型的句柄,一个句型只有一个句柄。

说明:

  • 短语和简单短语必须是针对某一句型来说的,并且是该句型的一个字串。
  • 短语和简单短语必须是相对某一非终结符号的。
  • 两个条件缺一不可。
  • 一个句型可以有几个短语和简单短语。
  • 一个当前句型只有一个句柄(无二义性的文法)
  • 最左归约归约的当前句型的句柄。

例:

G[S]:
S→AB
A→Aa|bB
B→a|Sb

问题:给出句型baSb的短语、简单短语和句柄。

(1) S=>AB=>bBB =>baB=>baSb           且B=>Sb
(2) S=>AB =>ASb =>bBSb=>baSb        且B=>a
(3) S=>AB =+>baSb                               且A=+>ba

Sb是相对于B、句型baSb的短语且为简单短语,
a是相对于B、句型baSb的短语且为简单短语,
ba是相对A、句型baSb的短语 句柄为a。

3、语法树

语法树:一个句型或句子推导过程的图示法表示,形成一棵语法树。

根:开始符号。

子树:某一非终结符号 (子树的根)及其下面的分支。

叶:树的末端结点。

语法树的全部末端结点(自左向右)形成当前句型。

例:

G[S]:
S→AB
A→Aa|bB
B→a|Sb

最左推导        
S=>AB
=>bBB
=>baB
=>baSb

说明:

设文法G=(Vn,Vt,P,S),对G的任何句型都能构造与之关联的、满足下列条件的一课语法树。

  • 每个结点都有一个标记,此标记是V=Vn∪Vt∪ε中的一个符号。
  • 树根的标记是文法的开始符号S。
  • 若某一结点至少有一个分支结点,则该结点上的标记一定是非终结符号。
  • 若A的结点有k个分支结点,其分支结点的标记分别为A1,A2,...,Ak,则A→A1A2...Ak一定是G的一条规则。

4、通过树来寻找短语、简单短语、句柄

短语:子树的末端结点形成的符号串。

简单子树:只有一层分支的子树。

简单短语:简单子树的末端结点形成的符号串。

例:

句型baSb的语法树

共有三颗子树,

三个短语:ba ,a, Sb,baSb
简单短语: a, Sb
句柄: a

 1、如何找短语?

从树根S开始,找S的末端结点是:baSb(也就是句型本身)

然后往下找A的末端结点是:ba

B的末端结点是:Sb

再往下只有B有末端结点是:a

2、如何找简单短语?

先找到简单子树即只有一层分支的子树;

然后简单子树的末端结点形成的符号串即简单短语。

3、如何找句柄?

找左边的简单短语

结论:

  • 对于某个句型,每个推导,都有一个相应的语法树;但不同的推导也可能有相同的语法树。
  • 树的末端结点形成所要推导的句型。
  • 但某个句型也可能对应两棵不同的语法树,这就是文法的二义性问题

二、文法的二义性

1、文法二义性的定义

  • 如果文法G的某一个句子存在两棵或两棵以上不同的语法树,则称句子是二义性的。
  • 如果一文法含有二义性的句子,则称该文法是二义性的,否则该文法是无二义性的。

 说明:

  • 文法的二义性:某一句子有两个不同的最左(右)推导,或两个不同的最左(规范)归约。
  • 文法的二义性是不可判定的:不存在一种算法。
  • 证明文法的二义性只能试图找到某句子,该句子存在两颗不同的语法树或两个不同的最左(右)推导。
  • 特例:若一文法G既含左递归又含右递归,则G必是二义性文法.(是经验)

例:

证明文法G[S]:S→aSb|Sb|b为二义性文法。

证明:对于句子abbb存在两个不同的最左推导
最左推导1: S=>aSb=>aSbb=>abbb
最左推导2: S=>Sb=>aSbb=>abbb
因此,句子abbb是二义性的,由于文法存在二义性的句子,所以文法G[S]是二义性的。

2、文法二义性的消除

(1)定义规定或规则

例:

G1[E]:E→E+E|E*E|(E)|i

规定:四则运算法则,成无二义性文法。

G[S]: S →if B then S else S|if B then S

规定:else跟与它最近尚未匹配的then匹配,成无二义性文法

(2)改写文法

例:

G1[E]:E→E+E|E*E|(E)|i

二义性文法,无优先关系信息,不能直接使用。

G2[E]:
E→E+T|T
T→T*F|F
F→(E)|i

无二义性文法,含四则运算信息,语法分析时使用。

三、例题

1、语言L={ambn ,m>=1,n>=1},试写出文法。

G[S]:
S→AB
A→Aa|a
B→bB|b
或G[S]:
S→AB
A→aA|a
B→bB|b

2、语言L={anbncm ,m>=1,n>=1},试写出文法。

G[S]:
S→AB
A→aAb|ab
B→cB|c

3、语言L={anbbn ,n>=1},试写出文法。

G[S]:
S→aAb
A→aAb|b

或G[S]:
S→aSb|A
A→abb

4、语言L={anbmcmdn ,m>=1,n>=1},试写出文法。

G[S]:
S→aSd|aAd
A→bAc|bc

5、语言L={ambn ,n>=m>=1},试写出文法。

解: 改写为等价语言 L={ambmbk ,m>=1,k>=0}

G1[S]:S→AB
A→aAb|ab
B→bB|ε

G2[S]:
S→aAb
A→aAb|Ab|ε

或改写为等价语言 L={ambkbm ,m>=1,k>=0}

G3[S]:
S→aSb|aAb
A→bA|ε


【编译原理】-- 第二章(二)(短语、简单短语、句柄、文法二义性、语法树、例题)相关推荐

  1. 计算机科学与技术第二章ppt,计算机科学与技术-编译原理-第二章重点.ppt

    计算机科学与技术-编译原理-第二章重点.ppt * 自下而上分析法举例 例2解: a b b c d e (1) a b b c d e A A (2) a b b c d e A A (3) a b ...

  2. 【学习笔记】编译原理 第二章 文法和语言

    以下为参考课件与<编译技术>(张莉等著)的个人整理,若有错误欢迎指出 第二章 文法和语言 文章目录 第二章 文法和语言 一.文法的非形式讨论 二.文法的形式定义 1.文法的形式定义 2.推 ...

  3. 编译原理第二章课后习题,文法的二义性判断、语法树以及最左最右推导

    第二章 1.文法G=({A,B,S},{a,b,c}P,S),其中P为S→Ac|aB,A→ab,B→bc 写出L(G[S])的全部元素. 答:L(G[S])={abc} 2.文法G[N]为N→D|ND ...

  4. 编译原理 第二章 程序设计语言及其文法

    1.文法:G:S→xSx | y所识别的语言是(x^n y x^n ). 2.给定文法A→bA|ca,为该文法句子的是( bca). 3.设有文法G[S]:S→S1|S0|Sa|Sc|a|b|c,下列 ...

  5. 编译原理 | 第二章课后习题答案

    本文为编译原理(第三版)[清华大学出版社]部分课后答案 本答案均截取自网络,如有错误,望指正 编译原理(第三版)[清华大学出版社]

  6. [编译原理]-----第二章 语言及其文法

    文章目录 @[toc] 1. 基本概念 (1). 字母表 (2). 符号表上的运算 1). 字母表的乘积 2). 字母表上的幂运算 3). 字母表的正闭包 4). 字母表的闭包 (3). 串 (4). ...

  7. 编译原理——第二章-最左推导、最右推导以及语法树

    **** 题目 令文法为E->T|E+T|E-T T->F|T*F|T/F F->(E)|i (1)给出i+i*i的最左推导和最右推导 (2)给出i+i*i的语法树 解题过程 最左推 ...

  8. 北邮微型计算机原理及应用阶段二,北邮信通院微机原理第二章.ppt

    北邮信通院微机原理第二章 异常模式:系统模式外的其他5种特权模式,常用于处理中断或其它异常. 处理器模式可以通过软件来改变,也可以通过外部中断或处理器异常改变. 特权模式:除用户模式外的其它6种模式 ...

  9. 编译原理-第一章-引论

    编译原理 第一章 引论 1,概念简介 (1) 编译器:一个编译器就是一个程序,它可以阅读以某一种语言(源语言)编写的程序,并把该程序翻译成为一个等价的.用另一种语言(目标语言)编写的程序. 2,一个编 ...

  10. 编译原理笔记(二)之词法分析

    编译原理笔记(二)之词法分析 1. 词法分析中的若干问题 1.1 基本概念 1.2 记号的属性 1.3 词法分析器的作用与工作方式 1.4 输入缓冲区 2. 模式的形式化描述 2.1 字符串与语言 2 ...

最新文章

  1. 『TensorFlow』数据读取类_data.Dataset
  2. ECCV 2020 Oral | 可逆图像缩放:完美恢复降采样后的高清图片
  3. 类加载器的分类及关系
  4. Linux系统函数之IO函数
  5. CSS大小设置实例——盒子模型
  6. Domino+Qucikplace+Sametime构建企业办公平台图文攻略(四)
  7. laravel 定时任务
  8. 51822模拟ble广播-实践
  9. kindle阅读_如何在Kindle上清除最远的阅读页面
  10. oracle选择外键列,Oracle外键列上是否需要索引?
  11. 《C++ Primer 5th》笔记(3 / 19):字符串、向量、迭代器和数组
  12. centos-install-kong-cassandra
  13. OSPF——NSSA区域及完全NSSA区域(含配置命令)、第七类LSA类型 LSA-7详解
  14. arcgis server发布服务地图不显示_ArcGIS API for JS 导出地图,不限制尺寸
  15. 电脑护眼模式_电脑手机护眼小工具
  16. 智能优化算法:花授粉算法-附代码
  17. Hololens Vuforia 物体识别
  18. Vue 如何清除Form 表单验证二次弹出表单 清除验证上次提示信息
  19. eclipse neno 将jar包自动导入WEB-INF\lib
  20. 重新连接 到 时出错 Microsoft Windows Network:本地设备名已在使用中

热门文章

  1. 深圳有哪些大型公司(2014年数据)
  2. python画雷达图-python 雷达图
  3. 单片机检测信号通断通用电路(3.3V/5V直流信号,24V+直流信号,220V交流信号)
  4. 微信扫二维码调用外部浏览器页面
  5. unity接入quick sdk报错总结(Andriod第一版)
  6. 职高内蒙古计算机系高考最高分,内蒙古一考生高考668分,数学拿到满分,查分时还在淡定吃烧烤...
  7. 如何把Scilab当成MATLAB来用
  8. 互联网高级测试工程师至少具备的能力
  9. android eventlog监听,Android EventLog总结
  10. 华为智能汽车产业研究与投资机会分析