在这里插入图片描述


第一步:写出规范推导(最右)序列

规范推导就是最右推导。我们的目标是从起始符号 E 出发,通过每步替换最右边的非终结符,最终得到句型 R(P+i)

文法 G[E]:

  • E ::= RP | P
  • P ::= (E) | i
  • R ::= RP+ | RP* | P+ | P*

推导过程:

  1. E => RP

    • 我们选择 E → RP 开始,因为目标句型以 R 开头。现在句型是 RP,最右非终结符是 P
  2. => R(E)

    • 目标句型 R(P+i) 包含括号 ()。唯一能产生括号的规则是 P → (E)。我们用它替换最右的 P。现在句型是 R(E),最右(也是唯一)的非终结符是 E
  3. => R(RP)

    • 现在需要推导括号里的内容 P+i。它由两部分组成。我们先用 E → RP 展开。现在句型是 R(RP),最右非终结符是 P
  4. => R(Ri)

    • 为了得到 P+ii 部分,我们用规则 P → i 替换最右的 P。现在句型是 R(Ri),最右非终-结符是 R
  5. => R(P+i)

    • 最后,为了得到 P+ 部分,我们用规则 R → P+ 替换最右的 R。推导完成。

规范推导序列为:
E => RP => R(E) => R(RP) => R(Ri) => R(P+i)


第二步:快速查找短语、简单短语和句柄 (核心技巧)

方法:利用语法树结构。
根据上面的推导过程,我们可以画出这个句型对应的语法树:

      E/ \R   P/|\( E )/ \R   P/ \  |P   + i

现在,我们可以用这棵树来快速找出所有答案:

1. 找出所有短语

规则:语法树中,任何一个以非终结符为根的子树,其所有叶子节点从左到右组成的字符串,都是一个短语。

我们从下往上、从小到大找所有子树:

  • 以最下面的 P 为根的子树,叶子是 i短语是 i
  • R 为根的子树,叶子是 P+短语是 P+
  • 以括号内的 E 为根的子树,叶子是 P, +, i短语是 P+i
  • 以最右边的 P 为根的子树,叶子是 (, P, +, i, )短语是 (P+i)
  • 以最顶层的 E 为根的子树(整棵树),叶子是 R, (, P, +, i, )短语是 R(P+i)

所有短语列表: i, P+, P+i, (P+i), R(P+i)

2. 找出所有简单短语

规则:简单短语是一个直接由某条产生式一步推导而来的短语。在语法树上,任何一个以非终结符为根的子树,并且叶子节点和当前非终结符为父子关系(一步得来的),其所有叶子节点从左到右组成的字符串,都是一个短语。

我们检查刚才找出的短语:

  • i: 是由 P → i 一步得来的吗?是的。所以 i 是简单短语
  • P+: 是由 R → P+ 一步得来的吗?是的。所以 P+ 是简单短语
  • P+i: 是由 E → P+i 一步得来的吗?不是,E 先变成 RP,经过多步才得到。所以它不是简单短语。
  • (P+i): 是由 P → (P+i) 一步得来的吗?不是,P 是先变成 (E)。所以它不是简单短-语。
  • R(P+i): 不是一步得来的。

所有简单短语列表: i, P+

3. 找出句柄

规则:句柄是该句型的最左边的简单短语

  1. 看我们的句型 R(P+i)
  2. 看我们的简单短语列表 i, P+
  3. 从左到右扫描句型 R(P+i),看哪个简单短语先出现。
  4. 我们先遇到的是 P+

句柄是: P+


最终答案总结

  • 规范推导序列: E => RP => R(E) => R(RP) => R(Ri) => R(P+i)
  • 所有短语: i, P+, P+i, (P+i), R(P+i)
  • 所有简单短语: i, P+
  • 句柄: P+

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/922210.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/922210.shtml
英文地址,请注明出处:http://en.pswp.cn/news/922210.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

智能学习辅助系统-部门管理开发

文章目录准备工作工程搭建增删改查查询部门删除部门新增部门修改部门查询回显修改数据日志技术准备工作 需求:部门管理的查询、新增、修改、删除 使用REST风格的URL: GET : 查询POST :新增PUT : 修改DELETE &#x…

【图解】idea中快速查找maven冲突

现象 今天启动项目时,总是以下报错,并退出SLF4J: Class path contains multiple SLF4J bindings. SLF4J: Found binding in [jar:file:/F:/.m2/repository/org/apache/logging/log4j/log4j-slf4j-impl/2.13.3/log4j-slf4j-impl-2.13.3.jar!/org/slf4j/im…

LightGBM、XGBoost和CatBoost自定义损失函数和评估指标

LightGBM、XGBoost和CatBoost自定义损失函数和评估指标函数(缩放误差)数学原理损失函数定义梯度计算评估指标LightGBM实现自定义损失函数自定义评估指标使用方式XGBoost实现自定义损失函数自定义评估指标使用方式CatBoost实现自定义损失函数自定义评估指…

2025-09-08升级问题记录: 升级SDK从Android11到Android12

将 Android 工程的 targetSdkVersion 从 30 (Android 11)升级到 31(Android 12)需要关注一些重要的行为变更和适配点。 主要适配要点: 适配类别关键变更点适配紧迫性简要说明组件导出属性声明了 Intent Filter 的组件…

利用OpenCV实现模板与多个对象匹配

代码实现:import cv2 import numpy as npimg_rgb cv2.imread(mobanpipei.jpg) img_gray cv2.cvtColor(img_rgb, cv2.COLOR_BGR2GRAY) template cv2.imread(jianto.jpg, flags0) h, w template.shape[:2]# 读取图像# # 顺时针旋转 90 度(k1&#xff0…

OS28.【Linux】自制简单的Shell的修bug记录

目录 1.问题代码 2.排查 前期检查 查找是谁修改了environ[0] 使用gdb下断点 查看后续的影响 分析出问题的split_commandline函数 3.反思 4.正确代码 5.结论 6.除此之外...... ★提示: 此bug非常隐蔽,不仔细分析很难查出问题,非常锻炼调试能力! 1.问题代码 #includ…

Debian 系统上安装与配置 MediaMTX

🎯 在 Debian 系统上安装与配置 MediaMTX(原 rtsp-simple-server):打造轻量级流媒体服务器 作者:远在太平洋 环境:Debian 10/11/12 | Ubuntu 可参考 关键词:MediaMTX、rtsp-simple-server、RTSP…

分布式专题——10.4 ShardingSphere-Proxy服务端分库分表

1 为什么要有服务端分库分表? ShardingSphere-Proxy 是 ShardingSphere 提供的服务端分库分表工具,定位是“透明化的数据库代理”。 它模拟 MySQL 或 PostgreSQL 的数据库服务,应用程序(Application)只需像访问单个数据…

Mysql相关的面试题1

什么是聚集索引(聚簇索引)?什么是二级索引(非聚簇索引)? 聚集索引就是叶子节点关联行数据的索引,二级索引就是叶子节点关联主键的索引,聚集索引必须有且仅有一个,二级索引…

电涌保护器:为现代生活筑起一道隐形防雷网

何为电涌保护器?电涌保护器(Surge Protective Device,简称SPD)主要用于控制信号系统,保护电气电子设备信号线路免受雷电电磁脉冲、感应过电压、操作过电压的影响,广泛应用于工控、消防、安防监控、交通、电…

【uniapp微信小程序】扫普通链接二维码打开小程序

需求:用户A保存自己的邀请码海报,用户B扫描该普通连接二维码,打开微信小程序,并且携带用户A的邀请码信息,用户B登录时,跟用户A关联,成为用户A的下级。 tips:保存海报到手机相册可以参…

LeetCode 378 - 有序矩阵中第 K 小的元素

文章目录摘要描述题解答案题解代码分析代码解析示例测试及结果输出结果时间复杂度空间复杂度总结摘要 在开发中,我们经常遇到需要处理大规模有序数据的场景,比如数据库分页、排行榜查询、或者处理排序过的矩阵。LeetCode 第 378 题“有序矩阵中第 K 小的…

【Lua】Windows 下编写 C 扩展模块:VS 编译与 Lua 调用全流程

▒ 目录 ▒🛫 导读需求环境1️⃣ 核心原理:Windows下Lua与C的交互逻辑2️⃣ Windows下编写步骤:以mymath模块为例2.1 步骤1:准备Windows开发环境方式1:官网下载Lua源码并编译(可控性高)方式2&am…

Python快速入门专业版(二十九):函数返回值:多返回值、None与函数嵌套调用

目录引一、多返回值:一次返回多个结果的优雅方式1. 多返回值的本质:隐式封装为元组示例1:返回多个值的函数及接收方式2. 多返回值的接收技巧技巧1:用下划线_忽略不需要的返回值技巧2:用*接收剩余值(Python …

python使用pip安装的包与卸载

1:基本卸载命令 # 卸载单个包 pip uninstall package_name# 示例:卸载requests包 pip uninstall requests2:卸载多个包 # 一次性卸载多个包 pip uninstall package1 package2 package3# 示例 pip uninstall requests numpy pandas3&#xff1…

超级流水线和标量流水线的原理

一、什么是流水线?要理解这两个概念,首先要明白流水线(Pipelining) 的基本思想。想象一个汽车装配工厂:* 没有流水线:一个工人负责组装一整辆汽车,装完一辆再装下一辆。效率很低。* 有了流水线&…

【Ansible】管理复杂的Play和Playbook知识点

1.什么是主机模式?答:主机模式是Ansible中用于从Inventory中筛选目标主机的规则,通过灵活的模式定义可精准定位需要执行任务的主机。2.主机模式的作用答:筛选目标:从主机清单中选择一个或多个主机/组,作为P…

FastGPT源码解析 Agent 智能体应用创建流程和代码分析

FastGPT对话智能体创建流程和代码分析 平台作为agent平台,平台所有功能都是围绕Agent创建和使用为核心的。平台整合各种基础能力,如大模型、知识库、工作流、插件等模块,通过可视化,在界面上创建智能体,使用全部基础能…

缺失数据处理全指南:方法、案例与最佳实践

如何处理缺失数据:方法、案例与最佳实践 1. 引言 在数据分析和机器学习中,缺失数据是一个普遍存在的问题。如何处理缺失值,往往直接影响到后续分析和建模的效果。处理不当,不仅会浪费数据,还可能导致模型预测结果的不准…

为什么Cesium不使用vue或者react,而是 保留 Knockout

1. Knockout-ES5 插件的语法简化优势 自动深度监听:Cesium 通过集成 Knockout-ES5 插件,允许开发者直接使用普通变量语法(如 viewModel.property newValue)替代繁琐的 observable() 包装,无需手动声明每个可观察属性。…