news 2026/10/14 9:29:23

文法定义了一个典型的表达式文法,支持加法和乘法,具有左递归以实现左结合

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
文法定义了一个典型的表达式文法,支持加法和乘法,具有左递归以实现左结合

给定文法 $ P = { E \to E + T \mid T, \quad T \to T * F \mid F, \quad F \to (E) \mid \text{id} } $,我们以句子 $ \text{id}_1 + \text{id}_2 * \text{id}_3 $ 为例,进行最右推导、语法树构建和短语分析。


1. 最右推导过程

最右推导(规范推导)是指在每一步推导中,总是替换最右侧的非终结符。从开始符号 $ E $ 出发:

E⇒E+T(使用 E→E+T)⇒E+T∗F(使用 T→T∗F)⇒E+T∗id3(使用 F→id)⇒E+F∗id3(使用 T→F)⇒E+id2∗id3(使用 F→id)⇒T+id2∗id3(使用 E→T)⇒F+id2∗id3(使用 T→F)⇒id1+id2∗id3(使用 F→id) \begin{align*} E & \Rightarrow E + T \quad \text{(使用 } E \to E + T\text{)} \\ & \Rightarrow E + T * F \quad \text{(使用 } T \to T * F\text{)} \\ & \Rightarrow E + T * \text{id}_3 \quad \text{(使用 } F \to \text{id}\text{)} \\ & \Rightarrow E + F * \text{id}_3 \quad \text{(使用 } T \to F\text{)} \\ & \Rightarrow E + \text{id}_2 * \text{id}_3 \quad \text{(使用 } F \to \text{id}\text{)} \\ & \Rightarrow T + \text{id}_2 * \text{id}_3 \quad \text{(使用 } E \to T\text{)} \\ & \Rightarrow F + \text{id}_2 * \text{id}_3 \quad \text{(使用 } T \to F\text{)} \\ & \Rightarrow \text{id}_1 + \text{id}_2 * \text{id}_3 \quad \text{(使用 } F \to \text{id}\text{)} \end{align*}E​⇒E+T(使用E→E+T)⇒E+T∗F(使用T→T∗F)⇒E+T∗id3​(使用F→id)⇒E+F∗id3​(使用T→F)⇒E+id2​∗id3​(使用F→id)⇒T+id2​∗id3​(使用E→T)⇒F+id2​∗id3​(使用T→F)⇒id1​+id2​∗id3​(使用F→id)​

✅ 最终得到句子:$ \text{id}_1 + \text{id}_2 * \text{id}_3 $

注意:这是最右推导,因此每次都优先展开最右边的非终结符(如先处理 $ T $ 中的 $ F $,再往左处理 $ E $)。


2. 推导的树结构(语法树)

E / | \ E + T /| \ / | \ T F T * F /|\ \ /|\ \ F id2 id3 | id1

更清晰地表示为:

E / | \ E + T | / \ T T * | | | F F id3 | | id1 id2

但实际上,根据推导顺序,应为:

E / | \ E + T | / \ T T * | | | F F F | | | id1 id2 id3

但注意:由于 $ T \to T * F $,所以中间的 $ T $ 应该是递归生成的。正确语法树如下:

E / | \ E + T /|\ /|\ T T * F | | | F F id3 | | id1 id2

而最底层的 $ T \to F \to \text{id}_2 $,所以完整结构是左递归展开。

最终语法树反映了左结合的+和*,且*优先级高于+。


3. 短语分析

基于上述最右推导过程,识别短语与直接短语:

  • 短语:在一个句型中,能被某个非终结符逐步推导出的子串称为该非终结符的短语。
  • 直接短语(素短语):仅通过一步推导就能得到的短语(即使用一次产生式替换)。

分析句型 $ \text{id}_1 + \text{id}_2 * \text{id}_3 $ 的各部分:

子串对应非终结符是否为短语是否为直接短语理由
$ \text{id}_1 $$ F $是是$ F \Rightarrow \text{id}_1 $
$ \text{id}_2 $$ F $是是$ F \Rightarrow \text{id}_2 $
$ \text{id}_3 $$ F $是是$ F \Rightarrow \text{id}_3 $
$ \text{id}_2 * \text{id}_3 $$ T $是否$ T \Rightarrow T * F \Rightarrow^* \text{id}_2 * \text{id}_3 $
$ \text{id}_1 + \text{id}_2 * \text{id}_3 $$ E $是否整个句子由 $ E $ 推导而来

此外:

  • $ \text{id}_1 $ 是相对于 $ T $ 的短语吗?→ 是,因为 $ T \Rightarrow F \Rightarrow \text{id}_1 $
  • 直接短语只有那些一步推出的:$ \text{id}_1, \text{id}_2, \text{id}_3 $
  • 句柄(handle)是最左直接短语,在最右推导中用于规约的关键部分,此处为 $ \text{id}_3 $(首次规约对象)

总结

  • 文法定义了一个典型的表达式文法,支持加法和乘法,具有左递归以实现左结合。
  • 最右推导展示了如何从 $ E $ 一步步生成目标句子,强调了运算符优先级(*高于+)。
  • 语法树直观体现结构:+的右操作数是一个T(即id2 * id3),说明*先结合。
  • 短语分析有助于理解语义计算和语法分析器设计(如 LR 分析器中的规约动作)。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/13 10:03:41

内容创作者在生成式AI搜索时代的生存与繁荣策略

引言:内容价值的重新定义当生成式AI能够瞬间综合全网信息生成看似完美的答案时,许多内容创作者面临生存危机:如果用户不再访问原始来源,创作者如何获得认可和回报?然而,危机中蕴含转机——AI无法替代人类的…

作者头像 李华
网站建设 2026/10/13 10:03:21

嵌入式知识篇---74LS192

1. 一句话概括它是什么74LS192 是一个“可逆、可预置的十进制同步计数器”。 听起来很复杂?别怕,我们拆开看:计数器:它会自动数数(0,1,2,3...)。十进制:它从0数到9,然后归零&#xf…

作者头像 李华
网站建设 2026/10/14 2:12:05

Java开发裸辞狂刷两个月面试题,终于拿到某独角兽offer,分享还愿!

前言 今天给大家分享下我整理的Java架构面试专题及答案,其中大部分都是大企业面试常问的面试题,可以对照这查漏补缺,当然了,这里所列的肯定不可能覆盖全部方式。 很多Java开发者面试之前,可能没有较长的工作时间或者…

作者头像 李华
网站建设 2026/10/11 22:48:11

12款常见降ai率工具大汇总(含免费降ai率版)

“论文降ai”是2025年毕业生面临的新挑战。它指的是一个过程:我们使用专门的降ai工具,去修改另一篇由AI(如GPT、Kimi)生成的文本,目的是为了“消除AI痕迹”,让文章看起来更像人类原创。 这个过程通常利用深…

作者头像 李华
网站建设 2026/10/13 9:04:46

2款常见降ai率工具大汇总(含免费降ai率版,还有免费ai查重!)

“论文降ai”是2025年毕业生面临的新挑战。它指的是一个过程:我们使用专门的降ai工具,去修改另一篇由AI(如GPT、Kimi)生成的文本,目的是为了“消除AI痕迹”,让文章看起来更像人类原创。 这个过程通常利用深…

作者头像 李华
网站建设 2026/10/13 9:04:57

12款常见降ai率工具大汇总(含免费降ai率版,5个有效方法推荐)

“论文降ai”是2025年毕业生面临的新挑战。它指的是一个过程:我们使用专门的降ai工具,去修改另一篇由AI(如GPT、Kimi)生成的文本,目的是为了“消除AI痕迹”,让文章看起来更像人类原创。 这个过程通常利用深…

作者头像 李华