Index: src/Parser/lex.ll
===================================================================
--- src/Parser/lex.ll	(revision 55ba259e5caba35d6cde03fc3df5cefc7127dbb2)
+++ src/Parser/lex.ll	(revision 01afd8dcb43dbce4998199e38bd0d1532596bcf2)
@@ -10,6 +10,6 @@
  * Created On       : Sat Sep 22 08:58:10 2001
  * Last Modified By : Peter A. Buhr
- * Last Modified On : Thu Jun 20 16:54:05 2024
- * Update Count     : 778
+ * Last Modified On : Thu Jun 27 14:38:27 2024
+ * Update Count     : 780
  */
 
@@ -458,5 +458,7 @@
 
 "@="			{ NAMEDOP_RETURN(ATassign); }			// CFA
+"+~"			{ NAMEDOP_RETURN(ErangeUp); }			// CFA
 "~="			{ NAMEDOP_RETURN(ErangeUpEq); }			// CFA
+"+~="			{ NAMEDOP_RETURN(ErangeUpEq); }			// CFA
 "-~"			{ NAMEDOP_RETURN(ErangeDown); }			// CFA
 "-~="			{ NAMEDOP_RETURN(ErangeDownEq); }		// CFA
Index: src/Parser/parser.yy
===================================================================
--- src/Parser/parser.yy	(revision 55ba259e5caba35d6cde03fc3df5cefc7127dbb2)
+++ src/Parser/parser.yy	(revision 01afd8dcb43dbce4998199e38bd0d1532596bcf2)
@@ -10,6 +10,6 @@
 // Created On       : Sat Sep  1 20:22:55 2001
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Wed Jun 26 09:37:28 2024
-// Update Count     : 6700
+// Last Modified On : Thu Jun 27 14:45:57 2024
+// Update Count     : 6705
 //
 
@@ -224,6 +224,6 @@
 #define UPDOWN( compop, left, right ) (compop == OperKinds::LThan || compop == OperKinds::LEThan ? left : right)
 #define MISSING_ANON_FIELD "illegal syntax, missing loop fields with an anonymous loop index is meaningless as loop index is unavailable in loop body."
-#define MISSING_LOW "illegal syntax, missing low value for up-to range so index is uninitialized."
-#define MISSING_HIGH "illegal syntax, missing high value for down-to range so index is uninitialized."
+#define MISSING_LOW "illegal syntax, missing low value for ascanding range so index is uninitialized."
+#define MISSING_HIGH "illegal syntax, missing high value for descending range so index is uninitialized."
 
 static ForCtrl * makeForCtrl( const CodeLocation & location, DeclarationNode * init, OperKinds compop, ExpressionNode * comp, ExpressionNode * inc ) {
@@ -409,5 +409,5 @@
 %token ANDassign	ERassign	ORassign				// &=	^=	|=
 
-%token ErangeUpEq	ErangeDown	ErangeDownEq			// ~=	-~	-~=
+%token ErangeUp		ErangeUpEq	ErangeDown	ErangeDownEq // +~	+~=/~=	-~	-~=
 %token ATassign											// @=
 
@@ -1526,5 +1526,5 @@
 		}
 	| comma_expression ';' '@' updowneq '@'				// CFA, invalid syntax rule
-		{ SemanticError( yylloc, "illegal syntax, missing low/high value for up/down-to range so index is uninitialized." ); $$ = nullptr; }
+		{ SemanticError( yylloc, "illegal syntax, missing low/high value for ascending/descending range so index is uninitialized." ); $$ = nullptr; }
 
 	| comma_expression ';' comma_expression updowneq comma_expression '~' comma_expression // CFA
@@ -1555,5 +1555,5 @@
 		}
 	| comma_expression ';' '@' updowneq '@' '~' '@' // CFA
-		{ SemanticError( yylloc, "illegal syntax, missing low/high value for up/down-to range so index is uninitialized." ); $$ = nullptr; }
+		{ SemanticError( yylloc, "illegal syntax, missing low/high value for ascending/descending range so index is uninitialized." ); $$ = nullptr; }
 
 	| declaration comma_expression						// CFA
@@ -1603,5 +1603,5 @@
 		}
 	| declaration '@' updowneq '@' '~' '@'				// CFA, invalid syntax rule
-		{ SemanticError( yylloc, "illegal syntax, missing low/high value for up/down-to range so index is uninitialized." ); $$ = nullptr; }
+		{ SemanticError( yylloc, "illegal syntax, missing low/high value for ascending/descending range so index is uninitialized." ); $$ = nullptr; }
 
 	| comma_expression ';' enum_key						// CFA, enum type
@@ -1632,5 +1632,7 @@
 // it is not possible to just remove the '='. The entire '~=' must be removed.
 downupdowneq:
-	ErangeDown
+	ErangeUp
+		{ $$ = OperKinds::LThan; }
+	| ErangeDown
 		{ $$ = OperKinds::GThan; }
 	| ErangeUpEq
@@ -1641,5 +1643,7 @@
 
 updown:
-	'~'
+	'~'													// shorthand 0 ~ 10 => 0 +~ 10
+		{ $$ = OperKinds::LThan; }
+	| ErangeUp
 		{ $$ = OperKinds::LThan; }
 	| ErangeDown
