(no commit message)
[oweals/gnunet.git] / src / monkey / seaspider / org / gnunet / seaspider / parser / visitors / GNUnetDepthFirstVisitor.java
1 package org.gnunet.seaspider.parser.visitors;
2 import java.util.ArrayList;
3
4 import org.gnunet.seaspider.parser.LineNumberInfo;
5 import org.gnunet.seaspider.parser.nodes.AssignmentOperator;
6 import org.gnunet.seaspider.parser.nodes.CompoundStatement;
7 import org.gnunet.seaspider.parser.nodes.Expression;
8
9
10 public class GNUnetDepthFirstVisitor extends DepthFirstVisitor {
11         /* Inner utilities classes */
12         private class Scope {
13                 public Scope(int scopeStart, int scopeEnd) {
14                         this.scopeStart = scopeStart;
15                         this.scopeEnd = scopeEnd;
16                 }
17                 public int scopeStart;
18                 public int scopeEnd;
19         }
20
21         private class ExpressionEntry {
22                 public ArrayList<ExpressionEntry> expressionComponents= new ArrayList<ExpressionEntry>();
23                 public LineNumberInfo lineNumberInfo;
24                 public Scope expressionScope;
25         }
26         
27         /* Fields */
28         private int current_endline;
29         private Scope currentScope;
30         private ExpressionEntry currentExpression;
31         
32         /* Methods */
33         /**
34     * f0 -> ConditionalExpression()
35     * f1 -> [ AssignmentOperator() Expression() ]
36     */
37         public void visit(Expression n) {
38                 currentExpression = new ExpressionEntry();
39                 currentExpression.lineNumberInfo = LineNumberInfo.get(n);
40                 currentExpression.expressionScope = currentScope;
41                 
42                 n.f0.accept(this);
43                 n.f1.accept(this);
44         }
45         
46         public void visit(AssignmentOperator n) {
47             n.f0.accept(this);
48         }
49            
50         /**
51     * <PRE>
52     * f0 -> "{"
53     * f1 -> ( LocalVariableDeclaration() | Statement() )*
54     * f2 -> "}"
55     * </PRE>
56     */
57     public void visit(CompoundStatement n) {            
58         currentScope.scopeStart = n.f0.endLine;
59         currentScope.scopeEnd = n.f2.endLine;
60         n.f0.accept(this);
61         n.f1.accept(this);
62         n.f2.accept(this);
63     }
64 }