ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/OpenMD/trunk/src/mdParser/MDTreeParser.g
Revision: 1979
Committed: Sat Apr 5 20:56:01 2014 UTC (11 years, 1 month ago) by gezelter
File size: 12680 byte(s)
Log Message:
* Changed the stdDev printouts in RNEMD stats to the 95% confidence intervals
* Added the ability to specify non-bonded constraints in a molecule
* Added the ability to do selection offsets in the pAngle staticProps module

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 | constraintblock
118 ;
119
120 atomblock
121 {
122 int index;
123 }
124 : #(ATOM index=intConst {AtomStamp* currAtomStamp = new AtomStamp(index); blockStack.push(currAtomStamp);}
125 (atomstatement)*
126 ENDBLOCK ) {
127 blockStack.top()->validate();
128 blockStack.pop();
129 MoleculeStamp* currMoleculeStamp = static_cast<MoleculeStamp*>(blockStack.top());
130 currMoleculeStamp->addAtomStamp(currAtomStamp);
131 }
132 ;
133
134 atomstatement
135 {
136 vector<RealType> dvec;
137 AtomStamp* currAtomStamp = static_cast<AtomStamp*>(blockStack.top());
138
139 }
140 : assignment
141 | #(POSITION dvec=doubleNumberTuple) {currAtomStamp->setPosition(dvec);}
142 | #(ORIENTATION dvec=doubleNumberTuple) {currAtomStamp->setOrientation(dvec);}
143 ;
144
145
146 bondblock : #(BOND {BondStamp* currBondStamp = new BondStamp(); blockStack.push(currBondStamp);}
147 (bondstatement)*
148 ENDBLOCK ) {
149 blockStack.pop();
150 MoleculeStamp* currMoleculeStamp = static_cast<MoleculeStamp*>(blockStack.top());
151 currMoleculeStamp->addBondStamp(currBondStamp);
152 }
153 ;
154
155 bondstatement
156 {
157 vector<int> ivec;
158 BondStamp* currBondStamp = static_cast<BondStamp*>(blockStack.top());
159 }
160 : assignment
161 | #(MEMBERS ivec=inttuple) {currBondStamp->setMembers(ivec);}
162 ;
163
164 bendblock : #(BEND {BendStamp* currBendStamp = new BendStamp(); blockStack.push(currBendStamp);}
165 (bendstatement)*
166 ENDBLOCK) {
167 blockStack.top()->validate();
168 blockStack.pop();
169 MoleculeStamp* currMoleculeStamp = static_cast<MoleculeStamp*>(blockStack.top());
170 currMoleculeStamp->addBendStamp(currBendStamp);
171 }
172 ;
173
174 bendstatement
175 {
176 vector<int> ivec;
177 BendStamp* currBendStamp = static_cast<BendStamp*>(blockStack.top());
178 }
179 : assignment
180 | #(MEMBERS ivec=inttuple) {currBendStamp->setMembers(ivec);}
181 ;
182
183 torsionblock : #(TORSION {TorsionStamp* currTorsionStamp = new TorsionStamp(); blockStack.push(currTorsionStamp);}
184 (torsionstatement)*
185 ENDBLOCK ) {
186 blockStack.top()->validate();
187 blockStack.pop();
188 MoleculeStamp* currMoleculeStamp = static_cast<MoleculeStamp*>(blockStack.top());
189 currMoleculeStamp->addTorsionStamp(currTorsionStamp);
190 }
191 ;
192
193 torsionstatement
194 {
195 vector<int> ivec;
196 TorsionStamp* currTorsionStamp = static_cast<TorsionStamp*>(blockStack.top());
197 }
198 : assignment
199 | #(MEMBERS ivec=inttuple) {currTorsionStamp->setMembers(ivec);}
200 ;
201
202 inversionblock : #(INVERSION {InversionStamp* currInversionStamp = new InversionStamp(); blockStack.push(currInversionStamp);}
203 (inversionstatement)*
204 ENDBLOCK ) {
205 blockStack.top()->validate();
206 blockStack.pop();
207 MoleculeStamp* currMoleculeStamp = static_cast<MoleculeStamp*>(blockStack.top());
208 currMoleculeStamp->addInversionStamp(currInversionStamp);
209 }
210 ;
211
212 inversionstatement
213 {
214 int icent;
215 vector<int> ivec;
216 InversionStamp* currInversionStamp = static_cast<InversionStamp*>(blockStack.top());
217 }
218 : assignment
219 | #(CENTER icent=intConst) {currInversionStamp->setCenter(icent);}
220 | #(SATELLITES ivec=inttuple) {currInversionStamp->setSatellites(ivec);}
221 ;
222
223 rigidbodyblock
224 {
225 int index;
226 }
227 : #(RIGIDBODY index=intConst {RigidBodyStamp* currRigidBodyStamp = new RigidBodyStamp(index); blockStack.push(currRigidBodyStamp);}
228 (rigidbodystatement)*
229 ENDBLOCK ) {
230 blockStack.top()->validate();
231 blockStack.pop();
232 MoleculeStamp* currMoleculeStamp = static_cast<MoleculeStamp*>(blockStack.top());
233 currMoleculeStamp->addRigidBodyStamp(currRigidBodyStamp);
234 }
235 ;
236
237 rigidbodystatement
238 {
239 vector<int> ivec;
240 RigidBodyStamp* currRigidBodyStamp = static_cast<RigidBodyStamp*>(blockStack.top());
241 }
242 : assignment
243 | #(MEMBERS ivec=inttuple) {currRigidBodyStamp->setMembers(ivec);}
244 ;
245
246 cutoffgroupblock : #(CUTOFFGROUP {CutoffGroupStamp* currCutoffGroupStamp = new CutoffGroupStamp(); blockStack.push(currCutoffGroupStamp);}
247 (cutoffgroupstatement)*
248 ENDBLOCK ) {
249 blockStack.top()->validate();
250 blockStack.pop();
251 MoleculeStamp* currMoleculeStamp = static_cast<MoleculeStamp*>(blockStack.top());
252 currMoleculeStamp->addCutoffGroupStamp(currCutoffGroupStamp);
253 }
254 ;
255
256 cutoffgroupstatement
257 {
258 vector<int> ivec;
259 CutoffGroupStamp* currCutoffGroupStamp = static_cast<CutoffGroupStamp*>(blockStack.top());
260 }
261 : assignment
262 | #(MEMBERS ivec=inttuple) {currCutoffGroupStamp->setMembers(ivec);}
263 ;
264
265 fragmentblock {int ival;}
266 : #(FRAGMENT ival=intConst {FragmentStamp* currFragmentStamp = new FragmentStamp(ival); blockStack.push(currFragmentStamp);}
267 (fragmentstatement)*
268 ENDBLOCK) {
269 blockStack.top()->validate();
270 blockStack.pop();
271 MoleculeStamp* currMoleculeStamp = static_cast<MoleculeStamp*>(blockStack.top());
272 currMoleculeStamp->addFragmentStamp(currFragmentStamp);
273 }
274 ;
275
276 fragmentstatement : assignment
277 ;
278
279 constraintblock : #(CONSTRAINT {ConstraintStamp* currConstraintStamp = new ConstraintStamp(); blockStack.push(currConstraintStamp);}
280 (constraintstatement)*
281 ENDBLOCK ) {
282 blockStack.pop();
283 MoleculeStamp* currMoleculeStamp = static_cast<MoleculeStamp*>(blockStack.top());
284 currMoleculeStamp->addConstraintStamp(currConstraintStamp);
285 }
286 ;
287
288 constraintstatement
289 {
290 vector<int> ivec;
291 ConstraintStamp* currConstraintStamp = static_cast<ConstraintStamp*>(blockStack.top());
292 }
293 : assignment
294 | #(MEMBERS ivec=inttuple) {currConstraintStamp->setMembers(ivec);}
295 ;
296
297
298 doubleNumberTuple returns [vector<RealType> dvec]
299 {
300 RealType dval;
301 }
302 : (dval=doubleNumber {dvec.push_back(dval);})+
303 ;
304
305
306 inttuple returns [vector<int> ivec]
307 {
308 int ival;
309 }
310 : (ival=intConst {ivec.push_back(ival);})+
311 ;
312
313 protected
314 intConst returns [int ival]
315 : i1:NUM_INT {ival = lexi_cast<int>(i1->getText());}
316 | i2:NUM_LONG {ival = lexi_cast<int>(i2->getText());}
317 ;
318
319 protected
320 doubleNumber returns [RealType dval]
321 : ic:intConst {dval = lexi_cast<RealType>(ic->getText());}
322 | fc:floatConst {dval = lexi_cast<RealType>(fc->getText());}
323 ;
324
325 protected
326 floatConst returns [RealType dval]
327 : d1:NUM_FLOAT {dval = lexi_cast<RealType>(d1->getText());}
328 | d2:NUM_DOUBLE {dval = lexi_cast<RealType>(d2->getText());}
329 ;
330

Properties

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