--- trunk/src/mdParser/MDTreeParser.g 2013/07/16 17:16:45 1902 +++ trunk/src/mdParser/MDTreeParser.g 2014/10/22 12:23:59 2026 @@ -51,21 +51,19 @@ constant [ANTLR_USE_NAMESPACE(antlr)RefAST id] { int ival; RealType dval, x, y, z; - Vector3d dvec; + std::vector dvec; } : 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); } + | #(LPAREN dvec=doubleNumberTuple RPAREN) + { + blockStack.top()->assign(id->getText(), dvec); + } ; @@ -114,6 +112,7 @@ moleculestatement : assignment | rigidbodyblock | cutoffgroupblock | fragmentblock + | constraintblock ; atomblock @@ -274,7 +273,24 @@ 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); + } + ; +constraintstatement +{ + vector ivec; + ConstraintStamp* currConstraintStamp = static_cast(blockStack.top()); +} + : assignment + | #(MEMBERS ivec=inttuple) {currConstraintStamp->setMembers(ivec);} + ; doubleNumberTuple returns [vector dvec]