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

Properties

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