Ensure that early = are not matched by the parser as invalid comparisons (GH-25375)

diff --git a/Grammar/python.gram b/Grammar/python.gram
index 324793c..8524a12 100644
--- a/Grammar/python.gram
+++ b/Grammar/python.gram
@@ -447,6 +447,10 @@
     | invalid_named_expression
     | expression !':='
 
+direct_named_expression[expr_ty]:
+    | a=NAME ':=' ~ b=expression { _PyAST_NamedExpr(CHECK(expr_ty, _PyPegen_set_expr_context(p, a, Store)), b, EXTRA) }
+    | expression !':='
+
 annotated_rhs[expr_ty]: yield_expr | star_expressions
 
 expressions[expr_ty]:
@@ -671,7 +675,7 @@
     | a=args [','] &')' { a }
     | invalid_arguments
 args[expr_ty]:
-    | a[asdl_expr_seq*]=','.(starred_expression | named_expression !'=')+ b=[',' k=kwargs {k}] { _PyPegen_collect_call_seqs(p, a, b, EXTRA) }
+    | a[asdl_expr_seq*]=','.(starred_expression | direct_named_expression !'=')+ b=[',' k=kwargs {k}] { _PyPegen_collect_call_seqs(p, a, b, EXTRA) }
     | a=kwargs { _PyAST_Call(_PyPegen_dummy_name(p),
                           CHECK_NULL_ALLOWED(asdl_expr_seq*, _PyPegen_seq_extract_starred_exprs(p, a)),
                           CHECK_NULL_ALLOWED(asdl_keyword_seq*, _PyPegen_seq_delete_starred_exprs(p, a)),