source: default/trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/visitor/EbnfVisitor.java @ 10

Last change on this file since 10 was 9, checked in by zeiss, 14 years ago
  • Property svn:mime-type set to text/plain
File size: 3.9 KB
Line 
1package de.ugoe.cs.swe.bnftools.visitor;
2
3import java.util.Collections;
4
5import org.eclipse.emf.common.util.TreeIterator;
6import org.eclipse.emf.ecore.EObject;
7import org.eclipse.emf.ecore.util.EcoreUtil;
8
9import com.sun.xml.internal.bind.v2.schemagen.xmlschema.Import;
10
11import de.ugoe.cs.swe.bnftools.ebnf.Atom;
12import de.ugoe.cs.swe.bnftools.ebnf.DefinitionList;
13import de.ugoe.cs.swe.bnftools.ebnf.EtsiBnf;
14import de.ugoe.cs.swe.bnftools.ebnf.ExtRule;
15import de.ugoe.cs.swe.bnftools.ebnf.GlobalCombinator;
16import de.ugoe.cs.swe.bnftools.ebnf.GroupedSequence;
17import de.ugoe.cs.swe.bnftools.ebnf.HookCombinator;
18import de.ugoe.cs.swe.bnftools.ebnf.MergeRule;
19import de.ugoe.cs.swe.bnftools.ebnf.OptionalSequence;
20import de.ugoe.cs.swe.bnftools.ebnf.RepeatedSequence;
21import de.ugoe.cs.swe.bnftools.ebnf.Rule;
22import de.ugoe.cs.swe.bnftools.ebnf.RuleCombinator;
23import de.ugoe.cs.swe.bnftools.ebnf.RuleReference;
24import de.ugoe.cs.swe.bnftools.ebnf.SectionHeading;
25import de.ugoe.cs.swe.bnftools.ebnf.SingleDefinition;
26import de.ugoe.cs.swe.bnftools.ebnf.StringRule;
27import de.ugoe.cs.swe.bnftools.ebnf.Term;
28
29public abstract class EbnfVisitor {
30        protected EObject rootNode = null;
31
32        public EbnfVisitor() {
33        }
34
35        public EbnfVisitor(EObject rootNode) {
36                this.rootNode = rootNode;
37        }
38
39        public void accept() {
40                if (rootNode != null)
41                        accept(rootNode);
42        }
43
44        public void accept(EObject node) {
45                TreeIterator<Object> it = EcoreUtil.getAllContents(Collections
46                                .singleton(node));
47
48                while (it.hasNext()) {
49                        EObject currentNode = (EObject) it.next();
50                        dispatcher(currentNode);
51                }
52        }
53
54        protected void dispatcher(EObject node) {
55                // ugly, but no time to find a prettier solution
56                if (node instanceof EtsiBnf) {
57                        visit((EtsiBnf) node);
58                } else if (node instanceof Atom) {
59                        visit((Atom) node);
60                } else if (node instanceof DefinitionList) {
61                        visit((DefinitionList) node);
62                } else if (node instanceof ExtRule) {
63                        visit((ExtRule) node);
64                } else if (node instanceof GlobalCombinator) {
65                        visit((GlobalCombinator) node);
66                } else if (node instanceof GroupedSequence) {
67                        visit((GroupedSequence) node);
68                } else if (node instanceof HookCombinator) {
69                        visit((HookCombinator) node);
70                } else if (node instanceof Import) {
71                        visit((Import) node);
72                } else if (node instanceof MergeRule) {
73                        visit((MergeRule) node);
74                } else if (node instanceof OptionalSequence) {
75                        visit((OptionalSequence) node);
76                } else if (node instanceof RepeatedSequence) {
77                        visit((RepeatedSequence) node);
78                } else if (node instanceof Rule) {
79                        visit((Rule) node);
80                } else if (node instanceof RuleCombinator) {
81                        visit((RuleCombinator) node);
82                } else if (node instanceof RuleReference) {
83                        visit((RuleReference) node);
84                } else if (node instanceof SectionHeading) {
85                        visit((SectionHeading) node);
86                } else if (node instanceof SingleDefinition) {
87                        visit((SingleDefinition) node);
88                } else if (node instanceof StringRule) {
89                        visit((StringRule) node);
90                } else if (node instanceof Term) {
91                        visit((Term) node);
92                }
93        }
94       
95        protected void visit(EtsiBnf node) {
96        }
97
98        protected void visit(Atom node) {
99        }
100
101        protected void visit(DefinitionList node) {
102        }
103
104        protected void visit(ExtRule node) {
105        }
106
107        protected void visit(GlobalCombinator node) {
108        }
109
110        protected void visit(GroupedSequence node) {
111        }
112
113        protected void visit(HookCombinator node) {
114        }
115
116        protected void visit(Import node) {
117        }
118
119        protected void visit(MergeRule node) {
120        }
121
122        protected void visit(OptionalSequence node) {
123        }
124
125        protected void visit(RepeatedSequence node) {
126        }
127
128        protected void visit(Rule node) {
129        }
130
131        protected void visit(RuleCombinator node) {
132        }
133
134        protected void visit(RuleReference node) {
135        }
136
137        protected void visit(SectionHeading node) {
138        }
139
140        protected void visit(SingleDefinition node) {
141        }
142
143        protected void visit(StringRule node) {
144        }
145
146        protected void visit(Term node) {
147        }
148
149}
Note: See TracBrowser for help on using the repository browser.