-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathUnidadesSemanticCheck.java
executable file
·101 lines (69 loc) · 2.7 KB
/
UnidadesSemanticCheck.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
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
public class UnidadesSemanticCheck extends UnidadesBaseVisitor<Boolean> {
@Override
public Boolean visitCreate(UnidadesParser.CreateContext ctx) {
Boolean res = true;
String id = ctx.NAME().getText();
if (UnidadesParser.symbolTable.containsKey(id)) {
ErrorHandling.printError(ctx, "A variable named \"" + id + "\" was already declared!");
res = false;
} else
UnidadesParser.symbolTable.put(id, new UnitSymbol(id, tipo.simples));
return res;
}
@Override
public Boolean visitPow(UnidadesParser.PowContext ctx) {
Boolean res = true;
String id = ctx.NAME().getText();
USymbol s = UnidadesParser.symbolTable.get(id);
if (s.type != tipo.simples) {
ErrorHandling.printError(ctx, "Variable \"" + id + "\" should be Simple!");
res = false;
}
return res;
}
@Override
public Boolean visitCompose(UnidadesParser.ComposeContext ctx) {
Boolean res = true;
String id = ctx.NAME().getText();
if (UnidadesParser.symbolTable.containsKey(id)) {
ErrorHandling.printError(ctx, "A variable named \"" + id + "\" was already declared!");
res = false;
} else
UnidadesParser.symbolTable.put(id, new UnitSymbol(id, tipo.composta));
res = visitChildren(ctx);
return res;
}
@Override //verificar (garantir) se é simples
public Boolean visitCUnitName(UnidadesParser.CUnitNameContext ctx) {
Boolean res = true;
String id = ctx.NAME().getText();
USymbol s = UnidadesParser.symbolTable.get(id);
if(s == null ){
ErrorHandling.printError(ctx, "Variable \"" + id + "\" does not exist!");
return false;
}
if (s.type != tipo.simples) {
ErrorHandling.printError(ctx, "Variable \"" + id + "\" should be Simple!");
res = false;
}
return res;
}
@Override public Boolean visitValue(UnidadesParser.ValueContext ctx) {
String id = ctx.NAME().getText();
USymbol s = UnidadesParser.symbolTable.get(id);
if(s == null ){
ErrorHandling.printError(ctx, "Variable \"" + id + "\" does not exist!");
return false;
}
return true;
}
@Override public Boolean visitSetConvValue(UnidadesParser.SetConvValueContext ctx) {
visit(ctx.dtn);
String id = ctx.src.getText();
USymbol s = UnidadesParser.symbolTable.get(id);
if(s == null ){
ErrorHandling.printError(ctx, "Variable \"" + id + "\" does not exist!");
return false;
}
return true;}
}