-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathDebugVisitor.java
66 lines (62 loc) · 1.34 KB
/
DebugVisitor.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
package edu.lsu.cct.piraha;
public class DebugVisitor extends Visitor {
DebugOutput out;
public DebugVisitor(DebugOutput out) {
this.out = out;
}
public DebugVisitor() {
this.out = DebugOutput.out;
}
private void printChar(char c) {
if(c == ' ')
out.print("[ ]");
else
out.print(c);
}
@Override
public Visitor startVisit(Pattern p) {
String cn = p.getClass().getName();
int n = cn.lastIndexOf('.');
cn = cn.substring(n+1);
out.print(cn);
out.print(": ");
out.indent += 2;
if(p instanceof Literal) {
Literal ll = (Literal)p;
printChar(ll.ch);
} else if(p instanceof ILiteral) {
ILiteral il = (ILiteral)p;
printChar(il.lch);
} else if(p instanceof Name) {
Name nm = (Name)p;
out.print(nm.name);
} else if(p instanceof Range) {
Range r = (Range)p;
if(r.lo == r.hi)
printChar(r.lo);
else {
printChar(r.lo);
out.print(" to ");
printChar(r.hi);
}
} else if(p instanceof Multi) {
Multi m = (Multi)p;
if(m.min == m.max)
out.print(m.min);
else
out.print(m.min+" to "+m.max);
} else if(p instanceof Lookup) {
Lookup lo = (Lookup)p;
out.print(lo.lookup);
} else if(p instanceof Bracket) {
Bracket br = (Bracket)p;
out.print("neg="+br.neg);
}
out.println();
return this;
}
@Override
public void finishVisit(Pattern p) {
out.indent -= 2;
}
}