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, 9 months ago) by gezelter
File size: 11860 byte(s)
Log Message:
Added a satellites keyword to the inversion 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 1782 | componentblock
39     | moleculeblock
40     | zconstraintblock
41     | restraintblock
42     | flucqblock
43     | rnemdblock
44     | minimizerblock
45     ;
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 1782 int ival;
53     RealType dval, x, y, z;
54     Vector3d dvec;
55 tim 814 }
56 gezelter 1782 : 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 1782 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 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 gezelter 1902 vector<int> ivec;
215 cli2 1275 InversionStamp* currInversionStamp = static_cast<InversionStamp*>(blockStack.top());
216     }
217     : assignment
218     | #(CENTER icent=intConst) {currInversionStamp->setCenter(icent);}
219 gezelter 1902 | #(SATELLITES ivec=inttuple) {currInversionStamp->setSatellites(ivec);}
220 cli2 1275 ;
221    
222 tim 770 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 gezelter 1782 ;
277 tim 770
278    
279    
280 gezelter 1782 doubleNumberTuple returns [vector<RealType> dvec]
281 tim 770 {
282 gezelter 1782 RealType dval;
283     }
284     : (dval=doubleNumber {dvec.push_back(dval);})+
285     ;
286    
287    
288     inttuple returns [vector<int> ivec]
289 tim 770 {
290 gezelter 1782 int ival;
291 tim 770 }
292 gezelter 1782 : (ival=intConst {ivec.push_back(ival);})+
293     ;
294 tim 770
295     protected
296     intConst returns [int ival]
297 gezelter 1782 : i1:NUM_INT {ival = lexi_cast<int>(i1->getText());}
298     | i2:NUM_LONG {ival = lexi_cast<int>(i2->getText());}
299     ;
300 tim 770
301     protected
302 gezelter 1782 doubleNumber returns [RealType dval]
303     : ic:intConst {dval = lexi_cast<RealType>(ic->getText());}
304     | fc:floatConst {dval = lexi_cast<RealType>(fc->getText());}
305     ;
306 tim 770
307     protected
308 tim 963 floatConst returns [RealType dval]
309 gezelter 1782 : 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