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

Last change on this file since 11 was 11, checked in by zeiss, 14 years ago
  • Property svn:mime-type set to text/plain
File size: 6.6 KB
Line 
1package de.ugoe.cs.swe.bnftools.visitor;
2
3import org.eclipse.emf.ecore.EObject;
4
5import com.sun.xml.internal.bind.v2.schemagen.xmlschema.Import;
6
7import de.ugoe.cs.swe.bnftools.ebnf.Atom;
8import de.ugoe.cs.swe.bnftools.ebnf.DefinitionList;
9import de.ugoe.cs.swe.bnftools.ebnf.EtsiBnf;
10import de.ugoe.cs.swe.bnftools.ebnf.ExtRule;
11import de.ugoe.cs.swe.bnftools.ebnf.GlobalCombinator;
12import de.ugoe.cs.swe.bnftools.ebnf.GroupedSequence;
13import de.ugoe.cs.swe.bnftools.ebnf.HookCombinator;
14import de.ugoe.cs.swe.bnftools.ebnf.MergeRule;
15import de.ugoe.cs.swe.bnftools.ebnf.OptionalSequence;
16import de.ugoe.cs.swe.bnftools.ebnf.RepeatedSequence;
17import de.ugoe.cs.swe.bnftools.ebnf.Rule;
18import de.ugoe.cs.swe.bnftools.ebnf.RuleCombinator;
19import de.ugoe.cs.swe.bnftools.ebnf.RuleReference;
20import de.ugoe.cs.swe.bnftools.ebnf.SectionHeading;
21import de.ugoe.cs.swe.bnftools.ebnf.SingleDefinition;
22import de.ugoe.cs.swe.bnftools.ebnf.StringRule;
23import de.ugoe.cs.swe.bnftools.ebnf.Term;
24
25public abstract class EbnfVisitor {
26       
27        protected EObject rootNode = null;
28
29        public EbnfVisitor() {
30        }
31
32        public EbnfVisitor(EObject rootNode) {
33                this.rootNode = rootNode;
34        }
35
36        public void accept() {
37                if (rootNode != null)
38                        accept(rootNode);
39        }
40
41        public void accept(EObject node) {
42                dispatcherBefore(node);
43                acceptInner(node);
44                dispatcherAfter(node);
45        }
46
47        private void acceptInner(EObject node) {
48                for (int i=0; i < node.eContents().size(); i++) {
49                        EObject currentNode = (EObject) node.eContents().get(i);
50                        dispatcherBefore(currentNode);
51                        acceptInner(currentNode);
52                        dispatcherAfter(currentNode);
53                }
54        }
55       
56        protected void dispatcherBefore(EObject node) {
57                // ugly, but no time to find a prettier solution
58                if (node instanceof EtsiBnf) {
59                        visitBefore((EtsiBnf) node);
60                } else if (node instanceof Atom) {
61                        visitBefore((Atom) node);
62                } else if (node instanceof DefinitionList) {
63                        visitBefore((DefinitionList) node);
64                } else if (node instanceof ExtRule) {
65                        visitBefore((ExtRule) node);
66                } else if (node instanceof GlobalCombinator) {
67                        visitBefore((GlobalCombinator) node);
68                } else if (node instanceof GroupedSequence) {
69                        visitBefore((GroupedSequence) node);
70                } else if (node instanceof HookCombinator) {
71                        visitBefore((HookCombinator) node);
72                } else if (node instanceof Import) {
73                        visitBefore((Import) node);
74                } else if (node instanceof MergeRule) {
75                        visitBefore((MergeRule) node);
76                } else if (node instanceof OptionalSequence) {
77                        visitBefore((OptionalSequence) node);
78                } else if (node instanceof RepeatedSequence) {
79                        visitBefore((RepeatedSequence) node);
80                } else if (node instanceof Rule) {
81                        visitBefore((Rule) node);
82                } else if (node instanceof RuleCombinator) {
83                        visitBefore((RuleCombinator) node);
84                } else if (node instanceof RuleReference) {
85                        visitBefore((RuleReference) node);
86                } else if (node instanceof SectionHeading) {
87                        visitBefore((SectionHeading) node);
88                } else if (node instanceof SingleDefinition) {
89                        visitBefore((SingleDefinition) node);
90                } else if (node instanceof StringRule) {
91                        visitBefore((StringRule) node);
92                } else if (node instanceof Term) {
93                        visitBefore((Term) node);
94                }
95        }
96       
97        protected void dispatcherAfter(EObject node) {
98                // ugly, but no time to find a prettier solution
99                if (node instanceof EtsiBnf) {
100                        visitAfter((EtsiBnf) node);
101                } else if (node instanceof Atom) {
102                        visitAfter((Atom) node);
103                } else if (node instanceof DefinitionList) {
104                        visitAfter((DefinitionList) node);
105                } else if (node instanceof ExtRule) {
106                        visitAfter((ExtRule) node);
107                } else if (node instanceof GlobalCombinator) {
108                        visitAfter((GlobalCombinator) node);
109                } else if (node instanceof GroupedSequence) {
110                        visitAfter((GroupedSequence) node);
111                } else if (node instanceof HookCombinator) {
112                        visitAfter((HookCombinator) node);
113                } else if (node instanceof Import) {
114                        visitAfter((Import) node);
115                } else if (node instanceof MergeRule) {
116                        visitAfter((MergeRule) node);
117                } else if (node instanceof OptionalSequence) {
118                        visitAfter((OptionalSequence) node);
119                } else if (node instanceof RepeatedSequence) {
120                        visitAfter((RepeatedSequence) node);
121                } else if (node instanceof Rule) {
122                        visitAfter((Rule) node);
123                } else if (node instanceof RuleCombinator) {
124                        visitAfter((RuleCombinator) node);
125                } else if (node instanceof RuleReference) {
126                        visitAfter((RuleReference) node);
127                } else if (node instanceof SectionHeading) {
128                        visitAfter((SectionHeading) node);
129                } else if (node instanceof SingleDefinition) {
130                        visitAfter((SingleDefinition) node);
131                } else if (node instanceof StringRule) {
132                        visitAfter((StringRule) node);
133                } else if (node instanceof Term) {
134                        visitAfter((Term) node);
135                }
136        }
137
138        protected void visitBefore(EtsiBnf node) {
139        }
140
141        protected void visitAfter(EtsiBnf node) {
142        }
143
144        protected void visitBefore(Atom node) {
145        }
146
147        protected void visitAfter(Atom node) {
148        }
149
150        protected void visitBefore(Term node) {
151        }
152
153        protected void visitAfter(Term node) {
154        }
155
156        protected void visitBefore(DefinitionList node) {
157        }
158
159        protected void visitAfter(DefinitionList node) {
160        }
161
162        protected void visitBefore(ExtRule node) {
163        }
164
165        protected void visitAfter(ExtRule node) {
166        }
167
168        protected void visitBefore(GlobalCombinator node) {
169        }
170
171        protected void visitAfter(GlobalCombinator node) {
172        }
173
174        protected void visitBefore(GroupedSequence node) {
175        }
176
177        protected void visitAfter(GroupedSequence node) {
178        }
179
180        protected void visitBefore(HookCombinator node) {
181        }
182
183        protected void visitAfter(HookCombinator node) {
184        }
185
186        protected void visitBefore(Import node) {
187        }
188
189        protected void visitAfter(Import node) {
190        }
191
192        protected void visitBefore(MergeRule node) {
193        }
194
195        protected void visitAfter(MergeRule node) {
196        }
197
198        protected void visitBefore(OptionalSequence node) {
199        }
200
201        protected void visitAfter(OptionalSequence node) {
202        }
203
204        protected void visitBefore(RepeatedSequence node) {
205        }
206
207        protected void visitAfter(RepeatedSequence node) {
208        }
209
210        protected void visitBefore(Rule node) {
211        }
212
213        protected void visitAfter(Rule node) {
214        }
215
216        protected void visitBefore(RuleCombinator node) {
217        }
218
219        protected void visitAfter(RuleCombinator node) {
220        }
221
222        protected void visitBefore(RuleReference node) {
223        }
224
225        protected void visitAfter(RuleReference node) {
226        }
227
228        protected void visitBefore(SectionHeading node) {
229        }
230
231        protected void visitAfter(SectionHeading node) {
232        }
233
234        protected void visitBefore(SingleDefinition node) {
235        }
236
237        protected void visitAfter(SingleDefinition node) {
238        }
239
240        protected void visitBefore(StringRule node) {
241        }
242
243        protected void visitAfter(StringRule node) {
244        }
245       
246}
Note: See TracBrowser for help on using the repository browser.