Index: src/Parser/lex.ll
===================================================================
--- src/Parser/lex.ll	(revision 89c2f7c92369856ac89bc39ac4e4671b2ac71fb3)
+++ src/Parser/lex.ll	(revision 7a54d675654713ade57f706218d5caf830372d95)
@@ -10,6 +10,6 @@
  * Created On       : Sat Sep 22 08:58:10 2001
  * Last Modified By : Peter A. Buhr
- * Last Modified On : Wed Mar 13 14:54:30 2019
- * Update Count     : 707
+ * Last Modified On : Wed May 15 21:25:27 2019
+ * Update Count     : 708
  */
 
@@ -265,4 +265,5 @@
 fortran			{ KEYWORD_RETURN(FORTRAN); }
 ftype			{ KEYWORD_RETURN(FTYPE); }				// CFA
+generator		{ KEYWORD_RETURN(GENERATOR); }			// CFA
 _Generic		{ KEYWORD_RETURN(GENERIC); }			// C11
 goto			{ KEYWORD_RETURN(GOTO); }
Index: src/Parser/parser.yy
===================================================================
--- src/Parser/parser.yy	(revision 89c2f7c92369856ac89bc39ac4e4671b2ac71fb3)
+++ src/Parser/parser.yy	(revision 7a54d675654713ade57f706218d5caf830372d95)
@@ -10,6 +10,6 @@
 // Created On       : Sat Sep  1 20:22:55 2001
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Mon Apr 15 15:02:56 2019
-// Update Count     : 4290
+// Last Modified On : Wed May 15 21:25:27 2019
+// Update Count     : 4296
 //
 
@@ -173,5 +173,5 @@
 DeclarationNode * fieldDecl( DeclarationNode * typeSpec, DeclarationNode * fieldList ) {
 	if ( ! fieldList ) {								// field declarator ?
-		if ( ! ( typeSpec->type && typeSpec->type->kind == TypeData::Aggregate ) ) {
+		if ( ! ( typeSpec->type && (typeSpec->type->kind == TypeData::Aggregate || typeSpec->type->kind == TypeData::Enum) ) ) {
 			stringstream ss;
 			typeSpec->type->print( ss );
@@ -275,5 +275,5 @@
 %token ENUM STRUCT UNION
 %token EXCEPTION										// CFA
-%token COROUTINE MONITOR THREAD							// CFA
+%token GENERATOR COROUTINE MONITOR THREAD				// CFA
 %token OTYPE FTYPE DTYPE TTYPE TRAIT					// CFA
 %token SIZEOF OFFSETOF
@@ -677,5 +677,5 @@
 	// empty
 		{ $$ = nullptr; }
-	| '?'												// CFA, default parameter
+	| '@'												// CFA, default parameter
 		{ SemanticError( yylloc, "Default parameter for argument is currently unimplemented." ); $$ = nullptr; }
 	 	// { $$ = new ExpressionNode( build_constantInteger( *new string( "2" ) ) ); }
@@ -796,4 +796,6 @@
 		{ $$ = new ExpressionNode( build_cast( $2, $4 ) ); }
 		// keyword cast cannot be grouped because of reduction in aggregate_key
+	| '(' GENERATOR '&' ')' cast_expression				// CFA
+		{ $$ = new ExpressionNode( build_keyword_cast( KeywordCastExpr::Coroutine, $5 ) ); }
 	| '(' COROUTINE '&' ')' cast_expression				// CFA
 		{ $$ = new ExpressionNode( build_keyword_cast( KeywordCastExpr::Coroutine, $5 ) ); }
@@ -2061,4 +2063,6 @@
 	| EXCEPTION
 		{ yyy = true; $$ = DeclarationNode::Exception; }
+	| GENERATOR
+		{ yyy = true; $$ = DeclarationNode::Coroutine; }
 	| COROUTINE
 		{ yyy = true; $$ = DeclarationNode::Coroutine; }
