2013-10-23 93 views
0

對於Data Structures中的項目,我們鼓勵使用Java API Stacks來評估Lisp Expression使用Java堆棧評估有效的Lisp表達式

Lisp expressions有四種基本操作符:+, -, *,/. 在表達的有效令牌是'(', ')',和的運算符。

示例Lisp expression(+ (-6) (+ 3 2 1) (/ 10 5) (* 2 3 4))其等於26


如何我可以計算Lisp的記號,然後把它們放回入stack

+0

說實話,沒有什麼是真的。這是唯一的,因爲我不知道該怎麼做。我是一名初學Java程序員,對Java沒有深入的瞭解(儘管我正在閱讀Bruce Eckel的Thinking In Java以更好地理解它)。 – Balance

+0

我應該將操作數從一個堆棧彈出到另一個,直到找到一個操作符,然後將操作符應用於操作數。之後,我將結果推回到原始堆棧。 ------->我不確定如何計算操作數,然後推回結果。 – Balance

+2

我不會發布代碼,只是圖片然後http://math.hws.edu/eck/cs124/javanotes3/c11/expressionTree.gif – RamonBoza

回答

1

這裏的配方(是的,你必須知道 Java的,它周圍沒有其他辦法)

  • 記號化您的輸入:您將有以下標記
    • S-EXPR-START(每當你遇到 '(')
    • S-EXPR-END)
    • NUMBER(每遇到一次 ')'(值是多少解析值)
    • 操作(值爲操作碼:+ - */etc)
  • 構建語法樹:每次啓動s表達式和兒童是操作數。
  • 用自底向上的方法評估您的樹,方法是用此節點的結果替換節點/子節點。 ...
  • 利潤!