Permalink
Switch branches/tags
Nothing to show
Find file Copy path
Fetching contributors…
Cannot retrieve contributors at this time
36 lines (25 sloc) 1.04 KB

4.3 节的练习

4.3.1

下面是一个只包含符号 a 和 b 的正则表达式文法。它使用 + 替代表示并运算的字符 | ,以避免和文法中作为元符号使用的竖线相混淆:

rexpr -> rexpr + rterm | rterm
rterm -> rterm rfactor | rfactor
rfactor -> rfactor * | rprimary
rprimary -> a | b
  1. 对这个文法提取左公因子。
  2. 提取左公因子的变换能使这个文法适用于自顶向下的语法分析技术吗?
  3. 提取左公因子之后,从原文法中消除左递归。
  4. 得到的文法适用于自顶向下的语法分析吗?

4.3.2

对下面的文法重复练习 4.3.1

  1. 练习 4.2.1 的文法
  2. 练习 4.2.2-1 的文法
  3. 练习 4.2.2-3 的文法
  4. 练习 4.2.2-5 的文法
  5. 练习 4.2.2-7 的文法

4.3.3 !

下面文法的目的是消除 4.3.2 节中讨论的 “悬空-else 二义性”:

stmt -> if expr then stmt
      | mathcedStmt
matchedStmt -> if expr then mathcedStmt else stmt
             | other

说明这个文法仍然是二义性的。