ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/group/trunk/OOPSE-4/src/mdParser/MDTreeParser.g
Revision: 2513
Committed: Fri Dec 16 02:57:00 2005 UTC (18 years, 7 months ago) by tim
File size: 9546 byte(s)
Log Message:
replace grammar for numerical parsing

File Contents

# Content
1 header
2 {
3 #include <stack>
4 #include "io/Globals.hpp"
5 #include "utils/StringUtils.hpp"
6 using namespace std;
7 using namespace oopse;
8 }
9 options
10 {
11 language = "Cpp";
12 }
13
14 class MDTreeParser extends TreeParser;
15
16 options
17 {
18 k = 3;
19 importVocab = MD;
20 }
21 {
22 public:
23 Globals* walkTree(ANTLR_USE_NAMESPACE(antlr)RefAST tree)
24 {
25 currConf = new Globals;
26 blockStack.push(currConf);
27 mdfile(tree);
28 return currConf;
29 }
30 private:
31 Globals* currConf;
32 stack<DataHolder*> blockStack;
33 }
34 mdfile : (statement)* {blockStack.top()->validate(); blockStack.pop();}
35 ;
36
37 statement : assignment
38 | componentblock
39 | moleculeblock
40 | zconstraintblock
41 ;
42
43
44 assignment : #(ASSIGNEQUAL id:ID constant[#id]) //{blockStack.top()->assign(#ID->getText(),);}
45 ;
46
47 constant [ANTLR_USE_NAMESPACE(antlr)RefAST id]
48 {
49 int ival;
50 double dval;
51 }
52 : ival=intConst {blockStack.top()->assign(id->getText(), ival);}
53 | dval=floatConst {blockStack.top()->assign(id->getText(), dval);}
54 | str1:ID {blockStack.top()->assign(id->getText(), str1->getText());}
55 | str2:StringLiteral { std::string s = str2->getText();
56 s = s.substr(1, s.length()-2);
57 blockStack.top()->assign(id->getText(),s);
58 }
59 ;
60
61
62 componentblock : #(COMPONENT {Component* currComponet = new Component(); blockStack.push(currComponet);}
63 (assignment)*
64 ENDBLOCK ) {blockStack.top()->validate();blockStack.pop(); currConf->addComponent(currComponet);}
65 ;
66
67 zconstraintblock : #(ZCONSTRAINT {ZConsStamp* currZConsStamp = new ZConsStamp(); blockStack.push(currZConsStamp);}
68 (assignment)*
69 ENDBLOCK ) {blockStack.top()->validate();blockStack.pop(); currConf->addZConsStamp(currZConsStamp);}
70 ;
71
72 moleculeblock : #(MOLECULE {MoleculeStamp* currMoleculeStamp = new MoleculeStamp(); blockStack.push(currMoleculeStamp);}
73 (moleculestatement)*
74 ENDBLOCK ) {blockStack.top()->validate(); blockStack.pop(); currConf->addMoleculeStamp(currMoleculeStamp);}
75 ;
76
77 moleculestatement : assignment
78 | atomblock
79 | bondblock
80 | bendblock
81 | torsionblock
82 | rigidbodyblock
83 | cutoffgroupblock
84 | fragmentblock
85 ;
86
87 atomblock
88 {
89 int index;
90 }
91 : #(ATOM index=intConst {AtomStamp* currAtomStamp = new AtomStamp(index); blockStack.push(currAtomStamp);}
92 (atomstatement)*
93 ENDBLOCK ) {
94 blockStack.top()->validate();
95 blockStack.pop();
96 MoleculeStamp* currMoleculeStamp = static_cast<MoleculeStamp*>(blockStack.top());
97 currMoleculeStamp->addAtomStamp(currAtomStamp);
98 }
99 ;
100
101 atomstatement
102 {
103 vector<double> dvec;
104 AtomStamp* currAtomStamp = static_cast<AtomStamp*>(blockStack.top());
105
106 }
107 : assignment
108 | #(POSITION dvec=doubleNumberTuple) {currAtomStamp->setPosition(dvec);}
109 | #(ORIENTATION dvec=doubleNumberTuple) {currAtomStamp->setOrientation(dvec);}
110 ;
111
112
113 bondblock : #(BOND {BondStamp* currBondStamp = new BondStamp(); blockStack.push(currBondStamp);}
114 (bondstatement)*
115 ENDBLOCK ) {
116 blockStack.pop();
117 MoleculeStamp* currMoleculeStamp = static_cast<MoleculeStamp*>(blockStack.top());
118 currMoleculeStamp->addBondStamp(currBondStamp);
119 }
120 ;
121
122 bondstatement
123 {
124 vector<int> ivec;
125 BondStamp* currBondStamp = static_cast<BondStamp*>(blockStack.top());
126 }
127 : assignment
128 | #(MEMBERS ivec=inttuple) {currBondStamp->setMembers(ivec);}
129 ;
130
131 bendblock : #(BEND {BendStamp* currBendStamp = new BendStamp(); blockStack.push(currBendStamp);}
132 (bendstatement)*
133 ENDBLOCK) {
134 blockStack.top()->validate();
135 blockStack.pop();
136 MoleculeStamp* currMoleculeStamp = static_cast<MoleculeStamp*>(blockStack.top());
137 currMoleculeStamp->addBendStamp(currBendStamp);
138 }
139 ;
140
141 bendstatement
142 {
143 vector<int> ivec;
144 BendStamp* currBendStamp = static_cast<BendStamp*>(blockStack.top());
145 }
146 : assignment
147 | #(MEMBERS ivec=inttuple) {currBendStamp->setMembers(ivec);}
148 ;
149
150 torsionblock : #(TORSION {TorsionStamp* currTorsionStamp = new TorsionStamp(); blockStack.push(currTorsionStamp);}
151 (torsionstatement)*
152 ENDBLOCK ) {
153 blockStack.top()->validate();
154 blockStack.pop();
155 MoleculeStamp* currMoleculeStamp = static_cast<MoleculeStamp*>(blockStack.top());
156 currMoleculeStamp->addTorsionStamp(currTorsionStamp);
157 }
158 ;
159
160 torsionstatement
161 {
162 vector<int> ivec;
163 TorsionStamp* currTorsionStamp = static_cast<TorsionStamp*>(blockStack.top());
164 }
165 : assignment
166 | #(MEMBERS ivec=inttuple) {currTorsionStamp->setMembers(ivec);}
167 ;
168
169 rigidbodyblock
170 {
171 int index;
172 }
173 : #(RIGIDBODY index=intConst {RigidBodyStamp* currRigidBodyStamp = new RigidBodyStamp(index); blockStack.push(currRigidBodyStamp);}
174 (rigidbodystatement)*
175 ENDBLOCK ) {
176 blockStack.top()->validate();
177 blockStack.pop();
178 MoleculeStamp* currMoleculeStamp = static_cast<MoleculeStamp*>(blockStack.top());
179 currMoleculeStamp->addRigidBodyStamp(currRigidBodyStamp);
180 }
181 ;
182
183 rigidbodystatement
184 {
185 vector<int> ivec;
186 RigidBodyStamp* currRigidBodyStamp = static_cast<RigidBodyStamp*>(blockStack.top());
187 }
188 : assignment
189 | #(MEMBERS ivec=inttuple) {currRigidBodyStamp->setMembers(ivec);}
190 ;
191
192 cutoffgroupblock : #(CUTOFFGROUP {CutoffGroupStamp* currCutoffGroupStamp = new CutoffGroupStamp(); blockStack.push(currCutoffGroupStamp);}
193 (cutoffgroupstatement)*
194 ENDBLOCK ) {
195 blockStack.top()->validate();
196 blockStack.pop();
197 MoleculeStamp* currMoleculeStamp = static_cast<MoleculeStamp*>(blockStack.top());
198 currMoleculeStamp->addCutoffGroupStamp(currCutoffGroupStamp);
199 }
200 ;
201
202 cutoffgroupstatement
203 {
204 vector<int> ivec;
205 CutoffGroupStamp* currCutoffGroupStamp = static_cast<CutoffGroupStamp*>(blockStack.top());
206 }
207 : assignment
208 | #(MEMBERS ivec=inttuple) {currCutoffGroupStamp->setMembers(ivec);}
209 ;
210
211 fragmentblock {int ival;}
212 : #(FRAGMENT ival=intConst {FragmentStamp* currFragmentStamp = new FragmentStamp(ival); blockStack.push(currFragmentStamp);}
213 (fragmentstatement)*
214 ENDBLOCK) {
215 blockStack.top()->validate();
216 blockStack.pop();
217 MoleculeStamp* currMoleculeStamp = static_cast<MoleculeStamp*>(blockStack.top());
218 currMoleculeStamp->addFragmentStamp(currFragmentStamp);
219 }
220 ;
221
222 fragmentstatement : assignment
223 ;
224
225
226
227 doubleNumberTuple returns [vector<double> dvec]
228 {
229 double dval;
230 }
231 : (dval=doubleNumber {dvec.push_back(dval);})+
232 ;
233
234 inttuple returns [vector<int> ivec]
235 {
236 int ival;
237 }
238 : (ival=intConst {ivec.push_back(ival);})+
239 ;
240
241 protected
242 intConst returns [int ival]
243 : i1:NUM_INT {ival = lexi_cast<int>(i1->getText());}
244 | i2:NUM_LONG {ival = lexi_cast<int>(i2->getText());}
245 ;
246
247 protected
248 doubleNumber returns [double dval]
249 :
250 ic:intConst {dval = lexi_cast<double>(ic->getText());}
251 | fc:floatConst {dval = lexi_cast<double>(fc->getText());}
252
253 ;
254
255 protected
256 floatConst returns [double dval]
257 : d1:NUM_FLOAT {dval = lexi_cast<double>(d1->getText());}
258 | d2:NUM_DOUBLE {dval = lexi_cast<double>(d2->getText());}
259 ;
260

Properties

Name Value
svn:executable *