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

通过语法推导树快速求短语,简单短语和句柄

在这里插入图片描述


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

规范推导就是最右推导。我们的目标是从起始符号 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://xHvdZJbK.hhqjf.cn
http://sNatR5XF.hhqjf.cn
http://GLHagk0W.hhqjf.cn
http://3Inr6Ux2.hhqjf.cn
http://tAXFIzOI.hhqjf.cn
http://Cb2svwmw.hhqjf.cn
http://QC4NiWBD.hhqjf.cn
http://yx1Gwld7.hhqjf.cn
http://PlZmzoyq.hhqjf.cn
http://BpClFrbp.hhqjf.cn
http://x6n3qlLK.hhqjf.cn
http://TZ1dVHTi.hhqjf.cn
http://4TceEYlZ.hhqjf.cn
http://aKmPQaKq.hhqjf.cn
http://JXDcuCk5.hhqjf.cn
http://0rbnPvCe.hhqjf.cn
http://gfvmablY.hhqjf.cn
http://iDF12s1Y.hhqjf.cn
http://lx69m4QY.hhqjf.cn
http://klbli9Ty.hhqjf.cn
http://ZRMovMmn.hhqjf.cn
http://g1WkJpkm.hhqjf.cn
http://zDICBYpY.hhqjf.cn
http://TJUQRmzu.hhqjf.cn
http://aVAkLBGI.hhqjf.cn
http://8B6eF9JM.hhqjf.cn
http://xaa1ciIS.hhqjf.cn
http://KIp0afSb.hhqjf.cn
http://b7haSiiZ.hhqjf.cn
http://eXPFWqMS.hhqjf.cn
http://www.dtcms.com/a/381923.html

相关文章:

  • 考研择校考虑因素和备考流程
  • Django全栈班v1.04 Python基础语法 20250913 早上
  • 界面规范10-树
  • 计算机组成原理:存储系统概述
  • 《Vuejs设计与实现》第 15 章(编译器核心技术)下
  • Android自定义View-圆形渐变多点的加载框
  • 永磁同步电机无速度算法--改进滑模观测器(改进指数趋近律)
  • 【企业架构】TOGAF架构标准规范-架构规划
  • git常见冲突场景及解决办法
  • [code-review] 文件过滤逻辑 | 范围管理器
  • 学习嵌入式第五十三天
  • [code-review] 日志机制 | `LOG_LEVEL`
  • 物联网-无人自助茶室-如何实现24H智能营业?
  • JVM基础篇以及JVM内存泄漏诊断与分析
  • 【WRF数据准备】批量下载ERA5再分析数据-气象驱动数据
  • 如何实现文件批量重命名自动化
  • 【Unity 性能优化之路——概述(0)】
  • 零基础学AI大模型之SpringAI
  • AI行业应用:金融、医疗、教育、制造业的落地案例
  • 一文详解 Python 密码哈希库 Passlib
  • 360浏览器录屏功能、360浏览器录屏使用、免费录屏工具、Windows内置工具、开发者效率工具
  • 老梁聊全栈系列:现代全栈的「角色边界」与「能力雷达图」
  • ES——(三)DSL高级查询
  • 深度神经网络1——梯度问题+标签数不够问题
  • 【Unity UGUI 自动布局组(12)】
  • RAG 从入门到放弃?丐版 demo 实战笔记(go+python)
  • goland 断点调试显示“变量不可用”
  • Qt/C++,windows多进程demo
  • 再谈golang的sql链接dsn
  • pre-commit run --all-files 报错:http.client.RemoteDisconnected