1.定义

  • 最左推导:任何一步α => β都是对阿尔法中的最左非终结符进行替换
  • 左右推导:任何一步α => β都是对阿尔法中的最右非终结符进行替换

2.抛出一个小栗子

文法G(E)为:

  • E -> T | E + T |E - T
  • T -> F | T * F | T / F
  • F -> (E) | i

给出i + i * i 的最左推导和最右推导。

思考三分钟再往下看哦~

解析:
最左推导
从文法的起始符号开始:
E -> E + T
-> T + T
-> F + T
-> i + T
-> i + T * F
-> i + F * F
-> i + i * F
-> i + i * i
最右推导
从文法的开始符号开始:
E -> E + T
-> E + T * F
-> E + T * i
-> E + F * i
-> E + i * i
-> T + i * i
-> F + i * i
-> i + i * i

3. 小练习

文法G(E)为:

  • E -> T | E + T |E - T
  • T -> F | T * F | T / F
  • F -> (E) | i

给出i * (i + i)的最左推导和最右推导。

此处思考三分钟。。

解析:
最左推导
从文法的起始符号开始:
E -> T
-> T * F
-> F * F
-> i * F
-> i * (E)
-> i * (E + T)
-> i * (T +T)
-> i * (F + T)
-> i * (i + T)
-> i * (i + F)
-> i * (i + i)
最右推导
从文法的开始符号开始:
E -> T
-> T * F
-> T * (E)
-> T * (E + T)
-> T * (E + F)
-> T * (E + i)
-> T * (T + i)
-> T * (F + i)
-> T * (i + i)
-> F * (i + i)
-> i * (i + 1)

编译原理之最左推导和最右推导相关推荐

  1. 编译原理 最左推导和最右推导

    G[E]: E→T|E+T|E-T T→F|T*F|T/F F→F^P|P P→c|id|(E) 现有句子id+id*(id-id),请完成下列要求: (1)分别写出每个句子的最左推导和最右推导: ( ...

  2. 编译原理求最左推导和最右推导例题

    一.[问题描述] 令文法G[N]为 G[N]:N→D IND D→0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 (1) G[N]的语言L(G)是什么? (2)给出句子01 ...

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

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

  4. 最左推导和最右推导,语法树,二义性文法

    ※最左推导和最右推导 (每一步替换最左边的非终结符/每一步替换最右边的非终结符),最右推导称为规范推导.最右推导对应于最左规约(规范规约) 例: 文法: S--->AB A--->a|t ...

  5. 最左推导、最右推导及其语法树构建

    最左推导 定义 在最左推导中,总是选择每个句型的最左非终结符号. [句型] 如果S=>a,其中S是文法G的开始符号,我们可以称a是G的一个句型,当a是一个终结符时,此时这个句型可以称为句子. [ ...

  6. 什么是上下文无关文法、最左推导和最右推导—编译原理

    系列文章戳这里

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

    第二章 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 ...

  8. 编译原理练习题(第二章)

    编译原理练习题 写一个文法,使其语言是奇数的集合,且每个奇数不以0开头. 下面文法生成的语言是什么?G1:S->AB A->aA| e B->bc|bBc G[S]为:S->a ...

  9. 编译原理什么是移进规约冲突_编译原理复习题

    可以微信扫码观看 河南城建 <编译原理>复习题丨杨海振整理丨20150521 一.单项选择题 1.构造编译程序应掌握   .D a. 源程序                         ...

最新文章

  1. 总结403到504的常用问题
  2. error 图片,加载错误-》实用笔记
  3. java输出1-100之间的全部素数
  4. C++设计模式之Adapter
  5. laravel 提交Request 请求后会莫名多出一个s参数,导致数据库报错问题的解决方法
  6. 【Java】兔子问题
  7. 如何使用 Java8 实现观察者模式?(上)
  8. Flutter之Flutter-Redux框架源码解析
  9. 重置SQLSERVER表的自增列,让自增列重新计数【转】
  10. 【MCM-2017】2017年数学建模美赛题目原文及翻译-B (个人思路)
  11. Python面试常见算法题集锦
  12. 网页特效——花间飞舞的蝴蝶
  13. 1044: 不及格率 C语言
  14. 一步教你轻松实现--Word方括号打勾☑
  15. JavaScript键盘鼠标事件处理
  16. MFC 中PreTranslateMessage(MSG* pMsg)截获按钮和编辑框的消息进行预处理
  17. Oracle数据库查询表中记录为空,Empty result set fetched
  18. 嵌入式开发模拟红外测距仪---UDP通信实现无线装置
  19. npm node升级到最新版本
  20. 二、RPA机器人开发基础

热门文章

  1. Management Information
  2. 为什么大家都买卡地亚蒂芙尼_你知道为什么卡地亚比蒂芙尼贵!
  3. 最适合养老的5个国家
  4. 23岁的国民社交软件QQ,还会带来什么新惊喜?
  5. 大明想跟你聊聊Solr6.x
  6. cubase elements12中文免费版 详细安装流程
  7. 使用JQ遍历xml中指定节点下的所有节点名称
  8. 14.4.6 创建组合索引
  9. hivesql行转列和列转行
  10. 软考高级-系统架构师-第五章软件架构设计