Index: src/Parser/ParseNode.h
===================================================================
--- src/Parser/ParseNode.h	(revision ac3362c49d6542b7d8c8fb775ea7b0215120bdbd)
+++ src/Parser/ParseNode.h	(revision f271bdd9abc24c2482997ac111cf741fbf00a1bf)
@@ -10,6 +10,6 @@
 // Created On       : Sat May 16 13:28:16 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Fri Jul 20 14:56:30 2018
-// Update Count     : 850
+// Last Modified On : Sat Aug  4 09:39:40 2018
+// Update Count     : 853
 //
 
@@ -132,4 +132,5 @@
 	void printOneLine( __attribute__((unused)) std::ostream & os, __attribute__((unused)) int indent = 0 ) const {}
 
+	Expression *get_expr() const { return expr.get(); }
 	template<typename T>
 	bool isExpressionType() const {	return nullptr != dynamic_cast<T>(expr.get()); }
@@ -390,6 +391,6 @@
 Statement * build_expr( ExpressionNode * ctl );
 
-struct IfCtl {
-	IfCtl( DeclarationNode * decl, ExpressionNode * condition ) :
+struct IfCtrl {
+	IfCtrl( DeclarationNode * decl, ExpressionNode * condition ) :
 		init( decl ? new StatementNode( decl ) : nullptr ), condition( condition ) {}
 
@@ -398,8 +399,8 @@
 };
 
-struct ForCtl {
-	ForCtl( ExpressionNode * expr, ExpressionNode * condition, ExpressionNode * change ) :
+struct ForCtrl {
+	ForCtrl( ExpressionNode * expr, ExpressionNode * condition, ExpressionNode * change ) :
 		init( new StatementNode( build_expr( expr ) ) ), condition( condition ), change( change ) {}
-	ForCtl( DeclarationNode * decl, ExpressionNode * condition, ExpressionNode * change ) :
+	ForCtrl( DeclarationNode * decl, ExpressionNode * condition, ExpressionNode * change ) :
 		init( new StatementNode( decl ) ), condition( condition ), change( change ) {}
 
@@ -409,12 +410,12 @@
 };
 
-Expression * build_if_control( IfCtl * ctl, std::list< Statement * > & init );
-Statement * build_if( IfCtl * ctl, StatementNode * then_stmt, StatementNode * else_stmt );
+Expression * build_if_control( IfCtrl * ctl, std::list< Statement * > & init );
+Statement * build_if( IfCtrl * ctl, StatementNode * then_stmt, StatementNode * else_stmt );
 Statement * build_switch( bool isSwitch, ExpressionNode * ctl, StatementNode * stmt );
 Statement * build_case( ExpressionNode * ctl );
 Statement * build_default();
-Statement * build_while( IfCtl * ctl, StatementNode * stmt );
+Statement * build_while( IfCtrl * ctl, StatementNode * stmt );
 Statement * build_do_while( ExpressionNode * ctl, StatementNode * stmt );
-Statement * build_for( ForCtl * forctl, StatementNode * stmt );
+Statement * build_for( ForCtrl * forctl, StatementNode * stmt );
 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 ac3362c49d6542b7d8c8fb775ea7b0215120bdbd)
+++ src/Parser/StatementNode.cc	(revision f271bdd9abc24c2482997ac111cf741fbf00a1bf)
@@ -10,6 +10,6 @@
 // Created On       : Sat May 16 14:59:41 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Tue Jun  5 08:58:34 2018
-// Update Count     : 362
+// Last Modified On : Sat Aug  4 09:39:25 2018
+// Update Count     : 363
 //
 
@@ -78,5 +78,5 @@
 } // build_expr
 
-Expression * build_if_control( IfCtl * ctl, std::list< Statement * > & init ) {
+Expression * build_if_control( IfCtrl * ctl, std::list< Statement * > & init ) {
 	if ( ctl->init != 0 ) {
 		buildMoveList( ctl->init, init );
@@ -100,5 +100,5 @@
 } // build_if_control
 
-Statement * build_if( IfCtl * ctl, StatementNode * then_stmt, StatementNode * else_stmt ) {
+Statement * build_if( IfCtrl * ctl, StatementNode * then_stmt, StatementNode * else_stmt ) {
 	Statement * thenb, * elseb = nullptr;
 	std::list< Statement * > branches;
@@ -145,5 +145,5 @@
 } // build_default
 
-Statement * build_while( IfCtl * ctl, StatementNode * stmt ) {
+Statement * build_while( IfCtrl * ctl, StatementNode * stmt ) {
 	std::list< Statement * > branches;
 	buildMoveList< Statement, StatementNode >( stmt, branches );
@@ -164,5 +164,5 @@
 } // build_do_while
 
-Statement * build_for( ForCtl * forctl, StatementNode * stmt ) {
+Statement * build_for( ForCtrl * forctl, StatementNode * stmt ) {
 	std::list< Statement * > branches;
 	buildMoveList< Statement, StatementNode >( stmt, branches );
Index: src/Parser/parser.yy
===================================================================
--- src/Parser/parser.yy	(revision ac3362c49d6542b7d8c8fb775ea7b0215120bdbd)
+++ src/Parser/parser.yy	(revision f271bdd9abc24c2482997ac111cf741fbf00a1bf)
@@ -10,6 +10,6 @@
 // Created On       : Sat Sep  1 20:22:55 2001
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Wed Jul 25 15:54:35 2018
-// Update Count     : 3841
+// Last Modified On : Sat Aug  4 09:38:36 2018
+// Update Count     : 3986
 //
 
@@ -186,4 +186,12 @@
 } // fieldDecl
 
+ForCtrl * forCtrl( ExpressionNode * type, string * index, ExpressionNode * start, ExpressionNode * comp, ExpressionNode * inc ) {
+	return new ForCtrl(
+		distAttr( DeclarationNode::newTypeof( type ), DeclarationNode::newName( index )->addInitializer( new InitializerNode( start ) ) ),
+		new ExpressionNode( build_binary_val( OperKinds::LThan, new ExpressionNode( build_varref( new string( *index ) ) ), comp ) ),
+		new ExpressionNode( build_binary_val( OperKinds::PlusAssn, new ExpressionNode( build_varref( new string( *index ) ) ), inc ) ) );
+} // forCtrl
+
+
 bool forall = false, yyy = false;						// aggregate have one or more forall qualifiers ?
 
@@ -217,6 +225,6 @@
 	WaitForStmt * wfs;
 	Expression * constant;
-	IfCtl * ifctl;
-	ForCtl * fctl;
+	IfCtrl * ifctl;
+	ForCtrl * fctl;
 	LabelNode * label;
 	InitializerNode * in;
@@ -1049,11 +1057,11 @@
 if_control_expression:
 	comma_expression
-		{ $$ = new IfCtl( nullptr, $1 ); }
+		{ $$ = new IfCtrl( nullptr, $1 ); }
 	| c_declaration										// no semi-colon
-		{ $$ = new IfCtl( $1, nullptr ); }
+		{ $$ = new IfCtrl( $1, nullptr ); }
 	| cfa_declaration									// no semi-colon
-		{ $$ = new IfCtl( $1, nullptr ); }
+		{ $$ = new IfCtrl( $1, nullptr ); }
 	| declaration comma_expression						// semi-colon separated
-		{ $$ = new IfCtl( $1, $2 ); }
+		{ $$ = new IfCtrl( $1, $2 ); }
  	;
 
@@ -1111,6 +1119,10 @@
 	WHILE '(' push if_control_expression ')' statement pop
 		{ $$ = new StatementNode( build_while( $4, $6 ) ); }
+	| WHILE '(' ')' statement							// CFA => while ( 1 )
+		{ $$ = new StatementNode( build_while( new IfCtrl( nullptr, new ExpressionNode( build_constantInteger( *new string( "1" ) ) ) ), $4 ) ); }
 	| DO statement WHILE '(' comma_expression ')' ';'
 		{ $$ = new StatementNode( build_do_while( $5, $2 ) ); }
+	| DO statement WHILE '(' ')' ';'					// CFA => do while( 1 )
+		{ $$ = new StatementNode( build_do_while( new ExpressionNode( build_constantInteger( *new string( "1" ) ) ), $2 ) ); }
 	| FOR '(' push for_control_expression ')' statement pop
 		{ $$ = new StatementNode( build_for( $4, $6 ) ); }
@@ -1118,8 +1130,60 @@
 
 for_control_expression:
-	comma_expression_opt ';' comma_expression_opt ';' comma_expression_opt
-		{ $$ = new ForCtl( $1, $3, $5 ); }
-	| declaration comma_expression_opt ';' comma_expression_opt // C99
-		{ $$ = new ForCtl( $1, $2, $4 ); }
+	comma_expression_opt								// CFA
+		{
+			if ( ! $1 ) {								// => for ( ;; )
+				$$ = new ForCtrl( (ExpressionNode * )nullptr, (ExpressionNode * )nullptr, (ExpressionNode * )nullptr );
+			} else {
+				$$ = forCtrl( $1, new string( DeclarationNode::anonymous.newName() ), new ExpressionNode( build_constantInteger( *new string( "0" ) ) ), $1->clone(),
+							 new ExpressionNode( build_constantInteger( *new string( "1" ) ) ) );
+			} // if
+		}
+	| constant_expression '~' constant_expression		// CFA
+		{ $$ = forCtrl( $1, new string( DeclarationNode::anonymous.newName() ), $1->clone(), $3, new ExpressionNode( build_constantInteger( *new string( "1" ) ) ) ); }
+	| constant_expression '~' constant_expression '~' constant_expression // CFA
+		{ $$ = forCtrl( $1, new string( DeclarationNode::anonymous.newName() ), $1->clone(), $3, $5 ); }
+	| comma_expression_opt ';' comma_expression			// CFA
+		{
+			if ( ! $1 ) {
+				SemanticError( yylloc, "Missing loop index." ); $$ = nullptr;
+			} else if ( ! $3 ) {
+				SemanticError( yylloc, "Missing loop range." ); $$ = nullptr;
+			} else {
+				if ( NameExpr *identifier = dynamic_cast<NameExpr *>($1->get_expr()) ) {
+					$$ = forCtrl( $3, new string( identifier->name ), new ExpressionNode( build_constantInteger( *new string( "0" ) ) ), $3->clone(),
+								 new ExpressionNode( build_constantInteger( *new string( "1" ) ) ) );
+				} else {
+					SemanticError( yylloc, "Expression disallowed. Only loop-index name allowed" ); $$ = nullptr;
+				} // if
+			} // if
+		}
+	| comma_expression_opt ';' constant_expression '~' constant_expression // CFA
+		{
+			if ( ! $1 ) {
+				SemanticError( yylloc, "Missing loop index." ); $$ = nullptr;
+			} else {
+				if ( NameExpr *identifier = dynamic_cast<NameExpr *>($1->get_expr()) ) {
+					$$ = forCtrl( $3, new string( identifier->name ), $3->clone(), $5, new ExpressionNode( build_constantInteger( *new string( "1" ) ) ) );
+				} else {
+					SemanticError( yylloc, "Expression disallowed. Only loop-index name allowed" ); $$ = nullptr;
+				} // if
+			} // if
+		}
+	| comma_expression_opt ';' constant_expression '~' constant_expression '~' constant_expression // CFA
+		{
+			if ( ! $1 ) {
+				SemanticError( yylloc, "Missing loop index." ); $$ = nullptr;
+			} else {
+				if ( NameExpr *identifier = dynamic_cast<NameExpr *>($1->get_expr()) ) {
+					$$ = forCtrl( $3, new string( identifier->name ), $3->clone(), $5, $7 );
+				} else {
+					SemanticError( yylloc, "Expression disallowed. Only loop-index name allowed" ); $$ = nullptr;
+				} // if
+			} // if
+		}
+	| comma_expression_opt ';' comma_expression_opt ';' comma_expression_opt
+		{ $$ = new ForCtrl( $1, $3, $5 ); }
+	| declaration comma_expression_opt ';' comma_expression_opt // C99, declaration has ';'
+		{ $$ = new ForCtrl( $1, $2, $4 ); }
  	;
 
