[3.10] bpo-34013: Generalize the invalid legacy statement error message (GH-27389). (GH-27391)

(cherry picked from commit 6948964ecf94e858448dd28eea634317226d2913)

Co-authored-by: Pablo Galindo Salgado <Pablogsal@gmail.com>
diff --git a/Grammar/python.gram b/Grammar/python.gram
index 6b2fa6a..d3b0fd5 100644
--- a/Grammar/python.gram
+++ b/Grammar/python.gram
@@ -848,10 +848,15 @@
     | a=disjunction 'if' b=disjunction 'else' c=expression { _PyAST_IfExp(b, a, c, EXTRA) }
     | disjunction
     | lambdef
+invalid_legacy_expression:
+    | a=NAME b=expression_without_invalid {
+        _PyPegen_check_legacy_stmt(p, a) ? RAISE_SYNTAX_ERROR_KNOWN_RANGE(a, b, "Missing parentheses in call to '%U'.", a->v.Name.id) : NULL}
+ 
 invalid_expression:
+   | invalid_legacy_expression
     # !(NAME STRING) is not matched so we don't show this error with some invalid string prefixes like: kf"dsfsdf"
     # Soft keywords need to also be ignored because they can be parsed as NAME NAME
-    | !(NAME STRING | SOFT_KEYWORD) a=disjunction b=expression_without_invalid {
+   | !(NAME STRING | SOFT_KEYWORD) a=disjunction b=expression_without_invalid {
         RAISE_SYNTAX_ERROR_KNOWN_RANGE(a, b, "invalid syntax. Perhaps you forgot a comma?") }
 
 invalid_named_expression: