diff --git a/Python/bltinmodule.c b/Python/bltinmodule.c
index 2461904..7c46286 100644
--- a/Python/bltinmodule.c
+++ b/Python/bltinmodule.c
@@ -34,7 +34,6 @@
 #include "Python.h"
 
 #include "node.h"
-#include "graminit.h"
 #include "compile.h"
 #include "eval.h"
 
@@ -283,11 +282,11 @@
 	if (!PyArg_ParseTuple(args, "sss:compile", &str, &filename, &startstr))
 		return NULL;
 	if (strcmp(startstr, "exec") == 0)
-		start = file_input;
+		start = Py_file_input;
 	else if (strcmp(startstr, "eval") == 0)
-		start = eval_input;
+		start = Py_eval_input;
 	else if (strcmp(startstr, "single") == 0)
-		start = single_input;
+		start = Py_single_input;
 	else {
 		PyErr_SetString(PyExc_ValueError,
 		   "compile() mode must be 'exec' or 'eval' or 'single'");
@@ -521,7 +520,7 @@
 	}
 	while (*str == ' ' || *str == '\t')
 		str++;
-	return PyRun_String(str, eval_input, globals, locals);
+	return PyRun_String(str, Py_eval_input, globals, locals);
 }
 
 static PyObject *
@@ -558,7 +557,7 @@
 		PyErr_SetFromErrno(PyExc_IOError);
 		return NULL;
 	}
-	res = PyRun_File(fp, filename, file_input, globals, locals);
+	res = PyRun_File(fp, filename, Py_file_input, globals, locals);
 	Py_BEGIN_ALLOW_THREADS
 	fclose(fp);
 	Py_END_ALLOW_THREADS
@@ -882,7 +881,7 @@
 					 PyEval_GetBuiltins()) != 0)
 			return NULL;
 	}
-	res = PyRun_String(str, eval_input, globals, locals);
+	res = PyRun_String(str, Py_eval_input, globals, locals);
 	Py_DECREF(line);
 	return res;
 }
diff --git a/Python/ceval.c b/Python/ceval.c
index 58f0a8c..e23ea72 100644
--- a/Python/ceval.c
+++ b/Python/ceval.c
@@ -43,7 +43,6 @@
 #include "frameobject.h"
 #include "eval.h"
 #include "opcode.h"
-#include "graminit.h"
 
 #include <ctype.h>
 
@@ -2637,7 +2636,8 @@
 	if (PyFile_Check(prog)) {
 		FILE *fp = PyFile_AsFile(prog);
 		char *name = PyString_AsString(PyFile_Name(prog));
-		if (PyRun_File(fp, name, file_input, globals, locals) == NULL)
+		if (PyRun_File(fp, name, Py_file_input,
+			       globals, locals) == NULL)
 			return -1;
 		return 0;
 	}
@@ -2647,7 +2647,7 @@
 				"embedded '\\0' in exec string");
 		return -1;
 	}
-	v = PyRun_String(s, file_input, globals, locals);
+	v = PyRun_String(s, Py_file_input, globals, locals);
 	if (v == NULL)
 		return -1;
 	Py_DECREF(v);
diff --git a/Python/compile.c b/Python/compile.c
index 9d6d395..9525aa0 100644
--- a/Python/compile.c
+++ b/Python/compile.c
@@ -58,6 +58,20 @@
 
 #include <ctype.h>
 
+/* Three symbols from graminit.h are also defined in Python.h, with
+   Py_ prefixes to their names.  Python.h can't include graminit.h
+   (which defines too many confusing symbols), but we can check here
+   that they haven't changed (which is very unlikely, but possible). */
+#if Py_single_input != single_input
+#error "single_input has changed -- update Py_single_input in Python.h"
+#endif
+#if Py_file_input != file_input
+#error "file_input has changed -- update Py_file_input in Python.h"
+#endif
+#if Py_eval_input != eval_input
+#error "eval_input has changed -- update Py_eval_input in Python.h"
+#endif
+
 int Py_OptimizeFlag = 0;
 
 #define OP_DELETE 0
diff --git a/Python/import.c b/Python/import.c
index ea6440a..f2d8040 100644
--- a/Python/import.c
+++ b/Python/import.c
@@ -35,7 +35,6 @@
 
 #include "node.h"
 #include "token.h"
-#include "graminit.h"
 #include "errcode.h"
 #include "marshal.h"
 #include "compile.h"
@@ -43,8 +42,6 @@
 #include "osdefs.h"
 #include "importdl.h"
 #ifdef macintosh
-/* 'argument' is a grammar symbol, but also used in some mac header files */
-#undef argument
 #include "macglue.h"
 #endif
 
@@ -317,7 +314,7 @@
 	PyCodeObject *co;
 	node *n;
 
-	n = PyParser_SimpleParseFile(fp, pathname, file_input);
+	n = PyParser_SimpleParseFile(fp, pathname, Py_file_input);
 	if (n == NULL)
 		return NULL;
 	co = PyNode_Compile(n, pathname);
diff --git a/Python/pythonrun.c b/Python/pythonrun.c
index 8bb7565..138bc3f 100644
--- a/Python/pythonrun.c
+++ b/Python/pythonrun.c
@@ -36,7 +36,6 @@
 #include "grammar.h"
 #include "node.h"
 #include "parsetok.h"
-#include "graminit.h"
 #undef argument /* Avoid conflict on Mac */
 #include "errcode.h"
 #include "compile.h"
@@ -237,7 +236,7 @@
 	}
 	Py_BEGIN_ALLOW_THREADS
 	n = PyParser_ParseFile(fp, filename, &_PyParser_Grammar,
-			       single_input, ps1, ps2, &err);
+			       Py_single_input, ps1, ps2, &err);
 	Py_END_ALLOW_THREADS
 	Py_XDECREF(v);
 	Py_XDECREF(w);
@@ -296,7 +295,7 @@
 			Py_OptimizeFlag = 1;
 		v = run_pyc_file(fp, filename, d, d);
 	} else {
-		v = PyRun_File(fp, filename, file_input, d, d);
+		v = PyRun_File(fp, filename, Py_file_input, d, d);
 	}
 	if (v == NULL) {
 		PyErr_Print();
@@ -316,7 +315,7 @@
 	if (m == NULL)
 		return -1;
 	d = PyModule_GetDict(m);
-	v = PyRun_String(command, file_input, d, d);
+	v = PyRun_String(command, Py_file_input, d, d);
 	if (v == NULL) {
 		PyErr_Print();
 		return -1;
