Parsing 推导算术表达式?

Parsing 推导算术表达式?,parsing,math,tree,Parsing,Math,Tree,你如何推导这个表达式?我需要为此绘制一个解析树,但在推导时遇到了真正的困难。谷歌搜索也没有提供任何有用的链接,任何帮助都将不胜感激,但请简要解释一下你是如何做到这一点的,因为我自己几乎没有其他人可以做。“|”是否与编程中一样代表“或”运算符 < exp> ---> < exp> * < factor> | < factor> < factor> ---> < factor> - < term> | &

你如何推导这个表达式?我需要为此绘制一个解析树,但在推导时遇到了真正的困难。谷歌搜索也没有提供任何有用的链接,任何帮助都将不胜感激,但请简要解释一下你是如何做到这一点的,因为我自己几乎没有其他人可以做。“|”是否与编程中一样代表“或”运算符

< exp> ---> < exp> * < factor> | < factor>
< factor> ---> < factor> - < term> | < term>
< term> ---> x | y | z
-->*|
-->-
-->x|y|z
这是我能想出的最好办法,我完全迷路了

< exp> ---> < exp> * < factor>
---> x * < factor>
---> x * < factor> * < factor>
-->*
--->x*<系数>
--->x**

这是一个好主意。“代数表达式”部分包含一个与您想要的类似的示例解析树。

为了回答您的问题,在编程中用|表示或类似。不过,您发布的语法似乎没有优先顺序。通常乘法的优先级高于加法,但您发布的语法的优先级正好相反,这可能是您的问题的一部分

修改表达式语法(对于示例中的有限操作集)的常用方法是

这样,您可以在加法之前进行乘法运算。对于x+y*z,您将得到以下结果。我不做ASCII艺术,所以你必须接受运算符而不是逗号作为分隔符


(表达式(表达式(项(因子x)))“+”(项(因子y)“*”(因子z)))

是的,|是或,就像在常规编程中一样。像这样的一行:

< exp> ---> < exp> * < factor> | < factor>
颠倒顺序以获得解析:

          e
         /|\
        / | \
       e  *  f
      /|\     \
     / | \     t
    /  |  \     \
   /   |   \     z
  e    *    f
  |        /|\
  f       / | \
 /|\     f  -  t
f - t   /|\    |
|   |  f - t   y
t   y  |   |
|      t   y
x      |
       x

(绘制该图表所需的工作量比我预期的要多…

学习ASCII艺术代数课程?你不需要一个符合该语法的具体示例来形成该语法的解析树吗?是的,从技术上讲,我会。。但正如人们所想,我是在请求家庭作业帮助。我会很高兴,即使任何人可以提供任何链接?或者给我举一个例子,用grammer进行模拟。即使这是一个简单的表达式也很好,但我只需要有人告诉我如何解决这些表达式。如果不解决这个问题,我就无法解析树,所以任何你认为可以帮助我解决这个问题的东西都会大有帮助。@Warren:叹气。你为什么不直接问OP是不是家庭作业,而不是暗示它是家庭作业呢。
< exp>    ---> < exp> * < factor> | < factor>
< factor> ---> < factor> - < term> | < term>
< term>   ---> x | y | z
x        y        x          y        y        z
<term> - <term> * <term>   - <term> - <term> * <term>
<factor>        * <factor> - <term> - <term> * <factor>
<factor>        * <factor>          - <term> * <factor>
<expr>          * <factor>                   * <factor>
<expr>                                       * <factor>
<expr>
          e
         /|\
        / | \
       e  *  f
      /|\     \
     / | \     t
    /  |  \     \
   /   |   \     z
  e    *    f
  |        /|\
  f       / | \
 /|\     f  -  t
f - t   /|\    |
|   |  f - t   y
t   y  |   |
|      t   y
x      |
       x