目录

  • 推导和语法树
    • 推导
    • 语法树
  • 文法二义性

在证明文法的二义性之前,我们需要熟悉几个基本的概念。

推导和语法树

推导

这里的推导,简单的来说就是指根据给出的句型(句子),对文法进行推理变化最终得到句型(句子)的过程。
其中,最左(右)推导是在每次推导的过程中,将最左(右)部的非终结符替换成目标句型的一部分,直到完全替换成目标句型。

例:有文法G[S]:
S—>AB
A—>bB
B—>a|Sb
对于句型baSb,
最左推导为:S=>AB=>bBB=>baB=>baSb
最右推导为:S=>AB=>ASb=>bBSb=>baSb

语法树

对句型的推导过程给出一种图形表示,这种表示成为语法树,也成为推导树。
例:对于上述文法的句型的语法树之一为:

文法二义性

如果一个文法存在某个句子对应两棵不同的语法树,则说这个文法是二义性的。具体来说就是一个一个文法的某个句子能有两个不同的最右(左)推导。证明了这一点,就可以说该文法是具有二义性的。

例:设有文法G[S]:S—>iSeS| iS | i ,证明文法G[S]有二义性
证明:(首先我们得自己假设一个句子,构建该句子的语法树)
设句子为iiiei ,则:
最右推导一:S=>iS=>iiSeS=>iiSei=>iiiei

最右推导二:S=>iSeS=>iSei=>iiSei=>iiiei

因此,该文法存在一个句子有两个不同的最右推导,具有二义性。

参考资料:编译原理(第四版)

编译原理——证明文法的二义性(1)相关推荐

  1. 编译原理——证明文法具有二义性

    证明一个文法具有二义性我们需要掌握两个知识点. 1.语法分析树 定义很简单,就是把一个句型的推导写成树的形式,这种表示法就叫语法分析树,或者简称为语法树.大概是这个样子的 2.二义性 一个文法存在某个 ...

  2. 编译原理:文法及其二义性(判定及消除)

    (请先看置顶博文)https://blog.csdn.net/GenuineMonster/article/details/104495419 学编译原理时,会学到文法,老师在介绍完文法的相关定义后又 ...

  3. 编译原理判断文法的二义性

    下列文法是二义的吗?为什么? 文法G=({A,B,S},{a,b,c}P,S),其中P为S→Ac|aB,A→ab,B→bc 答:最右推导:S=>Ac =>abc S=>aB => ...

  4. 编译原理 LL1文法的判断和句子识别

    编译原理 LL1文法的判断和句子识别 LL1文法概述 点击查看百度百科 对文法G的句子进行确定的自顶向下语法分析的充分必要条件是,G的任意两个具有相同左部的 产生式A->α|β 满足下列条件: ...

  5. java实验文法报告_西安邮电大学编译原理LL文法分析器实验(java).doc

    西安邮电大学编译原理LL文法分析器实验(java) <编译原理>实验报告 题目: 语法分析器的制作 学生姓名: 班 级: 软件1202 学 号: 指导教师: 成 绩: 西安邮电大学计算机学 ...

  6. 编译原理实验 -- 文法分析

    编译原理实验 – 文法分析 终结符 和 非终结符 终结符 通常使用小写字母表示,例如 abcdef 非终结符 通常使用大写字母表示,例如 ABCDEF 产生式 通俗来说,就是由终结符和非终结符组合成的 ...

  7. 编译原理 语法分析树和二义性文法

    语法分析树是用来描述语法中句子结构的一种树,它能够动态表示一个句子推导的过程. 我们来看一个例子:由左边的文法规则可知,这是一个实现加法减法和乘法的算术表达式.从开始符号E开始,逐步推导,E => ...

  8. 编译原理:文法和语言总结与梳理

    1. 梳理第二章的内容,写一篇理解与总结. 一. 对程序设计语言的描述从语法.语义和语用三个因素考虑: 语法:对语言结构的定义: 语义:语言的含义: 语用:从使用的角度描述语言. 形式语言理论是编译的 ...

  9. 编译原理(文法、符号表)

    文法 在计算机科学中,文法是编译原理的基础,是描述一门程序设计语言和实现其编译器的方法(文法是用于描述语言的语法结构的形式规则). 1个文法 G 是一个四元组 G = (VN , VT , S, P) ...

最新文章

  1. 百度智能小程序开源联盟正式成立 小程序开发创业又一新风向标
  2. 学习excel的使用技巧一空格替换为0
  3. [html] 使用svg画出一个矩形
  4. 华为云开天aPaaS 上线,服务千万开发者,使能行业场景化创新
  5. 实验计算机控制器的实验结论,计算机毕业论文控制器实验报告.doc
  6. RankLib参数翻译
  7. AutoPlay Menu Builder入门教程
  8. 安卓开源电子书 阅读器_4个适用于Android的开源电子书阅读器
  9. #879273#基于django/neo4j的通讯录与QQ好友关系管理系统
  10. Remoting整理
  11. 用matlab实现“太阳-地球-月亮运行示意图”动画
  12. 百度身份证认证一直失败
  13. 学java,报班还是自学?
  14. SAS系统从入门到放弃?不能放弃,它是数据科学家必备技能
  15. python文本框事件_文本框事件
  16. “Hacker_R_US”因炸弹威胁和DDoS勒索被判8年监禁
  17. CMDN Club #19: Windows 8 Dev BootCamp - Win8开发知识与产品实践
  18. 神经网络(Neural Networks)简介
  19. 物联网是什么?物联网应用场景有哪些?物联网有什么好处?
  20. PDF 转换成JPG图

热门文章

  1. linux学习计划书
  2. 《Linux命令行与Shell脚本编程大全第2版.布卢姆》pdf
  3. 软件删不掉要计算机管理,控制面板卸载不了程序,小编教你如何处理控制面板中卸载不掉的软件...
  4. 使用Python查看sqlite3表结构
  5. 在制品和成本故障排除常用脚本
  6. 宇宙物演进程——外星人去哪了游戏代码(Python实现)
  7. [630]企查查api接口操作
  8. B站大佬用我的世界搞出卷积神经网络,LeCun转发!爆肝6个月,播放破百万
  9. android app如何后台自启动,商家骑手端允许后台运行APP设置方法(安卓)
  10. ue5 打出安卓运行包no google play store key错误问题