CoutStatementNode * Parser::Cout(){ CoutStatementNode * coutnode = new CoutStatementNode(); Match(COUT_TOKEN); Match(INSERTION_TOKEN); ExpressionNode * expr = Expression(); coutnode->AddCnode(expr); while(true){ Token next = scan->PeekNextToken(); if(next.GetTokenType() == INSERTION_TOKEN){ Match(next.GetTokenType()); Token nNext = scan->PeekNextToken(); if(nNext.GetTokenType() == ENDL_TOKEN){ Match(ENDL_TOKEN); coutnode->AddCnode(NULL); } else{ ExpressionNode * nexpr = Expression(); coutnode->AddCnode(nexpr); } } else{ if(next.GetTokenType() == ENDL_TOKEN){ Match(ENDL_TOKEN); coutnode->AddCnode(NULL); } Match(SEMICOLIN_TOKEN); break; } } MSG("Creating a CoutStatementNode."); return coutnode; }