Index: src/Parser/parser.yy
===================================================================
--- src/Parser/parser.yy	(revision 0a6d8204aa07464088764b1d42a540ea42e521ad)
+++ src/Parser/parser.yy	(revision a51c0c0a97b0c532d996238f0e964cd2baea63ad)
@@ -10,6 +10,6 @@
 // Created On       : Sat Sep  1 20:22:55 2001
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Mon Apr 27 12:25:42 2020
-// Update Count     : 4483
+// Last Modified On : Sat May 23 09:22:36 2020
+// Update Count     : 4499
 //
 
@@ -329,5 +329,5 @@
 %type<en> conditional_expression		constant_expression			assignment_expression		assignment_expression_opt
 %type<en> comma_expression				comma_expression_opt
-%type<en> argument_expression_list		argument_expression			default_initialize_opt
+%type<en> argument_expression_list_opt		argument_expression			default_initialize_opt
 %type<ifctl> if_control_expression
 %type<fctl> for_control_expression		for_control_expression_list
@@ -624,5 +624,5 @@
 		// equivalent to the old x[i,j].
 		{ $$ = new ExpressionNode( build_binary_val( OperKinds::Index, $1, $3 ) ); }
-	| postfix_expression '{' argument_expression_list '}' // CFA, constructor call
+	| postfix_expression '{' argument_expression_list_opt '}' // CFA, constructor call
 		{
 			Token fn;
@@ -630,5 +630,5 @@
 			$$ = new ExpressionNode( new ConstructorExpr( build_func( new ExpressionNode( build_varref( fn ) ), (ExpressionNode *)( $1 )->set_last( $3 ) ) ) );
 		}
-	| postfix_expression '(' argument_expression_list ')'
+	| postfix_expression '(' argument_expression_list_opt ')'
 		{ $$ = new ExpressionNode( build_func( $1, $3 ) ); }
 	| postfix_expression '`' identifier					// CFA, postfix call
@@ -662,5 +662,5 @@
 	| '(' type_no_function ')' '@' '{' initializer_list_opt comma_opt '}' // CFA, explicit C compound-literal
 		{ $$ = new ExpressionNode( build_compoundLiteral( $2, (new InitializerNode( $6, true ))->set_maybeConstructed( false ) ) ); }
-	| '^' primary_expression '{' argument_expression_list '}' // CFA, destructor call
+	| '^' primary_expression '{' argument_expression_list_opt '}' // CFA, destructor call
 		{
 			Token fn;
@@ -670,9 +670,9 @@
 	;
 
-argument_expression_list:
+argument_expression_list_opt:
 	// empty
 		{ $$ = nullptr; }
 	| argument_expression
-	| argument_expression_list ',' argument_expression
+	| argument_expression_list_opt ',' argument_expression
 		{ $$ = (ExpressionNode *)($1->set_last( $3 )); }
 	;
@@ -1196,5 +1196,5 @@
 		{ $$ = 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" ) ) ) ); }
-	| '=' comma_expression									// CFA
+	| '=' comma_expression								// CFA
 		{ $$ = forCtrl( $2, new string( DeclarationNode::anonymous.newName() ), new ExpressionNode( build_constantInteger( *new string( "0" ) ) ),
 						OperKinds::LEThan, $2->clone(), new ExpressionNode( build_constantInteger( *new string( "1" ) ) ) ); }
@@ -1203,8 +1203,10 @@
 	| comma_expression inclexcl comma_expression '~' comma_expression // CFA
 		{ $$ = forCtrl( $1, new string( DeclarationNode::anonymous.newName() ), $1->clone(), $2, $3, $5 ); }
+	| comma_expression ';'								// CFA
+		{ $$ = forCtrl( new ExpressionNode( build_constantInteger( *new string( "0u" ) ) ), $1, nullptr, OperKinds::LThan, nullptr, nullptr ); }
 	| 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 ';' '=' comma_expression				// CFA
+	| comma_expression ';' '=' comma_expression			// CFA
 		{ $$ = forCtrl( $4, $1, new ExpressionNode( build_constantInteger( *new string( "0" ) ) ),
 						OperKinds::LEThan, $4->clone(), new ExpressionNode( build_constantInteger( *new string( "1" ) ) ) ); }
@@ -1304,5 +1306,5 @@
 // If MUTEX becomes a general qualifier, there are shift/reduce conflicts, so change syntax to "with mutex".
 mutex_statement:
-	MUTEX '(' argument_expression_list ')' statement
+	MUTEX '(' argument_expression_list_opt ')' statement
 		{ SemanticError( yylloc, "Mutex statement is currently unimplemented." ); $$ = nullptr; }
 	;
@@ -1321,7 +1323,7 @@
 	WAITFOR '(' cast_expression ')'
 		{ $$ = $3; }
-//	| WAITFOR '(' cast_expression ',' argument_expression_list ')'
+//	| WAITFOR '(' cast_expression ',' argument_expression_list_opt ')'
 //	  	{ $$ = (ExpressionNode *)$3->set_last( $5 ); }
-	| WAITFOR '(' cast_expression_list ':' argument_expression_list ')'
+	| WAITFOR '(' cast_expression_list ':' argument_expression_list_opt ')'
 		{ $$ = (ExpressionNode *)($3->set_last( $5 )); }
 	;
@@ -2095,17 +2097,19 @@
 
 aggregate_control:										// CFA
-	GENERATOR
+	MONITOR
+		{ yyy = true; $$ = AggregateDecl::Monitor; }
+	| MUTEX STRUCT
+		{ yyy = true; $$ = AggregateDecl::Monitor; }
+	| GENERATOR
 		{ yyy = true; $$ = AggregateDecl::Generator; }
-	| MONITOR GENERATOR
+	| MUTEX GENERATOR
 		{ SemanticError( yylloc, "monitor generator is currently unimplemented." ); $$ = AggregateDecl::NoAggregate; }
 	| COROUTINE
 		{ yyy = true; $$ = AggregateDecl::Coroutine; }
-	| MONITOR
-		{ yyy = true; $$ = AggregateDecl::Monitor; }
-	| MONITOR COROUTINE
+	| MUTEX COROUTINE
 		{ SemanticError( yylloc, "monitor coroutine is currently unimplemented." ); $$ = AggregateDecl::NoAggregate; }
 	| THREAD
 		{ yyy = true; $$ = AggregateDecl::Thread; }
-	| MONITOR THREAD
+	| MUTEX THREAD
 		{ SemanticError( yylloc, "monitor thread is currently unimplemented." ); $$ = AggregateDecl::NoAggregate; }
 	;
@@ -2774,5 +2778,5 @@
 	| attr_name
 		{ $$ = DeclarationNode::newAttribute( $1 ); }
-	| attr_name '(' argument_expression_list ')'
+	| attr_name '(' argument_expression_list_opt ')'
 		{ $$ = DeclarationNode::newAttribute( $1, $3 ); }
 	;
