ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/OpenMD/branches/development/src/mdParser/MDTreeParser.g
Revision: 1776
Committed: Thu Aug 9 15:52:59 2012 UTC (12 years, 8 months ago) by gezelter
File size: 11751 byte(s)
Log Message:
Fixes to mdParser to handle vector assignments, fixes for VelocityVerletIntegrator deleting rnemd_ when it doesn't exist yet.

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 OpenMD;
8 }
9 options
10 {
11 language = "Cpp";
12 }
13
14 class MDTreeParser extends TreeParser;
15
16 options
17 {
18 k = 1;
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 | restraintblock
42 | flucqblock
43 | rnemdblock
44 | minimizerblock
45 ;
46
47 assignment : #(ASSIGNEQUAL id:ID constant[#id]) //{blockStack.top()->assign(#ID->getText(),);}
48 ;
49
50 constant [ANTLR_USE_NAMESPACE(antlr)RefAST id]
51 {
52 int ival;
53 RealType dval, x, y, z;
54 Vector3d dvec;
55 }
56 : ival=intConst {blockStack.top()->assign(id->getText(), ival);}
57 | dval=floatConst {blockStack.top()->assign(id->getText(), dval);}
58 | #(LPAREN x=doubleNumber COMMA y=doubleNumber COMMA z=doubleNumber RPAREN)
59 { dvec.x() = x;
60 dvec.y() = y;
61 dvec.z() = z;
62 blockStack.top()->assign(id->getText(), dvec);
63 }
64 | str1:ID {blockStack.top()->assign(id->getText(), str1->getText());}
65 | str2:StringLiteral {std::string s = str2->getText();
66 s = s.substr(1, s.length()-2);
67 blockStack.top()->assign(id->getText(),s);
68 }
69 ;
70
71
72 componentblock : #(COMPONENT {Component* currComponet = new Component(); blockStack.push(currComponet);}
73 (assignment)*
74 ENDBLOCK ) {blockStack.top()->validate();blockStack.pop(); currConf->addComponent(currComponet);}
75 ;
76
77 zconstraintblock : #(ZCONSTRAINT {ZConsStamp* currZConsStamp = new ZConsStamp(); blockStack.push(currZConsStamp);}
78 (assignment)*
79 ENDBLOCK ) {blockStack.top()->validate();blockStack.pop(); currConf->addZConsStamp(currZConsStamp);}
80 ;
81
82 restraintblock : #(RESTRAINT {RestraintStamp* currRestraintStamp = new RestraintStamp(); blockStack.push(currRestraintStamp);}
83 (assignment)*
84 ENDBLOCK ) {blockStack.top()->validate();blockStack.pop(); currConf->addRestraintStamp(currRestraintStamp);}
85 ;
86
87 flucqblock : #(FLUCQ {FluctuatingChargeParameters* flucQpars = new FluctuatingChargeParameters(); blockStack.push(flucQpars);}
88 (assignment)*
89 ENDBLOCK ) {blockStack.top()->validate();blockStack.pop(); currConf->addFluctuatingChargeParameters(flucQpars);}
90 ;
91
92 rnemdblock : #(RNEMD {RNEMDParameters* rnemdPars = new RNEMDParameters(); blockStack.push(rnemdPars);}
93 (assignment)*
94 ENDBLOCK ) {blockStack.top()->validate();blockStack.pop(); currConf->addRNEMDParameters(rnemdPars);}
95 ;
96
97 minimizerblock : #(MINIMIZER {MinimizerParameters* minimizerPars = new MinimizerParameters(); blockStack.push(minimizerPars);}
98 (assignment)*
99 ENDBLOCK ) {blockStack.top()->validate();blockStack.pop(); currConf->addMinimizerParameters(minimizerPars);}
100 ;
101
102
103 moleculeblock : #(MOLECULE {MoleculeStamp* currMoleculeStamp = new MoleculeStamp(); blockStack.push(currMoleculeStamp);}
104 (moleculestatement)*
105 ENDBLOCK ) {blockStack.top()->validate(); blockStack.pop(); currConf->addMoleculeStamp(currMoleculeStamp);}
106 ;
107
108 moleculestatement : assignment
109 | atomblock
110 | bondblock
111 | bendblock
112 | torsionblock
113 | inversionblock
114 | rigidbodyblock
115 | cutoffgroupblock
116 | fragmentblock
117 ;
118
119 atomblock
120 {
121 int index;
122 }
123 : #(ATOM index=intConst {AtomStamp* currAtomStamp = new AtomStamp(index); blockStack.push(currAtomStamp);}
124 (atomstatement)*
125 ENDBLOCK ) {
126 blockStack.top()->validate();
127 blockStack.pop();
128 MoleculeStamp* currMoleculeStamp = static_cast<MoleculeStamp*>(blockStack.top());
129 currMoleculeStamp->addAtomStamp(currAtomStamp);
130 }
131 ;
132
133 atomstatement
134 {
135 vector<RealType> dvec;
136 AtomStamp* currAtomStamp = static_cast<AtomStamp*>(blockStack.top());
137
138 }
139 : assignment
140 | #(POSITION dvec=doubleNumberTuple) {currAtomStamp->setPosition(dvec);}
141 | #(ORIENTATION dvec=doubleNumberTuple) {currAtomStamp->setOrientation(dvec);}
142 ;
143
144
145 bondblock : #(BOND {BondStamp* currBondStamp = new BondStamp(); blockStack.push(currBondStamp);}
146 (bondstatement)*
147 ENDBLOCK ) {
148 blockStack.pop();
149 MoleculeStamp* currMoleculeStamp = static_cast<MoleculeStamp*>(blockStack.top());
150 currMoleculeStamp->addBondStamp(currBondStamp);
151 }
152 ;
153
154 bondstatement
155 {
156 vector<int> ivec;
157 BondStamp* currBondStamp = static_cast<BondStamp*>(blockStack.top());
158 }
159 : assignment
160 | #(MEMBERS ivec=inttuple) {currBondStamp->setMembers(ivec);}
161 ;
162
163 bendblock : #(BEND {BendStamp* currBendStamp = new BendStamp(); blockStack.push(currBendStamp);}
164 (bendstatement)*
165 ENDBLOCK) {
166 blockStack.top()->validate();
167 blockStack.pop();
168 MoleculeStamp* currMoleculeStamp = static_cast<MoleculeStamp*>(blockStack.top());
169 currMoleculeStamp->addBendStamp(currBendStamp);
170 }
171 ;
172
173 bendstatement
174 {
175 vector<int> ivec;
176 BendStamp* currBendStamp = static_cast<BendStamp*>(blockStack.top());
177 }
178 : assignment
179 | #(MEMBERS ivec=inttuple) {currBendStamp->setMembers(ivec);}
180 ;
181
182 torsionblock : #(TORSION {TorsionStamp* currTorsionStamp = new TorsionStamp(); blockStack.push(currTorsionStamp);}
183 (torsionstatement)*
184 ENDBLOCK ) {
185 blockStack.top()->validate();
186 blockStack.pop();
187 MoleculeStamp* currMoleculeStamp = static_cast<MoleculeStamp*>(blockStack.top());
188 currMoleculeStamp->addTorsionStamp(currTorsionStamp);
189 }
190 ;
191
192 torsionstatement
193 {
194 vector<int> ivec;
195 TorsionStamp* currTorsionStamp = static_cast<TorsionStamp*>(blockStack.top());
196 }
197 : assignment
198 | #(MEMBERS ivec=inttuple) {currTorsionStamp->setMembers(ivec);}
199 ;
200
201 inversionblock : #(INVERSION {InversionStamp* currInversionStamp = new InversionStamp(); blockStack.push(currInversionStamp);}
202 (inversionstatement)*
203 ENDBLOCK ) {
204 blockStack.top()->validate();
205 blockStack.pop();
206 MoleculeStamp* currMoleculeStamp = static_cast<MoleculeStamp*>(blockStack.top());
207 currMoleculeStamp->addInversionStamp(currInversionStamp);
208 }
209 ;
210
211 inversionstatement
212 {
213 int icent;
214 InversionStamp* currInversionStamp = static_cast<InversionStamp*>(blockStack.top());
215 }
216 : assignment
217 | #(CENTER icent=intConst) {currInversionStamp->setCenter(icent);}
218 ;
219
220 rigidbodyblock
221 {
222 int index;
223 }
224 : #(RIGIDBODY index=intConst {RigidBodyStamp* currRigidBodyStamp = new RigidBodyStamp(index); blockStack.push(currRigidBodyStamp);}
225 (rigidbodystatement)*
226 ENDBLOCK ) {
227 blockStack.top()->validate();
228 blockStack.pop();
229 MoleculeStamp* currMoleculeStamp = static_cast<MoleculeStamp*>(blockStack.top());
230 currMoleculeStamp->addRigidBodyStamp(currRigidBodyStamp);
231 }
232 ;
233
234 rigidbodystatement
235 {
236 vector<int> ivec;
237 RigidBodyStamp* currRigidBodyStamp = static_cast<RigidBodyStamp*>(blockStack.top());
238 }
239 : assignment
240 | #(MEMBERS ivec=inttuple) {currRigidBodyStamp->setMembers(ivec);}
241 ;
242
243 cutoffgroupblock : #(CUTOFFGROUP {CutoffGroupStamp* currCutoffGroupStamp = new CutoffGroupStamp(); blockStack.push(currCutoffGroupStamp);}
244 (cutoffgroupstatement)*
245 ENDBLOCK ) {
246 blockStack.top()->validate();
247 blockStack.pop();
248 MoleculeStamp* currMoleculeStamp = static_cast<MoleculeStamp*>(blockStack.top());
249 currMoleculeStamp->addCutoffGroupStamp(currCutoffGroupStamp);
250 }
251 ;
252
253 cutoffgroupstatement
254 {
255 vector<int> ivec;
256 CutoffGroupStamp* currCutoffGroupStamp = static_cast<CutoffGroupStamp*>(blockStack.top());
257 }
258 : assignment
259 | #(MEMBERS ivec=inttuple) {currCutoffGroupStamp->setMembers(ivec);}
260 ;
261
262 fragmentblock {int ival;}
263 : #(FRAGMENT ival=intConst {FragmentStamp* currFragmentStamp = new FragmentStamp(ival); blockStack.push(currFragmentStamp);}
264 (fragmentstatement)*
265 ENDBLOCK) {
266 blockStack.top()->validate();
267 blockStack.pop();
268 MoleculeStamp* currMoleculeStamp = static_cast<MoleculeStamp*>(blockStack.top());
269 currMoleculeStamp->addFragmentStamp(currFragmentStamp);
270 }
271 ;
272
273 fragmentstatement : assignment
274 ;
275
276
277
278 doubleNumberTuple returns [vector<RealType> dvec]
279 {
280 RealType dval;
281 }
282 : (dval=doubleNumber {dvec.push_back(dval);})+
283 ;
284
285
286 inttuple returns [vector<int> ivec]
287 {
288 int ival;
289 }
290 : (ival=intConst {ivec.push_back(ival);})+
291 ;
292
293 protected
294 intConst returns [int ival]
295 : i1:NUM_INT {ival = lexi_cast<int>(i1->getText());}
296 | i2:NUM_LONG {ival = lexi_cast<int>(i2->getText());}
297 ;
298
299 protected
300 doubleNumber returns [RealType dval]
301 : ic:intConst {dval = lexi_cast<RealType>(ic->getText());}
302 | fc:floatConst {dval = lexi_cast<RealType>(fc->getText());}
303 ;
304
305 protected
306 floatConst returns [RealType dval]
307 : d1:NUM_FLOAT {dval = lexi_cast<RealType>(d1->getText());}
308 | d2:NUM_DOUBLE {dval = lexi_cast<RealType>(d2->getText());}
309 ;
310

Properties

Name Value
svn:executable *
svn:keywords Author Id Revision Date