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