Index: src/Parser/ParseNode.h
===================================================================
--- src/Parser/ParseNode.h	(revision 473d1da0d5ef74775e6169cdebec373109e9769d)
+++ src/Parser/ParseNode.h	(revision 3b0bc169405b67c6da2825bdc47c869fa9d0fd59)
@@ -10,6 +10,6 @@
 // Created On       : Sat May 16 13:28:16 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Sat Jan 29 09:45:56 2022
-// Update Count     : 901
+// Last Modified On : Tue Feb  1 11:06:18 2022
+// Update Count     : 903
 //
 
@@ -414,7 +414,7 @@
 Statement * build_case( ExpressionNode * ctl );
 Statement * build_default();
-Statement * build_while( CondCtl * ctl, StatementNode * stmt );
-Statement * build_do_while( ExpressionNode * ctl, StatementNode * stmt );
-Statement * build_for( ForCtrl * forctl, StatementNode * stmt );
+Statement * build_while( CondCtl * ctl, StatementNode * stmt, StatementNode * els = nullptr );
+Statement * build_do_while( ExpressionNode * ctl, StatementNode * stmt, StatementNode * els = nullptr );
+Statement * build_for( ForCtrl * forctl, StatementNode * stmt, StatementNode * els = nullptr );
 Statement * build_branch( BranchStmt::Type kind );
 Statement * build_branch( std::string * identifier, BranchStmt::Type kind );
Index: src/Parser/StatementNode.cc
===================================================================
--- src/Parser/StatementNode.cc	(revision 473d1da0d5ef74775e6169cdebec373109e9769d)
+++ src/Parser/StatementNode.cc	(revision 3b0bc169405b67c6da2825bdc47c869fa9d0fd59)
@@ -10,6 +10,6 @@
 // Created On       : Sat May 16 14:59:41 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Sat Jan 29 09:45:51 2022
-// Update Count     : 384
+// Last Modified On : Tue Feb  1 18:39:00 2022
+// Update Count     : 395
 //
 
@@ -145,43 +145,53 @@
 } // build_default
 
-Statement * build_while( CondCtl * ctl, StatementNode * stmt ) {
-	std::list< Statement * > branches;
-	buildMoveList< Statement, StatementNode >( stmt, branches );
-	assert( branches.size() == 1 );
-
+Statement * build_while( CondCtl * ctl, StatementNode * stmt, StatementNode * else_ ) {
 	std::list< Statement * > init;
 	Expression * cond = build_if_control( ctl, init );
-	return new WhileStmt( cond, branches.front(), init, false );
+
+	std::list< Statement * > aststmt;
+	buildMoveList< Statement, StatementNode >( stmt, aststmt );
+	assert( aststmt.size() == 1 );
+
+	std::list< Statement * > astelse;
+	buildMoveList< Statement, StatementNode >( else_, astelse );
+
+	return new WhileDoStmt( cond, aststmt.front(), astelse.front(), init, false );
 } // build_while
 
-Statement * build_do_while( ExpressionNode * ctl, StatementNode * stmt ) {
-	std::list< Statement * > branches;
-	buildMoveList< Statement, StatementNode >( stmt, branches );
-	assert( branches.size() == 1 );
+Statement * build_do_while( ExpressionNode * ctl, StatementNode * stmt, StatementNode * else_ ) {
+	std::list< Statement * > aststmt;
+	buildMoveList< Statement, StatementNode >( stmt, aststmt );
+	assert( aststmt.size() == 1 );
+
+	std::list< Statement * > astelse;
+	buildMoveList< Statement, StatementNode >( else_, astelse );
 
 	std::list< Statement * > init;
-	return new WhileStmt( notZeroExpr( maybeMoveBuild< Expression >(ctl) ), branches.front(), init, true );
+	return new WhileDoStmt( notZeroExpr( maybeMoveBuild< Expression >(ctl) ), aststmt.front(), astelse.front(), init, true );
 } // build_do_while
 
-Statement * build_for( ForCtrl * forctl, StatementNode * stmt ) {
-	std::list< Statement * > branches;
-	buildMoveList< Statement, StatementNode >( stmt, branches );
-	assert( branches.size() == 1 );
-
+Statement * build_for( ForCtrl * forctl, StatementNode * stmt, StatementNode * else_ ) {
 	std::list< Statement * > init;
-	if ( forctl->init != 0 ) {
+	if ( forctl->init != nullptr ) {
 		buildMoveList( forctl->init, init );
 	} // if
 
-	Expression * cond = 0;
-	if ( forctl->condition != 0 )
+	Expression * cond = nullptr;
+	if ( forctl->condition != nullptr )
 		cond = notZeroExpr( maybeMoveBuild< Expression >(forctl->condition) );
 
-	Expression * incr = 0;
-	if ( forctl->change != 0 )
+	Expression * incr = nullptr;
+	if ( forctl->change != nullptr )
 		incr = maybeMoveBuild< Expression >(forctl->change);
 
+	std::list< Statement * > aststmt;
+	buildMoveList< Statement, StatementNode >( stmt, aststmt );
+	assert( aststmt.size() == 1 );
+
+	std::list< Statement * > astelse;
+	buildMoveList< Statement, StatementNode >( else_, astelse );
+
 	delete forctl;
-	return new ForStmt( init, cond, incr, branches.front() );
+	return new ForStmt( init, cond, incr, aststmt.front(), astelse.front() );
 } // build_for
 
Index: src/Parser/parser.yy
===================================================================
--- src/Parser/parser.yy	(revision 473d1da0d5ef74775e6169cdebec373109e9769d)
+++ src/Parser/parser.yy	(revision 3b0bc169405b67c6da2825bdc47c869fa9d0fd59)
@@ -10,6 +10,6 @@
 // Created On       : Sat Sep  1 20:22:55 2001
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Sun Jan 30 09:41:13 2022
-// Update Count     : 5165
+// Last Modified On : Tue Feb  1 11:06:13 2022
+// Update Count     : 5167
 //
 
@@ -1197,5 +1197,6 @@
 		{ $$ = new StatementNode( build_while( $3, maybe_build_compound( $5 ) ) ); }
 	| WHILE '(' conditional_declaration ')' statement ELSE statement // CFA
-		{ SemanticError( yylloc, "Loop default block is currently unimplemented." ); $$ = nullptr; }
+		// { SemanticError( yylloc, "Loop default block is currently unimplemented." ); $$ = nullptr; }
+		{ $$ = new StatementNode( build_while( $3, maybe_build_compound( $5 ), $7 ) ); }
 	| DO statement WHILE '(' ')' ';'					// CFA => do while( 1 )
 		{ $$ = new StatementNode( build_do_while( new ExpressionNode( build_constantInteger( *new string( "1" ) ) ), maybe_build_compound( $2 ) ) ); }
@@ -1203,5 +1204,6 @@
 		{ $$ = new StatementNode( build_do_while( $5, maybe_build_compound( $2 ) ) ); }
 	| DO statement WHILE '(' comma_expression ')' ELSE statement // CFA
-		{ SemanticError( yylloc, "Loop default block is currently unimplemented." ); $$ = nullptr; }
+		// { SemanticError( yylloc, "Loop default block is currently unimplemented." ); $$ = nullptr; }
+		{ $$ = new StatementNode( build_do_while( $5, maybe_build_compound( $2 ), $8 ) ); }
 	| FOR '(' ')' statement								// CFA => for ( ;; )
 		{ $$ = new StatementNode( build_for( new ForCtrl( (ExpressionNode * )nullptr, (ExpressionNode * )nullptr, (ExpressionNode * )nullptr ), maybe_build_compound( $4 ) ) ); }
@@ -1209,5 +1211,6 @@
 	  	{ $$ = new StatementNode( build_for( $3, maybe_build_compound( $5 ) ) ); }
 	| FOR '(' for_control_expression_list ')' statement ELSE statement // CFA
-		{ SemanticError( yylloc, "Loop default block is currently unimplemented." ); $$ = nullptr; }
+		// { SemanticError( yylloc, "Loop default block is currently unimplemented." ); $$ = nullptr; }
+		{ $$ = new StatementNode( build_for( $3, maybe_build_compound( $5 ), $7 ) ); }
 	;
 
