diff --git a/promql/parser/generated_parser.y b/promql/parser/generated_parser.y
index 3865dc6548..ca710b1ab0 100644
--- a/promql/parser/generated_parser.y
+++ b/promql/parser/generated_parser.y
@@ -363,17 +363,18 @@ grouping_label_list:
 grouping_label  : maybe_label
                         {
                         if !model.LabelName($1.Val).IsValid() {
-                                yylex.(*parser).unexpected("grouping opts", "label")
+                                yylex.(*parser).addParseErrf($1.PositionRange(),"invalid label name for grouping: %q", $1.Val)
                         }
                         $$ = $1
                         }
                 | STRING {
-                        if !model.LabelName(yylex.(*parser).unquoteString($1.Val)).IsValid() {
-                                yylex.(*parser).unexpected("grouping opts", "label")
+                        unquoted := yylex.(*parser).unquoteString($1.Val)
+                        if !model.LabelName(unquoted).IsValid() {
+                                yylex.(*parser).addParseErrf($1.PositionRange(),"invalid label name for grouping: %q", unquoted)
                         }
                         $$ = $1
                         $$.Pos++
-                        $$.Val = yylex.(*parser).unquoteString($$.Val)
+                        $$.Val = unquoted
                         }
                 | error
                         { yylex.(*parser).unexpected("grouping opts", "label"); $$ = Item{} }
diff --git a/promql/parser/generated_parser.y.go b/promql/parser/generated_parser.y.go
index 7ff8591169..04bc081f2f 100644
--- a/promql/parser/generated_parser.y.go
+++ b/promql/parser/generated_parser.y.go
@@ -1259,19 +1259,20 @@ yydefault:
 		yyDollar = yyS[yypt-1 : yypt+1]
 		{
 			if !model.LabelName(yyDollar[1].item.Val).IsValid() {
-				yylex.(*parser).unexpected("grouping opts", "label")
+				yylex.(*parser).addParseErrf(yyDollar[1].item.PositionRange(), "invalid label name for grouping: %q", yyDollar[1].item.Val)
 			}
 			yyVAL.item = yyDollar[1].item
 		}
 	case 59:
 		yyDollar = yyS[yypt-1 : yypt+1]
 		{
-			if !model.LabelName(yylex.(*parser).unquoteString(yyDollar[1].item.Val)).IsValid() {
-				yylex.(*parser).unexpected("grouping opts", "label")
+			unquoted := yylex.(*parser).unquoteString(yyDollar[1].item.Val)
+			if !model.LabelName(unquoted).IsValid() {
+				yylex.(*parser).addParseErrf(yyDollar[1].item.PositionRange(), "invalid label name for grouping: %q", unquoted)
 			}
 			yyVAL.item = yyDollar[1].item
 			yyVAL.item.Pos++
-			yyVAL.item.Val = yylex.(*parser).unquoteString(yyVAL.item.Val)
+			yyVAL.item.Val = unquoted
 		}
 	case 60:
 		yyDollar = yyS[yypt-1 : yypt+1]