Index: src/Parser/lex.ll
===================================================================
--- src/Parser/lex.ll	(revision 1a8b17a5ed4a11d2151c50161c916c3d98441e70)
+++ src/Parser/lex.ll	(revision 3a08cb112c557e77ab20cc08dfd54c9f21eff65c)
@@ -10,6 +10,6 @@
  * Created On       : Sat Sep 22 08:58:10 2001
  * Last Modified By : Peter A. Buhr
- * Last Modified On : Sun Oct 13 10:03:28 2024
- * Update Count     : 869
+ * Last Modified On : Sun Oct 13 16:49:47 2024
+ * Update Count     : 876
  */
 
@@ -175,11 +175,10 @@
 				// operator {op_unary_pre_post}|{op_binary_over}|{op_binary_not_over}
 
-				// C23 attributes
-attr_string "\""[^\"]*"\""
-attr_arg_opt ({hv_white}*"("{hv_white}*{attr_string}{hv_white}*")")?
+				// C23 attributes, CPP also handles missing quote delimiter
+attr_string "\""([^\"\\\n]|{escape_seq})*["\n]
+attr_arg_opt ({hv_white}*"("({hv_white}*{attr_string}{hv_white}*)+")")?
 attributes "deprecated"{attr_arg_opt}|"fallthrough"|"nodiscard"{attr_arg_opt}|"maybe_unused"|"noreturn"|"_Noreturn"|"unsequenced"|"unused"|"reproducible"|{identifier}{hv_white}*"::"{hv_white}*{identifier}
 
 %x COMMENT
-%x BKQUOTE
 %x QUOTE
 %x STRING
@@ -382,5 +381,5 @@
 				/* C23 attributes */
 "[["{hv_white}*{attributes}({hv_white}*","{hv_white}*{attributes})*{hv_white}*"]]" {
-	strtext = new string( &yytext[2], yyleng - 4 );		// remove [[]]
+	strtext = new string( &yytext[2], yyleng - 4 );		// remove delimiters "[[" and "]]"
 	RETURN_STR(C23_ATTRIBUTE);
 }
@@ -396,5 +395,5 @@
 {hex_floating_constant}	{ NUMERIC_RETURN(FLOATINGconstant); }
 
-				/* character constant, allows empty value */
+				/* character constant, allows empty value, CPP also handles missing quote delimiter */
 ({cwide_prefix}[_]?)?['] { BEGIN QUOTE; rm_underscore(); strtext = new string( yytext, yyleng ); }
 <QUOTE>[^'\\\n]* { strtext->append( yytext, yyleng ); }
@@ -402,5 +401,5 @@
 				/* ' stop editor highlighting */
 
-				/* string constant */
+				/* string constant, CPP also handles missing quote delimiter */
 ({swide_prefix}[_]?)?["] { BEGIN STRING; rm_underscore(); strtext = new string( yytext, yyleng ); }
 <STRING>[^"\\\n]* { strtext->append( yytext, yyleng ); }
