-
Notifications
You must be signed in to change notification settings - Fork 0
/
calcGrammarBaseVisitorImpl.java
70 lines (69 loc) · 2.8 KB
/
calcGrammarBaseVisitorImpl.java
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
import generatedGrammar.calcGrammarBaseVisitor;
import generatedGrammar.calcGrammarParser;
public class calcGrammarBaseVisitorImpl extends calcGrammarBaseVisitor<Double> {
@Override
public Double visitAdd(calcGrammarParser.AddContext ctx) {
/**@param two data types matched with + on parsing
* @returns two values added together*/
return visit(ctx.addSub()) + visit(ctx.multDiv());
}
@Override
public Double visitSubtract(calcGrammarParser.SubtractContext ctx) {
/**param two data types matched with - on parsing
* @returns two values subtracted together*/
return visit(ctx.addSub()) - visit(ctx.multDiv());
}
@Override
public Double visitDivide(calcGrammarParser.DivideContext ctx) {
/**@param two data types matched with / on parsing
* @return two values divided*/
return visit(ctx.multDiv()) / visit(ctx.pow());
}
@Override
public Double visitMultiply(calcGrammarParser.MultiplyContext ctx) {
/**@param two data types matched with * on parsing
* @return two values multiplied*/
return visit(ctx.multDiv()) * visit(ctx.pow());
}
@Override
public Double visitInteger(calcGrammarParser.IntegerContext ctx) {
/**@param data matched to an integer data type
* @return data parsed as an integer, wrapped as a double for simplicity*/
return Double.parseDouble(String.valueOf(ctx.INT()));
}
@Override
public Double visitDouble(calcGrammarParser.DoubleContext ctx) {
/**@param data matched as a double data type
* @return data parsed as a double*/
return Double.parseDouble(ctx.DOUBLE().toString());
}
@Override
public Double visitParenthesis(calcGrammarParser.ParenthesisContext ctx) {
/**@param expression inside of parenthesis
* @returns parsed expression*/
return visit(ctx.addSub());
}
@Override
public Double visitRaisetoPower(calcGrammarParser.RaisetoPowerContext ctx) {
/**@param expression matched with power sign
* @returns expression raised to a power
*/
if(ctx.pow() != null)
return Math.pow(visit(ctx.negative()), visit(ctx.pow()));
return visit(ctx.negative());
}
@Override
public Double visitTimesNegativeOne(calcGrammarParser.TimesNegativeOneContext ctx) {
/**@param expression matched with unary minus
* @returns negative expression
*/
return -1 * visit(ctx.negative());
}
@Override
public Double visitCalculate(calcGrammarParser.CalculateContext ctx) {
/**@param expression at top of 'matching tree'
* @returns evaluated expression
*/
return visit(ctx.addSub());
}
}