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

# User Rev Content
1 tim 770 header
2     {
3     #include <stack>
4     #include "io/Globals.hpp"
5     #include "utils/StringUtils.hpp"
6     using namespace std;
7 gezelter 1390 using namespace OpenMD;
8 tim 770 }
9     options
10     {
11     language = "Cpp";
12     }
13    
14     class MDTreeParser extends TreeParser;
15    
16     options
17     {
18 gezelter 1277 k = 1;
19 tim 770 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 gezelter 1731 | componentblock
39     | moleculeblock
40     | zconstraintblock
41     | restraintblock
42     | flucqblock
43     | rnemdblock
44 gezelter 1746 | minimizerblock
45 gezelter 1731 ;
46 tim 770
47     assignment : #(ASSIGNEQUAL id:ID constant[#id]) //{blockStack.top()->assign(#ID->getText(),);}
48     ;
49    
50 tim 814 constant [ANTLR_USE_NAMESPACE(antlr)RefAST id]
51     {
52     int ival;
53 tim 963 RealType dval;
54 tim 814 }
55     : ival=intConst {blockStack.top()->assign(id->getText(), ival);}
56     | dval=floatConst {blockStack.top()->assign(id->getText(), dval);}
57 tim 770 | 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 cli2 1360
75     restraintblock : #(RESTRAINT {RestraintStamp* currRestraintStamp = new RestraintStamp(); blockStack.push(currRestraintStamp);}
76     (assignment)*
77     ENDBLOCK ) {blockStack.top()->validate();blockStack.pop(); currConf->addRestraintStamp(currRestraintStamp);}
78     ;
79 tim 770
80 gezelter 1731 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 gezelter 1746 minimizerblock : #(MINIMIZER {MinimizerParameters* minimizerPars = new MinimizerParameters(); blockStack.push(minimizerPars);}
91     (assignment)*
92     ENDBLOCK ) {blockStack.top()->validate();blockStack.pop(); currConf->addMinimizerParameters(minimizerPars);}
93     ;
94 gezelter 1731
95 gezelter 1746
96 tim 770 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 cli2 1275 | inversionblock
107 tim 770 | 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 tim 963 vector<RealType> dvec;
129 tim 770 AtomStamp* currAtomStamp = static_cast<AtomStamp*>(blockStack.top());
130    
131     }
132     : assignment
133 tim 814 | #(POSITION dvec=doubleNumberTuple) {currAtomStamp->setPosition(dvec);}
134     | #(ORIENTATION dvec=doubleNumberTuple) {currAtomStamp->setOrientation(dvec);}
135 tim 770 ;
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 cli2 1275 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 tim 770 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 tim 963 doubleNumberTuple returns [vector<RealType> dvec]
272 tim 770 {
273 tim 963 RealType dval;
274 tim 770 }
275 tim 814 : (dval=doubleNumber {dvec.push_back(dval);})+
276 tim 770 ;
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 tim 814 : i1:NUM_INT {ival = lexi_cast<int>(i1->getText());}
288     | i2:NUM_LONG {ival = lexi_cast<int>(i2->getText());}
289 tim 770 ;
290    
291     protected
292 tim 963 doubleNumber returns [RealType dval]
293 tim 810 :
294 tim 963 ic:intConst {dval = lexi_cast<RealType>(ic->getText());}
295     | fc:floatConst {dval = lexi_cast<RealType>(fc->getText());}
296 tim 810
297 tim 770 ;
298    
299     protected
300 tim 963 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 tim 770 ;
304 tim 810

Properties

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