Index: src/Parser/parser.yy
===================================================================
--- src/Parser/parser.yy	(revision 5753b3314cce185ee6f8e5b9fecb5621de8f9a57)
+++ src/Parser/parser.yy	(revision 24662ff50dfb325fe8845d2ec497b66224708e7d)
@@ -10,6 +10,6 @@
 // Created On       : Sat Sep  1 20:22:55 2001
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Sat Nov  3 08:55:10 2018
-// Update Count     : 4032
+// Last Modified On : Thu Nov  8 18:08:23 2018
+// Update Count     : 4052
 //
 
@@ -187,5 +187,5 @@
 
 ForCtrl * forCtrl( ExpressionNode * type, string * index, ExpressionNode * start, enum OperKinds compop, ExpressionNode * comp, ExpressionNode * inc ) {
-	ConstantExpr *constant = dynamic_cast<ConstantExpr *>(type->get_expr());
+	ConstantExpr * constant = dynamic_cast<ConstantExpr *>(type->get_expr());
 	if ( constant && (constant->get_constant()->get_value() == "0" || constant->get_constant()->get_value() == "1") ) {
     	type = new ExpressionNode( new CastExpr( maybeMoveBuild< Expression >(type), new BasicType( Type::Qualifiers(), BasicType::SignedInt ) ) );
@@ -196,4 +196,12 @@
 		new ExpressionNode( build_binary_val( compop == OperKinds::LThan || compop == OperKinds::LEThan ? // choose += or -= for upto/downto
 											  OperKinds::PlusAssn : OperKinds::MinusAssn, new ExpressionNode( build_varref( new string( *index ) ) ), inc ) ) );
+} // forCtrl
+
+ForCtrl * forCtrl( ExpressionNode * type, ExpressionNode * index, ExpressionNode * start, enum OperKinds compop, ExpressionNode * comp, ExpressionNode * inc ) {
+	if ( NameExpr * identifier = dynamic_cast<NameExpr *>(index->get_expr()) ) {
+		return forCtrl( type, new string( identifier->name ), start, compop, comp, inc );
+	} else {
+		SemanticError( yylloc, "Expression disallowed. Only loop-index name allowed" ); return nullptr;
+	} // if
 } // forCtrl
 
@@ -1132,61 +1140,27 @@
 	| FOR '(' push for_control_expression ')' statement pop
 		{ $$ = new StatementNode( build_for( $4, $6 ) ); }
+	| FOR '(' ')' statement								// CFA => for ( ;; )
+		{ $$ = new StatementNode( build_for( new ForCtrl( (ExpressionNode * )nullptr, (ExpressionNode * )nullptr, (ExpressionNode * )nullptr ), $4 ) ); }
 	;
 
 for_control_expression:
-	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" ) ) ),
-							  OperKinds::LThan, $1->clone(), new ExpressionNode( build_constantInteger( *new string( "1" ) ) ) );
-			} // if
-		}
+	comma_expression									// CFA
+		{ $$ = forCtrl( $1, new string( DeclarationNode::anonymous.newName() ), new ExpressionNode( build_constantInteger( *new string( "0" ) ) ),
+						OperKinds::LThan, $1->clone(), new ExpressionNode( build_constantInteger( *new string( "1" ) ) ) ); }
 	| constant_expression inclexcl constant_expression	// CFA
 		{ $$ = forCtrl( $1, new string( DeclarationNode::anonymous.newName() ), $1->clone(), $2, $3, new ExpressionNode( build_constantInteger( *new string( "1" ) ) ) ); }
 	| constant_expression inclexcl constant_expression '~' constant_expression // CFA
 		{ $$ = forCtrl( $1, new string( DeclarationNode::anonymous.newName() ), $1->clone(), $2, $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" ) ) ),
-								  OperKinds::LThan, $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 inclexcl 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(), $4, $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 inclexcl 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(), $4, $5, $7 );
-				} else {
-					SemanticError( yylloc, "Expression disallowed. Only loop-index name allowed" ); $$ = nullptr;
-				} // if
-			} // if
-		}
-	| comma_expression_opt ';' comma_expression_opt ';' comma_expression_opt
+	| comma_expression ';' comma_expression				// CFA
+		{ $$ = forCtrl( $3, $1, new ExpressionNode( build_constantInteger( *new string( "0" ) ) ),
+						OperKinds::LThan, $3->clone(), new ExpressionNode( build_constantInteger( *new string( "1" ) ) ) ); }
+	| comma_expression ';' constant_expression inclexcl constant_expression // CFA
+		{ $$ = forCtrl( $3, $1, $3->clone(), $4, $5, new ExpressionNode( build_constantInteger( *new string( "1" ) ) ) ); }
+	| comma_expression ';' constant_expression inclexcl constant_expression '~' constant_expression // CFA
+		{ $$ = forCtrl( $3, $1, $3->clone(), $4, $5, $7 ); }
+	| comma_expression ';' comma_expression_opt ';' comma_expression_opt
 		{ $$ = new ForCtrl( $1, $3, $5 ); }
+	| ';' comma_expression_opt ';' comma_expression_opt
+		{ $$ = new ForCtrl( (ExpressionNode * )nullptr, $2, $4 ); }
 	| declaration comma_expression_opt ';' comma_expression_opt // C99, declaration has ';'
 		{ $$ = new ForCtrl( $1, $2, $4 ); }
