/
ASTEvaluator.java
61 lines (54 loc) · 2.02 KB
/
ASTEvaluator.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
package antlrtest;
import antlrtest.PlayScriptParser.AdditiveExpressionContext;
import antlrtest.PlayScriptParser.LiteralContext;
import antlrtest.PlayScriptParser.MultiplicativeExpressionContext;
import antlrtest.PlayScriptParser.PrimaryExpressionContext;
/**
* 一个Vistor类,只简单的实现了整数的加减乘除。
*/
public class ASTEvaluator extends PlayScriptBaseVisitor<Integer> {
@Override
public Integer visitAdditiveExpression(AdditiveExpressionContext ctx) {
if (ctx.ADD() != null || ctx.SUB() != null) {
Integer left = visitAdditiveExpression(ctx.additiveExpression());
Integer right = visitMultiplicativeExpression(ctx.multiplicativeExpression());
if (ctx.ADD() != null) {
return left + right;
} else {
return left - right;
}
} else {
return visitMultiplicativeExpression(ctx.multiplicativeExpression());
}
}
@Override
public Integer visitMultiplicativeExpression(MultiplicativeExpressionContext ctx) {
if (ctx.MUL() != null || ctx.DIV() != null || ctx.MOD() != null) {
Integer left = visitMultiplicativeExpression(ctx.multiplicativeExpression());
Integer right = visitPrimaryExpression(ctx.primaryExpression());
if (ctx.MUL() != null) {
return left * right;
} else if (ctx.DIV() != null) {
return left / right;
} else {
return left % right;
}
} else {
return visitPrimaryExpression(ctx.primaryExpression());
}
}
@Override
public Integer visitPrimaryExpression(PrimaryExpressionContext ctx) {
if (ctx.literal() != null) {
return visitLiteral(ctx.literal());
}
return 0;
}
@Override
public Integer visitLiteral(LiteralContext ctx) {
if (ctx.IntegerLiteral() !=null){
return Integer.valueOf(ctx.IntegerLiteral().getText());
}
return 0;
}
}