1 | package de.ugoe.cs.swe.bnftools.visitor;
|
---|
2 |
|
---|
3 | import java.util.Collections;
|
---|
4 |
|
---|
5 | import org.eclipse.emf.common.util.TreeIterator;
|
---|
6 | import org.eclipse.emf.ecore.EObject;
|
---|
7 | import org.eclipse.emf.ecore.util.EcoreUtil;
|
---|
8 |
|
---|
9 | import com.sun.xml.internal.bind.v2.schemagen.xmlschema.Import;
|
---|
10 |
|
---|
11 | import de.ugoe.cs.swe.bnftools.ebnf.Atom;
|
---|
12 | import de.ugoe.cs.swe.bnftools.ebnf.DefinitionList;
|
---|
13 | import de.ugoe.cs.swe.bnftools.ebnf.EtsiBnf;
|
---|
14 | import de.ugoe.cs.swe.bnftools.ebnf.ExtRule;
|
---|
15 | import de.ugoe.cs.swe.bnftools.ebnf.GlobalCombinator;
|
---|
16 | import de.ugoe.cs.swe.bnftools.ebnf.GroupedSequence;
|
---|
17 | import de.ugoe.cs.swe.bnftools.ebnf.HookCombinator;
|
---|
18 | import de.ugoe.cs.swe.bnftools.ebnf.MergeRule;
|
---|
19 | import de.ugoe.cs.swe.bnftools.ebnf.OptionalSequence;
|
---|
20 | import de.ugoe.cs.swe.bnftools.ebnf.RepeatedSequence;
|
---|
21 | import de.ugoe.cs.swe.bnftools.ebnf.Rule;
|
---|
22 | import de.ugoe.cs.swe.bnftools.ebnf.RuleCombinator;
|
---|
23 | import de.ugoe.cs.swe.bnftools.ebnf.RuleReference;
|
---|
24 | import de.ugoe.cs.swe.bnftools.ebnf.SectionHeading;
|
---|
25 | import de.ugoe.cs.swe.bnftools.ebnf.SingleDefinition;
|
---|
26 | import de.ugoe.cs.swe.bnftools.ebnf.StringRule;
|
---|
27 | import de.ugoe.cs.swe.bnftools.ebnf.Term;
|
---|
28 |
|
---|
29 | public 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 | }
|
---|