Index: src/Parser/StatementNode.cc
===================================================================
--- src/Parser/StatementNode.cc	(revision 36e6f1046d925b57eafde5cec34d7e4eeb37dcb9)
+++ src/Parser/StatementNode.cc	(revision cce0807bda0b7225dfa1e297cee67d159ff260b9)
@@ -503,4 +503,23 @@
 } // build_corun
 
+ast::Stmt * build_cofor( const CodeLocation & location, ForCtrl * forctl, StatementNode * stmt ) {
+	std::vector<ast::ptr<ast::Stmt>> astinit;						// maybe empty
+	buildMoveList( forctl->init, astinit );
+
+	ast::Expr * astcond = nullptr;						// maybe empty
+	astcond = notZeroExpr( maybeMoveBuild( forctl->condition ) );
+
+	ast::Expr * astincr = nullptr;						// maybe empty
+	astincr = maybeMoveBuild( forctl->change );
+	delete forctl;
+
+	return new ast::CoforStmt( location,
+		std::move( astinit ),
+		astcond,
+		astincr,
+		buildMoveSingle( stmt )
+	);
+} // build_cofor
+
 // Local Variables: //
 // tab-width: 4 //
Index: src/Parser/StatementNode.h
===================================================================
--- src/Parser/StatementNode.h	(revision 36e6f1046d925b57eafde5cec34d7e4eeb37dcb9)
+++ src/Parser/StatementNode.h	(revision cce0807bda0b7225dfa1e297cee67d159ff260b9)
@@ -106,2 +106,3 @@
 ast::Stmt * build_mutex( const CodeLocation &, ExpressionNode * exprs, StatementNode * stmt );
 ast::Stmt * build_corun( const CodeLocation &, StatementNode * stmt );
+ast::Stmt * build_cofor( const CodeLocation & location, ForCtrl * forctl, StatementNode * stmt );
Index: src/Parser/parser.yy
===================================================================
--- src/Parser/parser.yy	(revision 36e6f1046d925b57eafde5cec34d7e4eeb37dcb9)
+++ src/Parser/parser.yy	(revision cce0807bda0b7225dfa1e297cee67d159ff260b9)
@@ -1725,5 +1725,5 @@
 cofor_statement:
 	COFOR '(' for_control_expression_list ')' statement
-		{ SemanticError( yylloc, "cofor statement is currently unimplemented." ); $$ = nullptr; }
+		{ $$ = new StatementNode( build_cofor( yylloc, $3, maybe_build_compound( yylloc, $5 ) ) ); }
 	;
 
