Index: src/Parser/parser.yy
===================================================================
--- src/Parser/parser.yy	(revision 0bd46fdf0880513efbef382cb2e926954f5c6001)
+++ src/Parser/parser.yy	(revision 36cb4d92efaaeac0da43b1177fc4a6cd1daaa50b)
@@ -10,6 +10,6 @@
 // Created On       : Sat Sep  1 20:22:55 2001
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Sat Aug 27 13:21:28 2022
-// Update Count     : 5661
+// Last Modified On : Mon Sep 26 08:45:53 2022
+// Update Count     : 5704
 //
 
@@ -247,4 +247,14 @@
 	} // if
 } // forCtrl
+
+static void IdentifierBeforeIdentifier( string & identifier1, string & identifier2, const char * kind ) {
+	SemanticError( yylloc, ::toString( "Adjacent identifiers \"", identifier1, "\" and \"", identifier2, "\" are not meaningful in a", kind, ".\n"
+				   "Possible cause is misspelled type name or missing generic parameter." ) );
+} // IdentifierBeforeIdentifier
+
+static void IdentifierBeforeType( string & identifier, const char * kind ) {
+	SemanticError( yylloc, ::toString( "Identifier \"", identifier, "\" cannot appear before a ", kind, ".\n"
+				   "Possible cause is misspelled storage/CV qualifier, misspelled typename, or missing generic parameter." ) );
+} // IdentifierBeforeType
 
 bool forall = false;									// aggregate have one or more forall qualifiers ?
@@ -651,17 +661,15 @@
 	//   	{ SemanticError( yylloc, "Resume expression is currently unimplemented." ); $$ = nullptr; }
 	| IDENTIFIER IDENTIFIER								// syntax error
-		{
-			SemanticError( yylloc, ::toString( "Adjacent identifiers are not meaningful in an expression. "
-											   "Possible problem is identifier \"", *$1.str,
-											   "\" is a misspelled typename or an incorrectly specified type name, "
-											   "e.g., missing generic parameter or missing struct/union/enum before typename." ) );
-			$$ = nullptr;
- 		}
-	| IDENTIFIER direct_type							// syntax error
-		{
-			SemanticError( yylloc, ::toString( "Identifier \"", *$1.str, "\" cannot appear before a type. "
-											   "Possible problem is misspelled storage or CV qualifier." ) );
-			$$ = nullptr;
-		}
+		{ IdentifierBeforeIdentifier( *$1.str, *$2.str, "n expression" ); $$ = nullptr; }
+	| IDENTIFIER type_qualifier							// syntax error
+		{ IdentifierBeforeType( *$1.str, "type qualifier" ); $$ = nullptr; }
+	| IDENTIFIER storage_class							// syntax error
+		{ IdentifierBeforeType( *$1.str, "storage class" ); $$ = nullptr; }
+	| IDENTIFIER basic_type_name						// syntax error
+		{ IdentifierBeforeType( *$1.str, "type" ); $$ = nullptr; }
+	| IDENTIFIER TYPEDEFname							// syntax error
+		{ IdentifierBeforeType( *$1.str, "type" ); $$ = nullptr; }
+	| IDENTIFIER TYPEGENname							// syntax error
+		{ IdentifierBeforeType( *$1.str, "type" ); $$ = nullptr; }
 	;
 
@@ -2993,4 +3001,16 @@
 		{ $$ = DeclarationNode::newDirectiveStmt( new StatementNode( build_directive( $1 ) ) ); }
 	| declaration
+	| IDENTIFIER IDENTIFIER
+		{ IdentifierBeforeIdentifier( *$1.str, *$2.str, " declaration" ); $$ = nullptr; }
+	| IDENTIFIER type_qualifier							// syntax error
+		{ IdentifierBeforeType( *$1.str, "type qualifier" ); $$ = nullptr; }
+	| IDENTIFIER storage_class							// syntax error
+		{ IdentifierBeforeType( *$1.str, "storage class" ); $$ = nullptr; }
+	| IDENTIFIER basic_type_name						// syntax error
+		{ IdentifierBeforeType( *$1.str, "type" ); $$ = nullptr; }
+	| IDENTIFIER TYPEDEFname							// syntax error
+		{ IdentifierBeforeType( *$1.str, "type" ); $$ = nullptr; }
+	| IDENTIFIER TYPEGENname							// syntax error
+		{ IdentifierBeforeType( *$1.str, "type" ); $$ = nullptr; }
 	| external_function_definition
 	| EXTENSION external_definition						// GCC, multiple __extension__ allowed, meaning unknown
