blob: a673edbeb3b5791436b4ce1436dffad2fd9e09dc (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
|
package sableCCCalculator;
import sableCCCalculator.analysis.*;
import sableCCCalculator.types.*;
import sableCCCalculator.node.*;
class Translation extends DepthFirstAdapter
{
private ProgramStack<Type> programStack = new ProgramStack<>();
public void caseTNumber(TNumber node)
{
System.out.println("Pushing " + Integer.parseInt(node.getText()) + " to stack");
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(new Decimal(node.getText()));
System.out.println(programStack);
}
public void outASineTerm(ASineTerm node)
{
Double num = Double.parseDouble(programStack.pop().getText());
System.out.println("Popped " + num);
Double out = Math.sin(Math.toRadians(num));
programStack.push(new Decimal(out));
System.out.println("Pushed sin(" + num + ") = " + out + " to stack");
System.out.println(programStack);
}
public void outAPlusExpr(APlusExpr node)
{
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)
{
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)
{
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)
{
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)
{
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);
}
}
|