def p_EndpointSection(p): '''EndpointSection : Identifier CURLY_LEFT EndpointBodySection CURLY_RIGHT | Identifier CURLY_LEFT CURLY_RIGHT''' p[0] = AstNode(AST_ENDPOINT,p[1].lineNo,p[1].linePos); p[0].addChild(p[1]); if (len(p) == 5): p[0].addChild(p[3]); elif len(p) == 4: # means that we had nothing defined in the endpoint create # empty versions so that type checking gets what it expects. bodySecChild = AstNode(AST_ENDPOINT_BODY_SECTION,p[1].lineNo,p[1].linePos); bodyGlobSec = AstNode(AST_ENDPOINT_GLOBAL_SECTION,p[1].lineNo,p[1].linePos); funcGlobSec = AstNode(AST_ENDPOINT_FUNCTION_SECTION,p[1].lineNo,p[1].linePos); bodySecChild.addChildren([bodyGlobSec,funcGlobSec]); p[0].addChild(bodySecChild);
def p_MultiplyEqual(p): ''' MultiplyEqual : OperatableOn MULTIPLY_EQUAL ReturnableExpression ''' to_assign_to = p[1] to_assign_with = p[3] p[0] = AstNode( AST_ASSIGNMENT_STATEMENT,to_assign_to.lineNo,to_assign_to.linePos) list_to_assign_to = AstNode( AST_OPERATABLE_ON_COMMA_LIST,to_assign_to.lineNo,to_assign_to.linePos) list_to_assign_to.addChild(to_assign_to) p[0].addChild(list_to_assign_to); multiplyNode = AstNode(AST_MULTIPLY,p[1].lineNo,p[1].linePos); multiplyNode.addChildren([to_assign_to,to_assign_with]); p[0].addChild(multiplyNode);
def p_PlusEqual(p): ''' PlusEqual : OperatableOn PLUS_EQUAL ReturnableExpression ''' to_assign_to = p[1] to_assign_with = p[3] p[0] = AstNode( AST_ASSIGNMENT_STATEMENT,to_assign_to.lineNo,to_assign_to.linePos) list_to_assign_to = AstNode( AST_OPERATABLE_ON_COMMA_LIST,to_assign_to.lineNo,to_assign_to.linePos) list_to_assign_to.addChild(to_assign_to) p[0].addChild(list_to_assign_to); plusNode = AstNode(AST_PLUS,p[1].lineNo,p[1].linePos); plusNode.addChildren([to_assign_to,to_assign_with]); p[0].addChild(plusNode);
def p_DivideEqual(p): ''' DivideEqual : OperatableOn DIVIDE_EQUAL ReturnableExpression ''' to_assign_to = p[1] to_assign_with = p[3] p[0] = AstNode( AST_ASSIGNMENT_STATEMENT,to_assign_to.lineNo,to_assign_to.linePos) list_to_assign_to = AstNode( AST_OPERATABLE_ON_COMMA_LIST,to_assign_to.lineNo,to_assign_to.linePos) list_to_assign_to.addChild(to_assign_to) p[0].addChild(list_to_assign_to); divideNode = AstNode(AST_DIVIDE,p[1].lineNo,p[1].linePos); divideNode.addChildren([to_assign_to,to_assign_with]); p[0].addChild(divideNode);