Index: src/Parser/parser.yy
===================================================================
--- src/Parser/parser.yy	(revision 5786403d7c24416165ff9097e999c5746fbe7f3e)
+++ src/Parser/parser.yy	(revision a16f2b6aa2dbe75a4f385cb3a76b9b6159ebea02)
@@ -10,6 +10,6 @@
 // Created On       : Sat Sep  1 20:22:55 2001
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Fri Nov 15 15:01:33 2024
-// Update Count     : 6915
+// Last Modified On : Sun Dec 15 21:30:38 2024
+// Update Count     : 6933
 //
 
@@ -199,13 +199,12 @@
 
 DeclarationNode * fieldDecl( DeclarationNode * typeSpec, DeclarationNode * fieldList ) {
-	if ( nullptr == fieldList ) {
-		if ( !( typeSpec->type && typeSpec->type->kind == TypeData::Aggregate ) ) {
-			stringstream ss;
+	if ( fieldList == nullptr ) {
+		if ( !( typeSpec->type && typeSpec->type->kind == TypeData::Aggregate ) ) { // int; no fieldList
 			// printf( "fieldDecl1 typeSpec %p\n", typeSpec ); typeSpec->type->print( std::cout );
-			SemanticWarning( yylloc, Warning::SuperfluousDecl, ss.str().c_str() );
+			SemanticWarning( yylloc, Warning::SuperfluousDecl );
 			return nullptr;
 		} // if
 		// printf( "fieldDecl2 typeSpec %p\n", typeSpec ); typeSpec->type->print( std::cout );
-		fieldList = DeclarationNode::newName( nullptr );
+		fieldList = DeclarationNode::newName( nullptr ); // struct S { ... } no fieldList
 	} // if
 
@@ -464,6 +463,6 @@
 // declarations
 %type<decl> abstract_declarator abstract_ptr abstract_array abstract_function array_dimension multi_array_dimension
-%type<decl> abstract_parameter_declarator_opt abstract_parameter_declarator abstract_parameter_ptr abstract_parameter_array abstract_parameter_function array_parameter_dimension array_parameter_1st_dimension
-%type<decl> abstract_parameter_declaration
+%type<decl> abstract_parameter_declarator_opt abstract_parameter_declarator abstract_parameter_ptr abstract_parameter_array
+			abstract_parameter_function array_parameter_dimension array_parameter_1st_dimension abstract_parameter_declaration
 
 %type<aggKey> aggregate_key aggregate_data aggregate_control
@@ -492,5 +491,5 @@
 %type<decl> exception_declaration
 
-%type<decl> field_declaration_list_opt field_declaration field_declaring_list_opt field_declarator field_abstract_list_opt field_abstract
+%type<decl> field_declaration_list_opt field_declaration field_declaring_list field_declaring_list_opt field_declarator field_abstract_list_opt field_abstract
 %type<expr> field field_name_list field_name fraction_constants_opt
 
@@ -978,9 +977,9 @@
 	| '(' VIRTUAL type_no_function ')' cast_expression	// CFA
 		{ $$ = new ExpressionNode( new ast::VirtualCastExpr( yylloc, maybeMoveBuild( $5 ), maybeMoveBuildType( $3 ) ) ); }
-	| '(' RETURN type_no_function ')' cast_expression	// CFA
+	| '(' RETURN type_no_function ')' cast_expression	// CFA (ASCRIPTION)
 		{ $$ = new ExpressionNode( build_cast( yylloc, $3, $5, ast::ReturnCast ) ); }
-	| '(' COERCE type_no_function ')' cast_expression	// CFA
+	| '(' COERCE type_no_function ')' cast_expression	// CFA (COERCION)
 		{ SemanticError( yylloc, "Coerce cast is currently unimplemented." ); $$ = nullptr; }
-	| '(' qualifier_cast_list ')' cast_expression		// CFA
+	| '(' qualifier_cast_list ')' cast_expression		// CFA, (modify CVs of cast_expression)
 		{ SemanticError( yylloc, "Qualifier cast is currently unimplemented." ); $$ = nullptr; }
 //	| '(' type_no_function ')' tuple
@@ -2701,10 +2700,5 @@
 	type_specifier field_declaring_list_opt ';'
 		{
-			// printf( "type_specifier1 %p %s\n", $$, $$->type->aggregate.name ? $$->type->aggregate.name->c_str() : "(nil)" );
 			$$ = fieldDecl( $1, $2 );
-			// printf( "type_specifier2 %p %s\n", $$, $$->type->aggregate.name ? $$->type->aggregate.name->c_str() : "(nil)" );
-			// for ( Attribute * attr: reverseIterate( $$->attributes ) ) {
-			//   printf( "\tattr %s\n", attr->name.c_str() );
-			// } // for
 		}
 	| type_specifier field_declaring_list_opt '}'		// invalid syntax rule
@@ -2741,5 +2735,9 @@
 	// empty
 		{ $$ = nullptr; }
-	| field_declarator
+	| field_declaring_list
+	;
+
+field_declaring_list:
+	field_declarator
 	| field_declaring_list_opt ',' attribute_list_opt field_declarator
 		{ $$ = $1->set_last( $4->addQualifiers( $3 ) ); }
@@ -3512,7 +3510,7 @@
 	| ATTRIBUTE '(' attribute_name_list ')'				// CFA
 		{ $$ = $3; }
-	| ATTR '(' attribute_name_list ')'					// CFA
-		{ $$ = $3; }
-	| C23_ATTRIBUTE
+	| ATTR attribute_name_list ']'						// CFA, @[...]
+		{ $$ = $2; }
+	| C23_ATTRIBUTE										// C23, [[...]], see lexer
 		{ $$ = DeclarationNode::newAttribute( $1 ); }
 	;
