--- trunk/src/mdParser/MDTreeParser.g 2005/12/16 02:57:00 814 +++ branches/development/src/mdParser/MDTreeParser.g 2010/07/09 23:08:25 1465 @@ -4,7 +4,7 @@ using namespace std; #include "io/Globals.hpp" #include "utils/StringUtils.hpp" using namespace std; -using namespace oopse; +using namespace OpenMD; } options { @@ -15,7 +15,7 @@ options options { - k = 3; + k = 1; importVocab = MD; } { @@ -38,6 +38,7 @@ statement : assignment | componentblock | moleculeblock | zconstraintblock + | restraintblock ; @@ -47,7 +48,7 @@ constant [ANTLR_USE_NAMESPACE(antlr)RefAST id] constant [ANTLR_USE_NAMESPACE(antlr)RefAST id] { int ival; - double dval; + RealType dval; } : ival=intConst {blockStack.top()->assign(id->getText(), ival);} | dval=floatConst {blockStack.top()->assign(id->getText(), dval);} @@ -68,6 +69,11 @@ zconstraintblock : #(ZCONSTRAINT {ZConsStamp* currZCo (assignment)* ENDBLOCK ) {blockStack.top()->validate();blockStack.pop(); currConf->addZConsStamp(currZConsStamp);} ; + +restraintblock : #(RESTRAINT {RestraintStamp* currRestraintStamp = new RestraintStamp(); blockStack.push(currRestraintStamp);} + (assignment)* + ENDBLOCK ) {blockStack.top()->validate();blockStack.pop(); currConf->addRestraintStamp(currRestraintStamp);} + ; moleculeblock : #(MOLECULE {MoleculeStamp* currMoleculeStamp = new MoleculeStamp(); blockStack.push(currMoleculeStamp);} (moleculestatement)* @@ -79,6 +85,7 @@ moleculestatement : assignment | bondblock | bendblock | torsionblock + | inversionblock | rigidbodyblock | cutoffgroupblock | fragmentblock @@ -100,7 +107,7 @@ atomstatement atomstatement { -vector dvec; +vector dvec; AtomStamp* currAtomStamp = static_cast(blockStack.top()); } @@ -164,6 +171,25 @@ torsionstatement } : assignment | #(MEMBERS ivec=inttuple) {currTorsionStamp->setMembers(ivec);} + ; + +inversionblock : #(INVERSION {InversionStamp* currInversionStamp = new InversionStamp(); blockStack.push(currInversionStamp);} + (inversionstatement)* + ENDBLOCK ) { + blockStack.top()->validate(); + blockStack.pop(); + MoleculeStamp* currMoleculeStamp = static_cast(blockStack.top()); + currMoleculeStamp->addInversionStamp(currInversionStamp); + } + ; + +inversionstatement +{ + int icent; + InversionStamp* currInversionStamp = static_cast(blockStack.top()); +} + : assignment + | #(CENTER icent=intConst) {currInversionStamp->setCenter(icent);} ; rigidbodyblock @@ -224,9 +250,9 @@ fragmentstatement : assignment -doubleNumberTuple returns [vector dvec] +doubleNumberTuple returns [vector dvec] { - double dval; + RealType dval; } : (dval=doubleNumber {dvec.push_back(dval);})+ ; @@ -245,16 +271,16 @@ protected ; protected -doubleNumber returns [double dval] +doubleNumber returns [RealType dval] : - ic:intConst {dval = lexi_cast(ic->getText());} - | fc:floatConst {dval = lexi_cast(fc->getText());} + ic:intConst {dval = lexi_cast(ic->getText());} + | fc:floatConst {dval = lexi_cast(fc->getText());} ; protected -floatConst returns [double dval] - : d1:NUM_FLOAT {dval = lexi_cast(d1->getText());} - | d2:NUM_DOUBLE {dval = lexi_cast(d2->getText());} +floatConst returns [RealType dval] + : d1:NUM_FLOAT {dval = lexi_cast(d1->getText());} + | d2:NUM_DOUBLE {dval = lexi_cast(d2->getText());} ;