Bnf 解析树查询

Bnf 解析树查询,bnf,Bnf,我目前参加了一个计算机体系结构课程,我正在尝试做一个家庭作业 作业在BNF上,即使在听完讲座、阅读幻灯片和上网后,我仍然感到困惑 这是我的语法: <expr>-><expr> + <term> | <expr> - <term> | <term> <term>-><term> * <factor> | <term

我目前参加了一个计算机体系结构课程,我正在尝试做一个家庭作业

作业在BNF上,即使在听完讲座、阅读幻灯片和上网后,我仍然感到困惑

这是我的语法:

<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,从而填充树的其余部分。

    是的,您认为输入用于
    是正确的。我想我设法弄明白了。这是我的解析树的一个图像:它不应该是
    ,然后是
    ,然后是
    ?我认为您忘记了一个步骤。我认为您的树的一些级别是向后的(非终结符应该以与规则中出现的相同的从左到右顺序出现),但是您的结构看起来是正确的。