如何生成特定句子的语法树,如a + b * c,其中id-> a | b | c?

时间:2017-10-27 01:57:09

标签: compiler-construction compiler-optimization automata-theory

考虑语法:E-> E + E | E-E | E * E | E / E |(E)| ID

我已经尝试了至少5个小时来解决这个问题,但失败了。请告诉我,

  • 解决这个问题的想法是什么?

  • 如何实现?

1 个答案:

答案 0 :(得分:3)

语法树是通过解析构建的,这在某种意义上反过来应用语法。所以你看到a,b和c只能来自id,而id又只能来自E.现在你处于E + E * E。您可以先降低E + E,也可以降低E * E,然后降低E * E.生成的E是树的根。两个可能的语法树之一(减少第一个E * E)是

  E
 /| \
E +   E
|    /|\
id  E * E
|   |   |
a   id  id
    |   |
    b   c

关于实施,您必须指定实现此目的的地点和目的。