ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/OpenMD/branches/development/src/mdParser/MDTreeParser.g
Revision: 1776
Committed: Thu Aug 9 15:52:59 2012 UTC (12 years, 8 months ago) by gezelter
File size: 11751 byte(s)
Log Message:
Fixes to mdParser to handle vector assignments, fixes for VelocityVerletIntegrator deleting rnemd_ when it doesn't exist yet.

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 gezelter 1776 int ival;
53     RealType dval, x, y, z;
54     Vector3d dvec;
55 tim 814 }
56 gezelter 1776 : 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 tim 770
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 cli2 1360
82     restraintblock : #(RESTRAINT {RestraintStamp* currRestraintStamp = new RestraintStamp(); blockStack.push(currRestraintStamp);}
83     (assignment)*
84     ENDBLOCK ) {blockStack.top()->validate();blockStack.pop(); currConf->addRestraintStamp(currRestraintStamp);}
85     ;
86 tim 770
87 gezelter 1731 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 gezelter 1746 minimizerblock : #(MINIMIZER {MinimizerParameters* minimizerPars = new MinimizerParameters(); blockStack.push(minimizerPars);}
98     (assignment)*
99     ENDBLOCK ) {blockStack.top()->validate();blockStack.pop(); currConf->addMinimizerParameters(minimizerPars);}
100     ;
101 gezelter 1731
102 gezelter 1746
103 tim 770 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 cli2 1275 | inversionblock
114 tim 770 | 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 tim 963 vector<RealType> dvec;
136 tim 770 AtomStamp* currAtomStamp = static_cast<AtomStamp*>(blockStack.top());
137    
138     }
139     : assignment
140 tim 814 | #(POSITION dvec=doubleNumberTuple) {currAtomStamp->setPosition(dvec);}
141     | #(ORIENTATION dvec=doubleNumberTuple) {currAtomStamp->setOrientation(dvec);}
142 tim 770 ;
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 cli2 1275 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     InversionStamp* currInversionStamp = static_cast<InversionStamp*>(blockStack.top());
215     }
216     : assignment
217     | #(CENTER icent=intConst) {currInversionStamp->setCenter(icent);}
218     ;
219    
220 tim 770 rigidbodyblock
221     {
222     int index;
223     }
224     : #(RIGIDBODY index=intConst {RigidBodyStamp* currRigidBodyStamp = new RigidBodyStamp(index); blockStack.push(currRigidBodyStamp);}
225     (rigidbodystatement)*
226     ENDBLOCK ) {
227     blockStack.top()->validate();
228     blockStack.pop();
229     MoleculeStamp* currMoleculeStamp = static_cast<MoleculeStamp*>(blockStack.top());
230     currMoleculeStamp->addRigidBodyStamp(currRigidBodyStamp);
231     }
232     ;
233    
234     rigidbodystatement
235     {
236     vector<int> ivec;
237     RigidBodyStamp* currRigidBodyStamp = static_cast<RigidBodyStamp*>(blockStack.top());
238     }
239     : assignment
240     | #(MEMBERS ivec=inttuple) {currRigidBodyStamp->setMembers(ivec);}
241     ;
242    
243     cutoffgroupblock : #(CUTOFFGROUP {CutoffGroupStamp* currCutoffGroupStamp = new CutoffGroupStamp(); blockStack.push(currCutoffGroupStamp);}
244     (cutoffgroupstatement)*
245     ENDBLOCK ) {
246     blockStack.top()->validate();
247     blockStack.pop();
248     MoleculeStamp* currMoleculeStamp = static_cast<MoleculeStamp*>(blockStack.top());
249     currMoleculeStamp->addCutoffGroupStamp(currCutoffGroupStamp);
250     }
251     ;
252    
253     cutoffgroupstatement
254     {
255     vector<int> ivec;
256     CutoffGroupStamp* currCutoffGroupStamp = static_cast<CutoffGroupStamp*>(blockStack.top());
257     }
258     : assignment
259     | #(MEMBERS ivec=inttuple) {currCutoffGroupStamp->setMembers(ivec);}
260     ;
261    
262     fragmentblock {int ival;}
263     : #(FRAGMENT ival=intConst {FragmentStamp* currFragmentStamp = new FragmentStamp(ival); blockStack.push(currFragmentStamp);}
264     (fragmentstatement)*
265     ENDBLOCK) {
266     blockStack.top()->validate();
267     blockStack.pop();
268     MoleculeStamp* currMoleculeStamp = static_cast<MoleculeStamp*>(blockStack.top());
269     currMoleculeStamp->addFragmentStamp(currFragmentStamp);
270     }
271     ;
272    
273     fragmentstatement : assignment
274 gezelter 1776 ;
275 tim 770
276    
277    
278 gezelter 1776 doubleNumberTuple returns [vector<RealType> dvec]
279 tim 770 {
280 gezelter 1776 RealType dval;
281     }
282     : (dval=doubleNumber {dvec.push_back(dval);})+
283     ;
284    
285    
286     inttuple returns [vector<int> ivec]
287 tim 770 {
288 gezelter 1776 int ival;
289 tim 770 }
290 gezelter 1776 : (ival=intConst {ivec.push_back(ival);})+
291     ;
292 tim 770
293     protected
294     intConst returns [int ival]
295 gezelter 1776 : i1:NUM_INT {ival = lexi_cast<int>(i1->getText());}
296     | i2:NUM_LONG {ival = lexi_cast<int>(i2->getText());}
297     ;
298 tim 770
299     protected
300 gezelter 1776 doubleNumber returns [RealType dval]
301     : ic:intConst {dval = lexi_cast<RealType>(ic->getText());}
302     | fc:floatConst {dval = lexi_cast<RealType>(fc->getText());}
303     ;
304 tim 770
305     protected
306 tim 963 floatConst returns [RealType dval]
307 gezelter 1776 : d1:NUM_FLOAT {dval = lexi_cast<RealType>(d1->getText());}
308     | d2:NUM_DOUBLE {dval = lexi_cast<RealType>(d2->getText());}
309     ;
310    

Properties

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