Index: src/Parser/lex.ll
===================================================================
--- src/Parser/lex.ll	(revision bcb14b51a0d19c902bee4aabf5540dbf405e490e)
+++ src/Parser/lex.ll	(revision d69f4bb48d0f1f51a0fe4ab1cd6148a79274c871)
@@ -10,6 +10,6 @@
  * Created On       : Sat Sep 22 08:58:10 2001
  * Last Modified By : Peter A. Buhr
- * Last Modified On : Wed Aug  8 17:23:17 2018
- * Update Count     : 685
+ * Last Modified On : Wed Aug 29 15:02:41 2018
+ * Update Count     : 686
  */
 
@@ -410,6 +410,8 @@
 ">>="			{ NAMEDOP_RETURN(RSassign); }
 
-"~="			{ NAMEDOP_RETURN(Erange); }				// CFA
 "@="			{ NAMEDOP_RETURN(ATassign); }			// CFA
+"~="			{ NAMEDOP_RETURN(ErangeUpEq); }			// CFA
+"-~"			{ NAMEDOP_RETURN(ErangeDown); }			// CFA
+"-~="			{ NAMEDOP_RETURN(ErangeDownEq); }		// CFA
 
 				/* CFA, operator identifier */
Index: src/Parser/parser.yy
===================================================================
--- src/Parser/parser.yy	(revision bcb14b51a0d19c902bee4aabf5540dbf405e490e)
+++ src/Parser/parser.yy	(revision d69f4bb48d0f1f51a0fe4ab1cd6148a79274c871)
@@ -10,6 +10,6 @@
 // Created On       : Sat Sep  1 20:22:55 2001
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Wed Aug  8 17:50:07 2018
-// Update Count     : 3998
+// Last Modified On : Wed Aug 29 16:44:17 2018
+// Update Count     : 4006
 //
 
@@ -186,4 +186,8 @@
 } // fieldDecl
 
+ExpressionNode *forInc( const OperKinds op ) {
+	return new ExpressionNode( build_constantInteger( *new string( op == OperKinds::LThan || op == OperKinds::LEThan ? "1" : "-1" ) ) );
+} // forInc
+
 ForCtrl * forCtrl( ExpressionNode * type, string * index, ExpressionNode * start, enum OperKinds compop, ExpressionNode * comp, ExpressionNode * inc ) {
 	return new ForCtrl(
@@ -290,5 +294,5 @@
 %token ANDassign	ERassign	ORassign				// &=	^=	|=
 
-%token Erange											// ~=
+%token ErangeUpEq	ErangeDown	ErangeDownEq			// ~=	-~	-~=
 %token ATassign											// @=
 
@@ -1138,10 +1142,10 @@
 				$$ = 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" ) ) ) );
+				$$ = forCtrl( $1, new string( DeclarationNode::anonymous.newName() ), new ExpressionNode( build_constantInteger( *new string( "0" ) ) ),
+							  OperKinds::LThan, $1->clone(), forInc( OperKinds::LThan ) );
 			} // if
 		}
 	| constant_expression inclexcl constant_expression	// CFA
-		{ $$ = forCtrl( $1, new string( DeclarationNode::anonymous.newName() ), $1->clone(), $2, $3, new ExpressionNode( build_constantInteger( *new string( "1" ) ) ) ); }
+		{ $$ = forCtrl( $1, new string( DeclarationNode::anonymous.newName() ), $1->clone(), $2, $3, forInc( $2 ) ); }
 	| constant_expression inclexcl constant_expression '~' constant_expression // CFA
 		{ $$ = forCtrl( $1, new string( DeclarationNode::anonymous.newName() ), $1->clone(), $2, $3, $5 ); }
@@ -1154,6 +1158,6 @@
 			} 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" ) ) ) );
+					$$ = forCtrl( $3, new string( identifier->name ), new ExpressionNode( build_constantInteger( *new string( "0" ) ) ),
+								  OperKinds::LThan, $3->clone(), forInc( OperKinds::LThan ) );
 				} else {
 					SemanticError( yylloc, "Expression disallowed. Only loop-index name allowed" ); $$ = nullptr;
@@ -1167,5 +1171,5 @@
 			} 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" ) ) ) );
+					$$ = forCtrl( $3, new string( identifier->name ), $3->clone(), $4, $5, forInc( $4 ) );
 				} else {
 					SemanticError( yylloc, "Expression disallowed. Only loop-index name allowed" ); $$ = nullptr;
@@ -1194,6 +1198,10 @@
 	'~'
 		{ $$ = OperKinds::LThan; }
-	| Erange
+	| ErangeUpEq
 		{ $$ = OperKinds::LEThan; }
+	| ErangeDown
+		{ $$ = OperKinds::GThan; }
+	| ErangeDownEq
+		{ $$ = OperKinds::GEThan; }
  	;
 
Index: tests/.expect/forctrl.txt
===================================================================
--- tests/.expect/forctrl.txt	(revision bcb14b51a0d19c902bee4aabf5540dbf405e490e)
+++ tests/.expect/forctrl.txt	(revision d69f4bb48d0f1f51a0fe4ab1cd6148a79274c871)
@@ -2,12 +2,17 @@
 empty
 empty
-X X X X X X X X X X
-Y Y Y Y Y
-Z Z Z Z Z
+A A A A A A A A A A
+B B B B B
+C C C C C
+D D D D D
+E E E E E
 0 1 2 3 4 5 6 7 8 9
 0 1 2 3 4 5 6 7 8 9
+2 4 6 8 10
+10 8 6 4 2
 0.5 1.5 2.5 3.5 4.5
+5.5 4.5 3.5 2.5 1.5
 2 4 6 8 10
-2 4 6 8 10
+10 8 6 4 2
 3 6 9
 (0 0)(1 1)(2 2)(3 3)(4 4)(5 5)(6 6)(7 7)(8 8)(9 9)
Index: tests/forctrl.c
===================================================================
--- tests/forctrl.c	(revision bcb14b51a0d19c902bee4aabf5540dbf405e490e)
+++ tests/forctrl.c	(revision d69f4bb48d0f1f51a0fe4ab1cd6148a79274c871)
@@ -10,6 +10,6 @@
 // Created On       : Wed Aug  8 18:32:59 2018
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Thu Aug 16 09:25:47 2018
-// Update Count     : 6
+// Last Modified On : Wed Aug 29 18:04:15 2018
+// Update Count     : 26
 // 
 
@@ -33,12 +33,24 @@
 	do { sout | "empty"; break; } while ();	sout | endl;
 	for () { sout | "empty"; break; }		sout | endl;
-	for ( 10 ) { sout | "X"; }				sout | endl;
-	for ( 0.5 ~ 5.5 ) { sout | "Y"; }		sout | endl;
-	for ( 2 ~= 10 ~ 2 ) { sout | "Z"; }		sout | endl;
+
+	for ( 10 ) { sout | "A"; }				sout | endl;
+
+	for ( 2 ~= 10 ~ 2 ) { sout | "B"; }		sout | endl;
+	for ( 10 -~= 2 ~ -2 ) { sout | "C"; }	sout | endl;
+	for ( 0.5 ~ 5.5 ) { sout | "D"; }		sout | endl;
+	for ( 5.5 -~ 0.5 ) { sout | "E"; }		sout | endl;
+
 	for ( i; 10 ) { sout | i; }				sout | endl;
 	for ( j; 10 ) { sout | j; }				sout | endl;
+
+	//for ( i; 1 ~= 10 ~ 2 ) { sout | i; }	sout | endl;
+	for ( i; 2 ~= 10 ~ 2 ) { sout | i; }	sout | endl;
+	for ( i; 10 -~= 2 ~ -2 ) { sout | i; }	sout | endl;
 	for ( i; 0.5 ~ 5.5 ) { sout | i; }		sout | endl;
-	for ( i; 2 ~= 10 ~ 2 ) { sout | i; }	sout | endl;
+	for ( i; 5.5 -~ 0.5 ) { sout | i; }		sout | endl;
+
 	for ( ui; 2u ~= 10u ~ 2u ) { sout | ui; } sout | endl;
+	for ( ui; 10u -~= 2u ~ -2u ) { sout | ui; } sout | endl;
+
 	int start = 3, comp = 10, inc = 2;
 	for ( i; start ~ comp ~ inc + 1 ) { sout | i; } sout | endl;
