Index: src/Parser/parser.yy
===================================================================
--- src/Parser/parser.yy	(revision 910e1d0125019ed312cb7ec9bfe6067bddcf8ab6)
+++ src/Parser/parser.yy	(revision d41735a58b832e3dc3f3a49e0aa9017b192bfd9f)
@@ -10,6 +10,6 @@
 // Created On       : Sat Sep  1 20:22:55 2001
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Sun Nov 20 09:41:25 2022
-// Update Count     : 5816
+// Last Modified On : Mon Nov 21 22:34:30 2022
+// Update Count     : 5848
 //
 
@@ -383,5 +383,5 @@
 %type<ifctl> conditional_declaration
 %type<fctl> for_control_expression		for_control_expression_list
-%type<compop> updown updowneq downupdowneq
+%type<compop> upupeq updown updowneq downupdowneq
 %type<en> subrange
 %type<decl> asm_name_opt
@@ -489,5 +489,5 @@
 %type<decl> type_parameter type_parameter_list type_initializer_opt
 
-%type<en> type_parameters_opt type_list
+%type<en> type_parameters_opt type_list array_type_list
 
 %type<decl> type_qualifier type_qualifier_name forall type_qualifier_list_opt type_qualifier_list
@@ -3654,11 +3654,31 @@
 		{ $$ = DeclarationNode::newArray( 0, 0, false )->addArray( $3 ); }
 		// Cannot use constant_expression because of tuples => semantic check
-	| '[' push assignment_expression pop ',' comma_expression ']'
+	| '[' push assignment_expression pop ',' comma_expression ']' // CFA
 		{ $$ = DeclarationNode::newArray( $3, 0, false )->addArray( DeclarationNode::newArray( $6, 0, false ) ); }
 		// { SemanticError( yylloc, "New array dimension is currently unimplemented." ); $$ = nullptr; }
-	| '[' push TYPEDEFname pop ']'
+	| '[' push array_type_list pop ']'					// CFA
 		{ SemanticError( yylloc, "Type array dimension is currently unimplemented." ); $$ = nullptr; }
 	| multi_array_dimension
 	;
+
+array_type_list:
+	basic_type_name
+		{ $$ = new ExpressionNode( new TypeExpr( maybeMoveBuildType( $1 ) ) ); }
+	| type_name
+		{ $$ = new ExpressionNode( new TypeExpr( maybeMoveBuildType( $1 ) ) ); }
+	| assignment_expression upupeq assignment_expression
+	| array_type_list ',' basic_type_name
+		{ $$ = (ExpressionNode *)($1->set_last( new ExpressionNode( new TypeExpr( maybeMoveBuildType( $3 ) ) ) )); }
+	| array_type_list ',' type_name 
+		{ $$ = (ExpressionNode *)($1->set_last( new ExpressionNode( new TypeExpr( maybeMoveBuildType( $3 ) ) ) )); }
+	| array_type_list ',' assignment_expression upupeq assignment_expression
+	;
+
+upupeq:
+	'~'
+		{ $$ = OperKinds::LThan; }
+	| ErangeUpEq
+		{ $$ = OperKinds::LEThan; }
+ 	;
 
 multi_array_dimension:
