From 6358a63af51285fbf8f3285cd3c9c705bab421cd Mon Sep 17 00:00:00 2001 From: josh Date: Sun, 1 Jun 2008 23:32:58 +0000 Subject: [PATCH] evaluating divide and minus in correct order git-svn-id: svn://anubis/gvsu@116 45c1a28c-8058-47b2-ae61-ca45b979098e --- .../gvsu/cs675/bottomup/Evaluator.java | 37 ++++++++++--------- 1 file changed, 20 insertions(+), 17 deletions(-) diff --git a/cs675/bottomup/jholtrop/gvsu/cs675/bottomup/Evaluator.java b/cs675/bottomup/jholtrop/gvsu/cs675/bottomup/Evaluator.java index 26a6a4c..0a2356c 100644 --- a/cs675/bottomup/jholtrop/gvsu/cs675/bottomup/Evaluator.java +++ b/cs675/bottomup/jholtrop/gvsu/cs675/bottomup/Evaluator.java @@ -6,7 +6,7 @@ import jholtrop.gvsu.cs675.bottomup.node.*; import jholtrop.gvsu.cs675.bottomup.lexer.Lexer; import jholtrop.gvsu.cs675.bottomup.parser.Parser; import java.io.*; -import java.util.HashMap; +import java.util.Stack; public class Evaluator extends DepthFirstAdapter { @@ -20,7 +20,9 @@ public class Evaluator extends DepthFirstAdapter Start tree = p.parse(); - tree.apply(new Evaluator()); + Evaluator e = new Evaluator(); + tree.apply(e); + System.out.println("Result: " + e.getResult()); } catch (Exception e) { @@ -28,38 +30,39 @@ public class Evaluator extends DepthFirstAdapter } } - private HashMap m_exprValues = new HashMap(); + private Stack m_exprValues = new Stack(); - private double getNumValue(TNumber num) + public double getResult() { - return Double.parseDouble(num.getText()); + return m_exprValues.peek(); } public void outAAdditionExpr(AAdditionExpr e) { - Double result = - m_exprValues.get(e.getExpr()) + m_exprValues.get(e.getTerm()); - m_exprValues.put(e, new Double(result)); + m_exprValues.push(m_exprValues.pop() + m_exprValues.pop()); } public void outASubtractionExpr(ASubtractionExpr e) { - Double result = - m_exprValues.get(e.getExpr()) - m_exprValues.get(e.getTerm()); - m_exprValues.put(e, new Double(result)); + double b = m_exprValues.pop(); + double a = m_exprValues.pop(); + m_exprValues.push(a - b); } public void outAMultiplicationTerm(AMultiplicationTerm e) { - Double result = - m_exprValues.get(e.getTerm()) * m_exprValues.get(e.getFactor()); - m_exprValues.put(e, new Double(result)); + m_exprValues.push(m_exprValues.pop() * m_exprValues.pop()); } public void outADivisionTerm(ADivisionTerm e) { - Double result = - m_exprValues.get(e.getTerm()) / m_exprValues.get(e.getFactor()); - m_exprValues.put(e, new Double(result)); + double b = m_exprValues.pop(); + double a = m_exprValues.pop(); + m_exprValues.push(a / b); + } + + public void caseTNumber(TNumber n) + { + m_exprValues.push(Double.parseDouble(n.getText())); } }