什么是语法树(推导树)?


推导是指用产生式右边的式子替换给定字符串的非终结符。从开始符号生成完整的终结符字符串的规则应用序列称为推导。语法树是推导的图形表示。因此,它也称为推导树。推导树独立于产生式使用的顺序。

语法树是一个有序树,其中节点用产生式的左边标记,节点的子节点定义其等效的右边。语法树也称为语法树、生成树或产生式树。

对于 CFG G =(V,∑, P,S),语法树是一个满足以下条件的树:

  • 根节点的标签为 S,其中 S 是开始符号。

  • 语法树的每个顶点都有一个标签,可以是变量 (V)、终结符 (Σ) 或 ε。

  • 如果 A → C1,C2…….Cn 是一个产生式,那么 C1,C2…….Cn 是标记为 A 的节点的子节点。

  • 叶子节点是终结符 (Σ),内部节点是变量 (V)。

  • 内部顶点的标签始终是变量。

  • 如果顶点 A 有 k 个子节点,其标签为 A1,A2…….Ak,则 A →

A1,A2…….Ak 将是上下文无关文法 G 中的产生式。

产出 (Yield) − 推导树的产出是从左到右对叶子节点标签的串联。

示例 1 − 如果 CFG 有产生式。

S → a A S | a
S → Sb A | SS | ba

证明 S ⇒ *aa bb aa 并构造产出为 aa bb aa 的语法树。

解答

S ⇒lm lm a $\underline{A}$ S

⇒ a $\underline{S\:b}$ A S

⇒ aa b $\underline{A}$ S

⇒ aa bba $\underline{S}$

∴ S ⇒ * aa bb aa

推导树

产出 = 叶子节点从左到右的顺序 = aa bb aa

示例 2

考虑 CFG

S → bB | aA
A → b | bS | aAA
B → a |aS | bBB

找到 (a) 最左

  • 字符串 b aa baba 的最右推导。也找到推导树。

解答

  • 最左推导

S⇒b $\underline{B}$

⇒ bb $\underline{B}$B

⇒ bba$\underline{B}$

⇒ bbaa$\underline{S}$

⇒ bb aa$\underline{bB}$

⇒ bb aa b $\underline{aS}$

⇒ bb aa bab $\underline{B}$

⇒ bb aa ba ba

  • 最右推导

S ⇒ b$\underline{B}$

⇒ bb B$\underline{B}$

⇒ bbBa$\underline{S}$

⇒ bbBab$\underline{B}$

⇒ bbBaba$\underline{S}$

⇒ bbBabab$\underline{B}$

⇒ bb$\underline{B}$abab a

⇒ bbaababa

示例 3 − 考虑以下给出的语法:

E⇒ E+E|E $\ast$ E|id

查找

  • 最左
  • 字符串的最右推导。

解答

  • 最左推导

E ⇒ $\underline{E}$+E

⇒ $\underline{E}$+E+E

⇒ id+E+E

⇒ id+id+E

⇒ id+id+id

  • 最右推导

E ⇒ E+$\underline{E}$

⇒ E+E+$\underline{E}$

⇒ E+E+id

⇒ E+id+id

⇒ id+id+id

更新于:2021年10月26日

13K+ 浏览量

启动您的职业生涯

通过完成课程获得认证

开始
广告