diff --git a/cs675/bottomup/arithmetic.grammar b/cs675/bottomup/arithmetic.grammar index 00e36df..60fa5f3 100644 --- a/cs675/bottomup/arithmetic.grammar +++ b/cs675/bottomup/arithmetic.grammar @@ -3,7 +3,7 @@ Package jholtrop.gvsu.cs675.bottomup; Tokens blank = (' ' | 9 | 10 | 13); - number = ['0' .. '9']+; + number = ['0' .. '9']+ ('.' ['0' .. '9']+)?; plus = '+'; minus = '-'; multiply = '*'; diff --git a/cs675/bottomup/jholtrop/gvsu/cs675/bottomup/Evaluator.java b/cs675/bottomup/jholtrop/gvsu/cs675/bottomup/Evaluator.java index 4840b7a..26a6a4c 100644 --- a/cs675/bottomup/jholtrop/gvsu/cs675/bottomup/Evaluator.java +++ b/cs675/bottomup/jholtrop/gvsu/cs675/bottomup/Evaluator.java @@ -6,6 +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; public class Evaluator extends DepthFirstAdapter { @@ -27,28 +28,38 @@ public class Evaluator extends DepthFirstAdapter } } - public void caseTNumber(TNumber num) + private HashMap m_exprValues = new HashMap(); + + private double getNumValue(TNumber num) { - System.out.print(num.getText() + " "); + return Double.parseDouble(num.getText()); } public void outAAdditionExpr(AAdditionExpr e) { - System.out.print("+ "); + Double result = + m_exprValues.get(e.getExpr()) + m_exprValues.get(e.getTerm()); + m_exprValues.put(e, new Double(result)); } public void outASubtractionExpr(ASubtractionExpr e) { - System.out.print("- "); + Double result = + m_exprValues.get(e.getExpr()) - m_exprValues.get(e.getTerm()); + m_exprValues.put(e, new Double(result)); } public void outAMultiplicationTerm(AMultiplicationTerm e) { - System.out.print("* "); + Double result = + m_exprValues.get(e.getTerm()) * m_exprValues.get(e.getFactor()); + m_exprValues.put(e, new Double(result)); } public void outADivisionTerm(ADivisionTerm e) { - System.out.print("/ "); + Double result = + m_exprValues.get(e.getTerm()) / m_exprValues.get(e.getFactor()); + m_exprValues.put(e, new Double(result)); } }