下列文法是二义的吗?为什么?

文法G=({A,B,S},{a,b,c}P,S),其中P为S→Ac|aB,A→ab,B→bc

答:最右推导:S=>Ac =>abc

S=>aB =>abc,

即存在两个不同的最右推导,所以该文法是二义的。

或者:

对输入字符串abc,能够造出如下两颗不同的语法树,所以该文法是二义的。

⭐⭐⭐那么问题来啦,怎么判断文法是不是具有二义性捏?

其实很简单,就看这个文法的某个句子如果有两个不同的最右(最左)推导,那这个文法就有二义性。

⭐⭐⭐又或者说可以用如下方法判断非二义性,

1.求出文法所有非终结符号的First集,

2.求出文法所有非终结符号的Follow集,

3.进行两步判断:

(1)非终结符号A的任何两个候选式的first集合不相交

(2)f若A的某个候选式可以推导出ε,则其它候选式的First集与Follow(A)不相交。

满足以上两个条件的文法一定是非二义性的。

编译原理判断文法的二义性相关推荐

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

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

  2. 编译原理——证明文法的二义性(1)

    目录 推导和语法树 推导 语法树 文法二义性 在证明文法的二义性之前,我们需要熟悉几个基本的概念. 推导和语法树 推导 这里的推导,简单的来说就是指根据给出的句型(句子),对文法进行推理变化最终得到句 ...

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

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

  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. nix与linux的区别,linux – Nix / OS架构概述?
  2. 重建包含快照的vmdk描述文件。
  3. 编译 pycaffe时报错:fatal error: numpy/arrayobject.h没有那个文件或目录
  4. Ubuntu mysql连接错误10060/10061的方法
  5. python程序设计上机实践第三章答案_20192419 实验三《Python程序设计》实验报告
  6. cp 过程中目录突然挂了_怎么解决管材激光切割机切管过程中出现的过烧及挂渣...
  7. androidStudio使用卡顿
  8. MSP借助五招让中小企业签约云计算服务
  9. 七年级计算机工作计划,七年级下学期信息技术教学计划(最新整理)
  10. php 标点符号,php怎么去除标点符号
  11. html开源flash视频播放器代码下载
  12. Python爬虫实战之爬取链家广州房价_02把小爬虫变大
  13. 怎样更改itunes备份位置_iTunes备份路径怎么改?教你无脑修改iPhone备份文件路径...
  14. 软件缺陷(定义+表现形式+优先级+信息+产生原因),看完这篇文章就懂了
  15. 试图加载不正确的程序。(异常来自HRESULT:0x8007000B)的处理方式
  16. VC6连接Oracle10g
  17. java 网易的yeah邮箱_网易163邮箱、yeah邮箱横向对比
  18. android日历编程,Android日历控件PickTime代码实例
  19. matlab四叶玫瑰线,多种语言画玫瑰,总有一款适合你表白
  20. 倍福--NC轴无法使能分析

热门文章

  1. Vivado的软件使用--PL 的LED 点亮实验
  2. PHP 开发 APP 接口--静态缓存篇
  3. java布局器嵌套_java swing布局嵌套
  4. Cancer Cell ChIP-seq助力揭示BATF缺失可增加CAR-T细胞抗肿瘤活性的研究
  5. DSLR Video Tips: Gadgets Gear 数码单反相机视频提示:小工具和装备 Lynda课程中文字幕
  6. 2020年会计职称考试教材《初级会计实务》内容修订
  7. (私人收藏)船撞桥头自然沉~~
  8. Vue整合到Spring Boot
  9. 美国西北大学计算机学院教授,美国西北大学化学院院长Teri W. Odom教授访问玛丽女王工程学院...
  10. 用 Python 制作 NFT 区块链作品(上)