ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/OpenMD/trunk/src/mdParser/MDTreeParser.g
Revision: 1902
Committed: Tue Jul 16 17:16:45 2013 UTC (11 years, 10 months ago) by gezelter
File size: 11860 byte(s)
Log Message:
Added a satellites keyword to the inversion 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, 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 vector<int> ivec;
215 InversionStamp* currInversionStamp = static_cast<InversionStamp*>(blockStack.top());
216 }
217 : assignment
218 | #(CENTER icent=intConst) {currInversionStamp->setCenter(icent);}
219 | #(SATELLITES ivec=inttuple) {currInversionStamp->setSatellites(ivec);}
220 ;
221
222 rigidbodyblock
223 {
224 int index;
225 }
226 : #(RIGIDBODY index=intConst {RigidBodyStamp* currRigidBodyStamp = new RigidBodyStamp(index); blockStack.push(currRigidBodyStamp);}
227 (rigidbodystatement)*
228 ENDBLOCK ) {
229 blockStack.top()->validate();
230 blockStack.pop();
231 MoleculeStamp* currMoleculeStamp = static_cast<MoleculeStamp*>(blockStack.top());
232 currMoleculeStamp->addRigidBodyStamp(currRigidBodyStamp);
233 }
234 ;
235
236 rigidbodystatement
237 {
238 vector<int> ivec;
239 RigidBodyStamp* currRigidBodyStamp = static_cast<RigidBodyStamp*>(blockStack.top());
240 }
241 : assignment
242 | #(MEMBERS ivec=inttuple) {currRigidBodyStamp->setMembers(ivec);}
243 ;
244
245 cutoffgroupblock : #(CUTOFFGROUP {CutoffGroupStamp* currCutoffGroupStamp = new CutoffGroupStamp(); blockStack.push(currCutoffGroupStamp);}
246 (cutoffgroupstatement)*
247 ENDBLOCK ) {
248 blockStack.top()->validate();
249 blockStack.pop();
250 MoleculeStamp* currMoleculeStamp = static_cast<MoleculeStamp*>(blockStack.top());
251 currMoleculeStamp->addCutoffGroupStamp(currCutoffGroupStamp);
252 }
253 ;
254
255 cutoffgroupstatement
256 {
257 vector<int> ivec;
258 CutoffGroupStamp* currCutoffGroupStamp = static_cast<CutoffGroupStamp*>(blockStack.top());
259 }
260 : assignment
261 | #(MEMBERS ivec=inttuple) {currCutoffGroupStamp->setMembers(ivec);}
262 ;
263
264 fragmentblock {int ival;}
265 : #(FRAGMENT ival=intConst {FragmentStamp* currFragmentStamp = new FragmentStamp(ival); blockStack.push(currFragmentStamp);}
266 (fragmentstatement)*
267 ENDBLOCK) {
268 blockStack.top()->validate();
269 blockStack.pop();
270 MoleculeStamp* currMoleculeStamp = static_cast<MoleculeStamp*>(blockStack.top());
271 currMoleculeStamp->addFragmentStamp(currFragmentStamp);
272 }
273 ;
274
275 fragmentstatement : assignment
276 ;
277
278
279
280 doubleNumberTuple returns [vector<RealType> dvec]
281 {
282 RealType dval;
283 }
284 : (dval=doubleNumber {dvec.push_back(dval);})+
285 ;
286
287
288 inttuple returns [vector<int> ivec]
289 {
290 int ival;
291 }
292 : (ival=intConst {ivec.push_back(ival);})+
293 ;
294
295 protected
296 intConst returns [int ival]
297 : i1:NUM_INT {ival = lexi_cast<int>(i1->getText());}
298 | i2:NUM_LONG {ival = lexi_cast<int>(i2->getText());}
299 ;
300
301 protected
302 doubleNumber returns [RealType dval]
303 : ic:intConst {dval = lexi_cast<RealType>(ic->getText());}
304 | fc:floatConst {dval = lexi_cast<RealType>(fc->getText());}
305 ;
306
307 protected
308 floatConst returns [RealType dval]
309 : d1:NUM_FLOAT {dval = lexi_cast<RealType>(d1->getText());}
310 | d2:NUM_DOUBLE {dval = lexi_cast<RealType>(d2->getText());}
311 ;
312

Properties

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