summaryrefslogtreecommitdiffstats
path: root/code/simpleSableCCCalulator/sableCCCalculator/Translation.java
diff options
context:
space:
mode:
Diffstat (limited to 'code/simpleSableCCCalulator/sableCCCalculator/Translation.java')
-rw-r--r--code/simpleSableCCCalulator/sableCCCalculator/Translation.java114
1 files changed, 35 insertions, 79 deletions
diff --git a/code/simpleSableCCCalulator/sableCCCalculator/Translation.java b/code/simpleSableCCCalulator/sableCCCalculator/Translation.java
index d8fd74d..a673edb 100644
--- a/code/simpleSableCCCalulator/sableCCCalculator/Translation.java
+++ b/code/simpleSableCCCalulator/sableCCCalculator/Translation.java
@@ -1,22 +1,23 @@
package sableCCCalculator;
import sableCCCalculator.analysis.*;
+import sableCCCalculator.types.*;
import sableCCCalculator.node.*;
class Translation extends DepthFirstAdapter
{
- private ProgramStack<Token> programStack = new ProgramStack<>();
+ private ProgramStack<Type> programStack = new ProgramStack<>();
public void caseTNumber(TNumber node)
{
System.out.println("Pushing " + Integer.parseInt(node.getText()) + " to stack");
- programStack.push(node);
+ programStack.push(new Int(node.getText()));
System.out.println(programStack);
}
public void caseTDouble(TDouble node)
{
System.out.println("Pushing a double: " + Double.parseDouble(node.getText()));
- programStack.push(node);
+ programStack.push(new Decimal(node.getText()));
System.out.println(programStack);
}
@@ -25,108 +26,63 @@ class Translation extends DepthFirstAdapter
Double num = Double.parseDouble(programStack.pop().getText());
System.out.println("Popped " + num);
Double out = Math.sin(Math.toRadians(num));
- programStack.push(new TDouble(String.format("%f", out)));
+ programStack.push(new Decimal(out));
System.out.println("Pushed sin(" + num + ") = " + out + " to stack");
System.out.println(programStack);
}
public void outAPlusExpr(APlusExpr node)
{
- Double num2 = Double.parseDouble(programStack.pop().getText());
- Double num1 = Double.parseDouble(programStack.pop().getText());
- System.out.println("Popped " + num1 + " and " + num2 + " from stack");
- Double out = num1 + num2;
- if ((out % 1) == 0)
- {
- // the output is an integer, change types to save memory
- programStack.push(new TNumber(String.format("%d", out.intValue())));
- }
- else
- {
- programStack.push(new TDouble(String.format("%f", out)));
- }
-
- System.out.println("Pushed " + num1 + "+" + num2 + "=" + out + " to stack");
+ Type op2 = programStack.pop();
+ Type op1 = programStack.pop();
+ System.out.println("Popped " + op1 + " and " + op2 + " from stack");
+ Type out = op1.add(op2);
+ programStack.push(out);
+ System.out.println("Pushed " + op1 + "+" + op2 + "=" + out + " to stack");
System.out.println(programStack);
}
public void outAMinusExpr(AMinusExpr node)
{
- Double num2 = Double.parseDouble(programStack.pop().getText());
- Double num1 = Double.parseDouble(programStack.pop().getText());
- System.out.println("Popped " + num1 + " and " + num2 + " from stack");
- Double out = num1 - num2;
- if ((out % 1) == 0)
- {
- // the output is an integer, change types to save memory
- programStack.push(new TNumber(String.format("%d", out.intValue())));
- }
- else
- {
- programStack.push(new TDouble(String.format("%f", out)));
- }
-
- System.out.println("Pushed " + num1 + "-" + num2 + "=" + out + " to stack");
+ Type op2 = programStack.pop();
+ Type op1 = programStack.pop();
+ System.out.println("Popped " + op1 + " and " + op2 + " from stack");
+ Type out = op1.sub(op2);
+ programStack.push(out);
+ System.out.println("Pushed " + op1 + "-" + op2 + "=" + out + " to stack");
System.out.println(programStack);
}
public void outAMultFactor(AMultFactor node)
{
- Double num2 = Double.parseDouble(programStack.pop().getText());
- Double num1 = Double.parseDouble(programStack.pop().getText());
- System.out.println("Popped " + num1 + " and " + num2 + " from stack");
- Double out = num1 * num2;
- if ((out % 1) == 0)
- {
- // the output is an integer, change types to save memory
- programStack.push(new TNumber(String.format("%d", out.intValue())));
- }
- else
- {
- programStack.push(new TDouble(String.format("%f", out)));
- }
-
- System.out.println("Pushed " + num1 + "*" + num2 + "=" + out + " to stack");
+ Type op2 = programStack.pop();
+ Type op1 = programStack.pop();
+ System.out.println("Popped " + op1 + " and " + op2 + " from stack");
+ Type out = op1.mult(op2);
+ programStack.push(out);
+ System.out.println("Pushed " + op1 + "*" + op2 + "=" + out + " to stack");
System.out.println(programStack);
}
public void outADivFactor(ADivFactor node)
{
- Double num2 = Double.parseDouble(programStack.pop().getText());
- Double num1 = Double.parseDouble(programStack.pop().getText());
- System.out.println("Popped " + num1 + " and " + num2 + " from stack");
- Double out = num1 / num2;
- if ((out % 1) == 0)
- {
- // the output is an integer, change types to save memory
- programStack.push(new TNumber(String.format("%d", out.intValue())));
- }
- else
- {
- programStack.push(new TDouble(String.format("%f", out)));
- }
-
- System.out.println("Pushed " + num1 + "/" + num2 + "=" + out + " to stack");
+ Type op2 = programStack.pop();
+ Type op1 = programStack.pop();
+ System.out.println("Popped " + op1 + " and " + op2 + " from stack");
+ Type out = op1.div(op2);
+ programStack.push(out);
+ System.out.println("Pushed " + op1 + "/" + op2 + "=" + out + " to stack");
System.out.println(programStack);
}
public void outAModFactor(AModFactor node)
{
- Double num2 = Double.parseDouble(programStack.pop().getText());
- Double num1 = Double.parseDouble(programStack.pop().getText());
- System.out.println("Popped " + num1 + " and " + num2 + " from stack");
- Double out = num1 % num2;
- if ((out % 1) == 0)
- {
- // the output is an integer, change types to save memory
- programStack.push(new TNumber(String.format("%d", out.intValue())));
- }
- else
- {
- programStack.push(new TDouble(String.format("%f", out)));
- }
-
- System.out.println("Pushed " + num1 + "%" + num2 + "=" + out + " to stack");
+ Type op2 = programStack.pop();
+ Type op1 = programStack.pop();
+ System.out.println("Popped " + op1 + " and " + op2 + " from stack");
+ Type out = op1.mod(op2);
+ programStack.push(out);
+ System.out.println("Pushed " + op1 + "%" + op2 + "=" + out + " to stack");
System.out.println(programStack);
}
}