java - 使用 Java 堆栈评估有效的 Lisp 表达式

标签 java lisp operators stack

<分区>

对于 Data Structures 中的项目,我们鼓励使用 Java API Stacks 评估 Lisp Expression

Lisp 表达式 有四个基本运算符:+、-、*、/。 表达式中的有效标记是 '(', ')' 和运算符。

Lisp 表达式示例:( + (-6) (+ 3 2 1) (/10 5) (* 2 3 4)) 等于 26.


如何计算 Lisp 的标记,然后将它们推回堆栈

最佳答案

这是秘诀(是的,您必须了解 Java,别无他法)

  • 标记您的输入:您将拥有以下标记
    • S-EXPR-START(每次遇到'(')
    • S-EXPR-END(每次遇到')')
    • NUMBER(值是解析的数字的值)
    • OPERATION(值为操作码:+-*/等)
  • 构建语法树:每次开始一个 s 表达式(左括号)时,它都是一个新的树节点,它的值是函数,子节点是操作数。
  • 通过用该节点的结果替换节点/子节点,以自下而上的方法评估您的树。 ...
  • 利润!

关于java - 使用 Java 堆栈评估有效的 Lisp 表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19535266/

相关文章:

lisp - CLISP FFI 外国值(value)问题

lisp - 对多个原子使用读取时条件化

php - 奇数和偶数(使用 & 或 %)

c++ - 使用父类的重载方法

java - 如何将输出通过管道传输到文件末尾? (Java,终端)

java - 如何将 addAll 与通用集合一起使用?

lisp - 如何从 ads_name 类型获取 VLAX-OBJECT

c - 关于否定运算符对字节的行为

java - FCM 使用 firebase-admin 库通过防火墙发送消息

java - 始终向客户端发送 HTTP 响应而无需请求