我知道如何使用堆栈来处理像((1 + 2)* 3')这样的算术表达式字符串。这个问题有没有典型的Scheme解决方案?解析方案中的算术表达式
0
A
回答
1
有点难以分辨出你问的是什么问题。在方案(或球拍),你几乎肯定会写出这样的评价 “直接”,像这样:
- 为E1 * E2,收益率(EVAL E1)倍(EVAL E2)
- 为E1 + E2,return(eval E1)plus(eval E2)
...所以评估者的字面意思是三行。
请注意,在此定义中,不需要明确地跟踪堆栈(当然,您可以在任何其他语言中执行相同的操作 - 只有在您想写入时才使用显式堆栈 评估者以循环的形式,并且不想分开解析步骤)。
要解析表达式,您需要......好吧,您可能需要解析器。如果您使用的是Racket, 您可以参考collects/parser-tools/examples/calck.rkt
中Racket附带的计算器示例。它处理你描述的一切。我可以把它全部粘贴在这里,但这可能是矫枉过正。
0
是的,Scheme解决方案是解析表达式,然后像您已经知道的那样使用堆栈。
相关问题
- 1. 解析算术表达式
- 2. 技术需要编写一个算术表达式解析器
- 3. 算术表达式
- 4. 算术表达式语法和解析器
- 5. 解析算术/布尔表达式,但跳过捕获
- 6. 正则表达式将算术表达式分解成部分
- 7. 如何计算算术表达式(String)并返回答案?
- 8. 模表达算术方程
- 9. 算术表达式语法
- 10. BASH算术表达式
- 11. Prolog中的算术表达式
- 12. 用替代方案和可选方案解析正则表达式
- 13. Python正则表达式解决方案?
- 14. 如何计算算术表达式
- 15. 算术正则表达式中
- 16. 如何在Prolog中解决这个算术表达式难题?
- 17. 将算术表达式表示为树
- 18. 药剂:(ArithmeticError)的算术表达式
- 19. 指针算术 - 相同的表达式?
- 20. 中缀表示法解析表达式的算法是什么?
- 21. 用于算术表达式的正则表达式
- 22. 在C++中有浮点算术问题的解决方案吗?
- 23. 最大化算术表达式
- 24. 幂算术常量表达式
- 25. C#表达式树简单算术
- 26. 如何写算术表达式在Haskell
- 27. 算术双重表达式和c/C++
- 28. 评估算术语法树表达式
- 29. 代码来计算assemby中的某个算术表达式
- 30. 正则表达式/ Javascript帮助 - 搜索URL术语解析
清除我的问题:用户使用+, - ,*,/,)和(当然不是Lisp风格,而是像1 + 3 *(3 - 2)这样的日常输入)输入算术表达式,我想知道Racketors如何实现这些功能:是否有任何特定的函数或库文件? –
好吧,我更新了我的答案,以引用球拍中包含的解析器示例。 –
I已经想出了一个将* infix *算术表达式转换为*二元表达式树的算法,这是一个更好的解决方案,我会很快发布我的算法。 –