令文法 G4[E]: (2 分) E→T | E+T | E-T T→F |T*F | T/F F→(E) | i (1) 给出 i*i+i, i/(i*i) 的最左推导和最右推导 (2) 画出 i/i+i 和 i-(i+i)*i 的语法树
时间: 2024-10-01 16:09:50 浏览: 29
(1) 对于表达式 "i*i+i",最左推导是从最基础的非终结符开始逐步替换的过程:
```markdown
E → T (E -> T)
T → F * T (T -> F * T)
F → i (F -> i)
```
而最右推导则是从最终的表达式开始向根部替换:
```markdown
i * i + i → E + T (T -> i * F)
→ E + i (F -> i)
→ E (E -> i)
对于 "i/(i*i)",最左推导:
E → T / F (E -> T / F)
T → i (T -> i)
F → i * i (F -> i * i)
最右推导:
i / (i * i) → F / T (T -> i)
→ i / i^2 (F -> i * i)
→ i (i^2 -> i)
(2) 画出语法树需要图形化工具,但我们可以描述它们的大致结构:
- 对于 "i/i+i":
- 根节点 E
- 子节点 '+' (操作符)
- 子节点 T (T -> i) (即第二个i)
- 子节点 '+' (操作符)
- 对于 "i-(i+i)*i":
- 根节点 E
- 子节点 T (-T)
- 子节点 T (+T)
- 子节点 E (E -> T)
- 子节点 F (F -> i+i)
- 子节点 T (T - 子节点 T (T -> i) (第二个i)
- 子节点 '*' (操作符)
- 子节点 '-' (操作符)
由于文本格式限制,无法展示详细的语法树,建议在线搜索相关的教程或软件来可视化这两个表达式的语法树。
阅读全文