当前位置: 首页 > news >正文

【程序语言与编译】语法分析:自上而下推导(最左/最右)

适合读者:软考中级备考同学
阅读时间:3分钟
内容:自上而下推导、最左推导与最右推导的定义、示例、区别、例题


1. 什么是自上而下推导?

语法分析分为两种策略:自上而下自下而上
自上而下推导是从文法的开始符号出发,反复用产生式的右部替换左部的非终结符,逐步展开,最终得到输入符号串。它直观地模拟了从语法树根节点向下构造叶节点的过程。

软考中常考查最左推导最右推导两种方式,二者在最左/最右替换策略上不同,但最终得到的语法树相同。


2. 最左推导(Leftmost Derivation)

定义:在推导的每一步,都选择当前句型中的最左边的非终结符进行替换。

特点

  • 符合多数递归下降解析器的工作方式
  • 易于手工推导

示例
文法如下:

E → E + T | T T → T * F | F F → ( E ) | id

输入串id + id * id,最左推导过程:

E ⇒ E + T (选择 E → E + T,替换最左非终结符 E) ⇒ T + T (替换最左的 E 为 T) ⇒ F + T (替换最左的 T 为 F) ⇒ id + T (替换最左的 F 为 id) ⇒ id + T * F (替换最左的 T 为 T * F) ⇒ id + F * F (替换最左的 T 为 F) ⇒ id + id * F (替换最左的 F 为 id) ⇒ id + id * id (替换最左的 F 为 id)

每一步都是替换当前句型中最左边的非终结符。


3. 最右推导(Rightmost Derivation)

定义:在推导的每一步,都选择当前句型中的最右边的非终结符进行替换。

特点

  • 与自下而上归约(规范归约)是对应关系
  • 在编译原理中,最右推导也称为规范推导

示例:同样文法,输入串id + id * id,最右推导过程:

E ⇒ E + T ⇒ E + T * F ⇒ E + T * id ⇒ E + F * id ⇒ E + id * id ⇒ T + id * id ⇒ F + id * id ⇒ id + id * id

每一步都是替换当前句型中最右边的非终结符。


4. 最左推导 vs 最右推导

对比项最左推导最右推导
替换位置最左边的非终结符最右边的非终结符
对应分析方式自上而下解析(递归下降)自下而上归约(LR分析)
语法树相同相同
推导序列长度相同相同
是否为规范推导否(但通常不称为规范)是(规范推导)

注意:对于同一文法同一输入串,最左推导和最右推导产生的语法树(结构)是一样的,只是构造顺序不同。


5. 经典例题

题目1:给定文法:

S → aS | b

用最左推导产生字符串aaab

S ⇒ aS (最左 S) ⇒ aaS ⇒ aaaS ⇒ aaab (S → b)

答案:S ⇒ aS ⇒ aaS ⇒ aaaS ⇒ aaab


题目2:对于文法S → AB, A → a, B → b,写出最左推导和最右推导生成ab

  • 最左推导:S ⇒ AB ⇒ aB ⇒ ab
  • 最右推导:S ⇒ AB ⇒ Ab ⇒ ab

答案:略


题目3(判断):最左推导和最右推导对于同一个输入串最终得到的语法树一定相同。( )
答案:正确(推导顺序不同,但树的结构相同)


6. 记忆口诀

自上而下开始符,反复展开成句子。
最左替换最左符,最右替换最右符。
语法树形都一样,分析顺序有差异。


7. 给备考同学的一句话

自上而下推导是语法分析的基础概念。软考中常以选择题或简答题形式考查:

  • 区分最左推导和最右推导(看替换的是最左还是最右非终结符)
  • 给定文法,手动进行最左或最右推导
  • 理解推导与语法树的关系

记住:最左推导是“从左到右”展开,最右推导是“从右到左”展开。掌握基本示例,考试时按规则逐步替换即可。


🔔 **本专栏日更2篇,点击头像 → 专栏《软考中级高频考点》订

#软考中级 #软件设计师 #语法分析 #自上而下推导 #最左推导 #最右推导

http://www.zskr.cn/news/1517041.html

相关文章:

  • 7个可测量的Prompt工程底层技巧:从指令解析到熵值控制
  • 2026总部看全局、区域看趋势、门店看自己:服装全渠道BI看板的三层架构
  • 如何快速搭建实时弹幕数据采集系统:跨平台直播监控终极方案
  • 2026申请香港身份怎么挑靠谱中介?3 家中介真实测评对比来了
  • Rust实战:轻量级IBC侧链验证器开发
  • 2026潮州市雅典+天梭手表专业回收,26年精选回收店铺排行榜推荐 - 莘州文化
  • 2026年磁致伸缩位移/液位传感器厂家:专业高精度磁致伸缩沉降检测仪器与传感器供应商 - 品牌发掘
  • 15-17岁还能长高吗?青少年二次追高窗口期,分年龄段追高指南
  • 2026天门市萧邦+劳力士手表专业回收,26年精选回收店铺排行榜推荐 - 莘州文化
  • 深度解析BetterNCM安装器:Rust构建的高效插件管理技术架构
  • 2026河源市伯爵+沛纳海手表专业回收,26年精选回收店铺排行榜推荐 - 莘州文化
  • ai剪辑视频哪个最好用,2026年智能剪辑工作流,5款对比横评
  • Windows控制台打印UTF-8出现乱码解决
  • YOLOv8 8.2.0离线开发套件:带nano/small/medium三档预训练模型、多平台Docker构建文件及5个开箱即用示例Notebook
  • Windows下可直接运行的Modbus RTU主站工具,支持读写保持寄存器
  • 2026景德镇市雅典+天梭手表专业回收,26年精选回收店铺排行榜推荐 - 谊识预商贸
  • FPGA实战(08):Verilog 设计:带多级分频输出的 0~99 循环计数器(tops 模块)
  • Codex 客户端对接 Agnes-2.0-Flash免费多模态大模型 AI 编程实现指南
  • buildroot Makefile include *.mk 的玄机.
  • 3步快速解决线缆依赖问题:NoCableLauncher的完整使用指南
  • 遇到一个ORA-01017错误,解决方法
  • 主流 MP3 音频转换工具大全,免费软件适配音频剪辑日常使用 - 软件工具教程方法
  • 微信私域机器人开发:iPad协议API实战指南
  • YaeAchievement:3分钟搞定原神成就数据导出,告别手动记录的烦恼
  • 考研数学积分题总丢分?掌握这3个对称区间和三角函数的‘秒杀’性质,计算速度翻倍
  • 嵌入式设备日志自动备份:用Dropbear+SCP免密传输,5分钟搞定脚本配置
  • YimMenu:GTA5终极防护与增强菜单完全指南
  • Java 标准 JAXP(Java API for XML Processing),JDK 内置,无需额外引入第三方依赖
  • netstat命令和ss命令详解
  • PythonVista:突破系统限制,为老旧Windows重新定义Python兼容性边界