diff --git a/Include/grammar.h b/Include/grammar.h
index faccae4..4b66b1e 100644
--- a/Include/grammar.h
+++ b/Include/grammar.h
@@ -66,7 +66,7 @@
 } grammar;
 
 /* FUNCTIONS */
-dfa *PyGrammar_FindDFA(grammar *g, int type);
+const dfa *PyGrammar_FindDFA(grammar *g, int type);
 const char *PyGrammar_LabelRepr(label *lb);
 void PyGrammar_AddAccelerators(grammar *g);
 void PyGrammar_RemoveAccelerators(grammar *);
diff --git a/Modules/parsermodule.c b/Modules/parsermodule.c
index a215c7e..0f68162 100644
--- a/Modules/parsermodule.c
+++ b/Modules/parsermodule.c
@@ -644,7 +644,6 @@
 {
     int type = TYPE(tree);
     int nch = NCH(tree);
-    dfa *nt_dfa;
     state *dfa_state;
     int pos, arc;
 
@@ -654,7 +653,7 @@
         PyErr_Format(parser_error, "Unrecognized node type %d.", TYPE(tree));
         return 0;
     }
-    nt_dfa = &_PyParser_Grammar.g_dfa[type];
+    const dfa *nt_dfa = &_PyParser_Grammar.g_dfa[type];
     REQ(tree, nt_dfa->d_type);
 
     /* Run the DFA for this nonterminal. */
diff --git a/Parser/acceler.c b/Parser/acceler.c
index 3a230c1..e515833 100644
--- a/Parser/acceler.c
+++ b/Parser/acceler.c
@@ -17,15 +17,14 @@
 #include "parser.h"
 
 /* Forward references */
-static void fixdfa(grammar *, dfa *);
+static void fixdfa(grammar *, const dfa *);
 static void fixstate(grammar *, state *);
 
 void
 PyGrammar_AddAccelerators(grammar *g)
 {
-    dfa *d;
     int i;
-    d = g->g_dfa;
+    const dfa *d = g->g_dfa;
     for (i = g->g_ndfas; --i >= 0; d++)
         fixdfa(g, d);
     g->g_accel = 1;
@@ -34,10 +33,9 @@
 void
 PyGrammar_RemoveAccelerators(grammar *g)
 {
-    dfa *d;
     int i;
     g->g_accel = 0;
-    d = g->g_dfa;
+    const dfa *d = g->g_dfa;
     for (i = g->g_ndfas; --i >= 0; d++) {
         state *s;
         int j;
@@ -51,7 +49,7 @@
 }
 
 static void
-fixdfa(grammar *g, dfa *d)
+fixdfa(grammar *g, const dfa *d)
 {
     state *s;
     int j;
@@ -63,7 +61,7 @@
 static void
 fixstate(grammar *g, state *s)
 {
-    arc *a;
+    const arc *a;
     int k;
     int *accel;
     int nl = g->g_ll.ll_nlabels;
@@ -78,14 +76,14 @@
     a = s->s_arc;
     for (k = s->s_narcs; --k >= 0; a++) {
         int lbl = a->a_lbl;
-        label *l = &g->g_ll.ll_label[lbl];
+        const label *l = &g->g_ll.ll_label[lbl];
         int type = l->lb_type;
         if (a->a_arrow >= (1 << 7)) {
             printf("XXX too many states!\n");
             continue;
         }
         if (ISNONTERMINAL(type)) {
-            dfa *d1 = PyGrammar_FindDFA(g, type);
+            const dfa *d1 = PyGrammar_FindDFA(g, type);
             int ibit;
             if (type - NT_OFFSET >= (1 << 7)) {
                 printf("XXX too high nonterminal number!\n");
diff --git a/Parser/grammar1.c b/Parser/grammar1.c
index fec6d9e..e0b8fbb 100644
--- a/Parser/grammar1.c
+++ b/Parser/grammar1.c
@@ -7,12 +7,11 @@
 
 /* Return the DFA for the given type */
 
-dfa *
+const dfa *
 PyGrammar_FindDFA(grammar *g, int type)
 {
-    dfa *d;
     /* Massive speed-up */
-    d = &g->g_dfa[type - NT_OFFSET];
+    const dfa *d = &g->g_dfa[type - NT_OFFSET];
     assert(d->d_type == type);
     return d;
 }
diff --git a/Parser/parser.c b/Parser/parser.c
index c21b6fd..227b918 100644
--- a/Parser/parser.c
+++ b/Parser/parser.c
@@ -35,7 +35,7 @@
 #define s_empty(s) ((s)->s_top == &(s)->s_base[MAXSTACK])
 
 static int
-s_push(stack *s, dfa *d, node *parent)
+s_push(stack *s, const dfa *d, node *parent)
 {
     stackentry *top;
     if (s->s_top == s->s_base) {
@@ -119,7 +119,7 @@
 }
 
 static int
-push(stack *s, int type, dfa *d, int newstate, int lineno, int col_offset,
+push(stack *s, int type, const dfa *d, int newstate, int lineno, int col_offset,
      int end_lineno, int end_col_offset)
 {
     int err;
@@ -144,7 +144,7 @@
     int n = g->g_ll.ll_nlabels;
 
     if (type == NAME) {
-        label *l = g->g_ll.ll_label;
+        const label *l = g->g_ll.ll_label;
         int i;
         for (i = n; i > 0; i--, l++) {
             if (l->lb_type != NAME || l->lb_str == NULL ||
@@ -168,7 +168,7 @@
     }
 
     {
-        label *l = g->g_ll.ll_label;
+        const label *l = g->g_ll.ll_label;
         int i;
         for (i = n; i > 0; i--, l++) {
             if (l->lb_type == type && l->lb_str == NULL) {
@@ -246,7 +246,7 @@
     /* Loop until the token is shifted or an error occurred */
     for (;;) {
         /* Fetch the current dfa and state */
-        dfa *d = ps->p_stack.s_top->s_dfa;
+        const dfa *d = ps->p_stack.s_top->s_dfa;
         state *s = &d->d_state[ps->p_stack.s_top->s_state];
 
         D(printf(" DFA '%s', state %d:",
@@ -260,7 +260,6 @@
                     /* Push non-terminal */
                     int nt = (x >> 8) + NT_OFFSET;
                     int arrow = x & ((1<<7)-1);
-                    dfa *d1;
                     if (nt == func_body_suite && !(ps->p_flags & PyCF_TYPE_COMMENTS)) {
                         /* When parsing type comments is not requested,
                            we can provide better errors about bad indentation
@@ -268,7 +267,7 @@
                         D(printf(" [switch func_body_suite to suite]"));
                         nt = suite;
                     }
-                    d1 = PyGrammar_FindDFA(
+                    const dfa *d1 = PyGrammar_FindDFA(
                         ps->p_grammar, nt);
                     if ((err = push(&ps->p_stack, nt, d1,
                         arrow, lineno, col_offset,
diff --git a/Parser/parser.h b/Parser/parser.h
index ebb06c2..b16075e 100644
--- a/Parser/parser.h
+++ b/Parser/parser.h
@@ -11,7 +11,7 @@
 
 typedef struct {
     int              s_state;       /* State in current DFA */
-    dfa             *s_dfa;         /* Current DFA */
+    const dfa       *s_dfa;         /* Current DFA */
     struct _node    *s_parent;      /* Where to add next node */
 } stackentry;
 
