ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/OpenMD/branches/development/src/mdParser/MDTreeParser.g
Revision: 1746
Committed: Wed Jun 6 02:18:54 2012 UTC (12 years, 11 months ago) by gezelter
File size: 11769 byte(s)
Log Message:
added a minimizer parsing block

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

Properties

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