Bnf 解析树查询
我目前参加了一个计算机体系结构课程,我正在尝试做一个家庭作业 作业在BNF上,即使在听完讲座、阅读幻灯片和上网后,我仍然感到困惑 这是我的语法:Bnf 解析树查询,bnf,Bnf,我目前参加了一个计算机体系结构课程,我正在尝试做一个家庭作业 作业在BNF上,即使在听完讲座、阅读幻灯片和上网后,我仍然感到困惑 这是我的语法: <expr>-><expr> + <term> | <expr> - <term> | <term> <term>-><term> * <factor> | <term
<expr>-><expr> + <term> |
<expr> - <term> |
<term>
<term>-><term> * <factor> |
<term> / <factor> |
<factor>
<factor>->(<expr>)|<id>
<id>->A|B|C|D
->+|
- |
-> * |
/ |
->()|
->A | B | C | D
A+(C-D)/B的解析树是什么样子的?
我只需要一点指导,我就能自己解决这个问题。我的老师解释得不是很好,所以我希望用外行的术语来解释如何进行这项工作?虽然没有说明,但我假设我们试图将字符串A+(C-D)/B解释为
(因为没有其他解析工作)
是一个非终结符符号,也就是说,它不会出现在最后一个字符串中。相反,第一条规则(->+|-|
)告诉我们在
字符串中应该使用哪些符号。它说明可以通过以下选项之一创建
:
,即+
后接
后接+
,或
,(解释类似),或-
+
),它假设第一个
将代表消息中的A,+
是+,而
是剩余的(C-D)/B。因此,解析树的开头看起来像:
<expr>
/ | \
/ | \
<expr> + <term>
/ | \
/ | \
+
这还不是一个完整的解析,因为从规则上看,
不能立即给出结果a。同样地,(C-D)/B也不是
的直接选项。我们可以通过以下方式回答第一个反对意见:
可以是
(通过
规则的第三个选项)
依次可以是
(通过
规则的第三个选项)
可以是
(通过
规则的第二个选项),最后
可以是A(通过
规则的第一个选项) <expr>
/ | \
/ | \
<expr> | <term>
| |
<term> |
| |
<factor>|
| |
<id> |
| |
A +
/ | \
/ | \
|
| |
|
| |
|
| |
|
| |
A+
我希望这能让您了解过程和规则的含义,这样您就可以进一步展示
如何给出(C-D)/B,从而填充树的其余部分。是的,您认为输入用于
是正确的。我想我设法弄明白了。这是我的解析树的一个图像:它不应该是
,然后是
,然后是
?我认为您忘记了一个步骤。我认为您的树的一些级别是向后的(非终结符应该以与规则中出现的相同的从左到右顺序出现),但是您的结构看起来是正确的。