--- trunk/src/mdParser/MDTreeParser.g 2009/11/25 20:02:06 1390 +++ trunk/src/mdParser/MDTreeParser.g 2014/04/05 20:56:01 1979 @@ -35,29 +35,38 @@ statement : assignment ; statement : assignment - | componentblock - | moleculeblock - | zconstraintblock - | restraintblock - ; + | componentblock + | moleculeblock + | zconstraintblock + | restraintblock + | flucqblock + | rnemdblock + | minimizerblock + ; - assignment : #(ASSIGNEQUAL id:ID constant[#id]) //{blockStack.top()->assign(#ID->getText(),);} ; constant [ANTLR_USE_NAMESPACE(antlr)RefAST id] { - int ival; - RealType dval; + int ival; + RealType dval, x, y, z; + Vector3d dvec; } - : ival=intConst {blockStack.top()->assign(id->getText(), ival);} - | dval=floatConst {blockStack.top()->assign(id->getText(), dval);} - | str1:ID {blockStack.top()->assign(id->getText(), str1->getText());} - | str2:StringLiteral { std::string s = str2->getText(); - s = s.substr(1, s.length()-2); - blockStack.top()->assign(id->getText(),s); - } - ; + : ival=intConst {blockStack.top()->assign(id->getText(), ival);} + | dval=floatConst {blockStack.top()->assign(id->getText(), dval);} + | #(LPAREN x=doubleNumber COMMA y=doubleNumber COMMA z=doubleNumber RPAREN) + { dvec.x() = x; + dvec.y() = y; + dvec.z() = z; + blockStack.top()->assign(id->getText(), dvec); + } + | str1:ID {blockStack.top()->assign(id->getText(), str1->getText());} + | str2:StringLiteral {std::string s = str2->getText(); + s = s.substr(1, s.length()-2); + blockStack.top()->assign(id->getText(),s); + } + ; componentblock : #(COMPONENT {Component* currComponet = new Component(); blockStack.push(currComponet);} @@ -75,6 +84,22 @@ restraintblock : #(RESTRAINT {RestraintStamp* currRes ENDBLOCK ) {blockStack.top()->validate();blockStack.pop(); currConf->addRestraintStamp(currRestraintStamp);} ; +flucqblock : #(FLUCQ {FluctuatingChargeParameters* flucQpars = new FluctuatingChargeParameters(); blockStack.push(flucQpars);} + (assignment)* + ENDBLOCK ) {blockStack.top()->validate();blockStack.pop(); currConf->addFluctuatingChargeParameters(flucQpars);} + ; + +rnemdblock : #(RNEMD {RNEMDParameters* rnemdPars = new RNEMDParameters(); blockStack.push(rnemdPars);} + (assignment)* + ENDBLOCK ) {blockStack.top()->validate();blockStack.pop(); currConf->addRNEMDParameters(rnemdPars);} + ; + +minimizerblock : #(MINIMIZER {MinimizerParameters* minimizerPars = new MinimizerParameters(); blockStack.push(minimizerPars);} + (assignment)* + ENDBLOCK ) {blockStack.top()->validate();blockStack.pop(); currConf->addMinimizerParameters(minimizerPars);} + ; + + moleculeblock : #(MOLECULE {MoleculeStamp* currMoleculeStamp = new MoleculeStamp(); blockStack.push(currMoleculeStamp);} (moleculestatement)* ENDBLOCK ) {blockStack.top()->validate(); blockStack.pop(); currConf->addMoleculeStamp(currMoleculeStamp);} @@ -89,6 +114,7 @@ moleculestatement : assignment | rigidbodyblock | cutoffgroupblock | fragmentblock + | constraintblock ; atomblock @@ -186,10 +212,12 @@ inversionstatement inversionstatement { int icent; + vector ivec; InversionStamp* currInversionStamp = static_cast(blockStack.top()); } : assignment | #(CENTER icent=intConst) {currInversionStamp->setCenter(icent);} + | #(SATELLITES ivec=inttuple) {currInversionStamp->setSatellites(ivec);} ; rigidbodyblock @@ -246,41 +274,57 @@ fragmentstatement : assignment ; fragmentstatement : assignment - ; + ; + +constraintblock : #(CONSTRAINT {ConstraintStamp* currConstraintStamp = new ConstraintStamp(); blockStack.push(currConstraintStamp);} + (constraintstatement)* + ENDBLOCK ) { + blockStack.pop(); + MoleculeStamp* currMoleculeStamp = static_cast(blockStack.top()); + currMoleculeStamp->addConstraintStamp(currConstraintStamp); + } + ; - - -doubleNumberTuple returns [vector dvec] +constraintstatement { - RealType dval; + vector ivec; + ConstraintStamp* currConstraintStamp = static_cast(blockStack.top()); } - : (dval=doubleNumber {dvec.push_back(dval);})+ + : assignment + | #(MEMBERS ivec=inttuple) {currConstraintStamp->setMembers(ivec);} ; - -inttuple returns [vector ivec] + + +doubleNumberTuple returns [vector dvec] { - int ival; + RealType dval; +} + : (dval=doubleNumber {dvec.push_back(dval);})+ + ; + + +inttuple returns [vector ivec] +{ + int ival; } - : (ival=intConst {ivec.push_back(ival);})+ - ; + : (ival=intConst {ivec.push_back(ival);})+ + ; protected intConst returns [int ival] - : i1:NUM_INT {ival = lexi_cast(i1->getText());} - | i2:NUM_LONG {ival = lexi_cast(i2->getText());} - ; + : i1:NUM_INT {ival = lexi_cast(i1->getText());} + | i2:NUM_LONG {ival = lexi_cast(i2->getText());} + ; protected -doubleNumber returns [RealType dval] - : - ic:intConst {dval = lexi_cast(ic->getText());} - | fc:floatConst {dval = lexi_cast(fc->getText());} - - ; +doubleNumber returns [RealType dval] + : ic:intConst {dval = lexi_cast(ic->getText());} + | fc:floatConst {dval = lexi_cast(fc->getText());} + ; protected floatConst returns [RealType dval] - : d1:NUM_FLOAT {dval = lexi_cast(d1->getText());} - | d2:NUM_DOUBLE {dval = lexi_cast(d2->getText());} - ; - + : d1:NUM_FLOAT {dval = lexi_cast(d1->getText());} + | d2:NUM_DOUBLE {dval = lexi_cast(d2->getText());} + ; +