[2.7] properly free memory in pgen. (GH-7869) (closes bpo-27780

(cherry picked from commit 9ac11a752a19c3b8607582a3d5ccb615c467124b)

Co-authored-by: Benjamin Peterson <benjamin@python.org>
diff --git a/Parser/grammar.c b/Parser/grammar.c
index fa1dd7c..fcd2219 100644
--- a/Parser/grammar.c
+++ b/Parser/grammar.c
@@ -32,6 +32,24 @@
     return g;
 }
 
+void
+freegrammar(grammar *g)
+{
+    int i;
+    for (i = 0; i < g->g_ndfas; i++) {
+        int j;
+        free(g->g_dfa[i].d_name);
+        for (j = 0; j < g->g_dfa[i].d_nstates; j++)
+            PyObject_FREE(g->g_dfa[i].d_state[j].s_arc);
+        PyObject_FREE(g->g_dfa[i].d_state);
+    }
+    PyObject_FREE(g->g_dfa);
+    for (i = 0; i < g->g_ll.ll_nlabels; i++)
+        free(g->g_ll.ll_label[i].lb_str);
+    PyObject_FREE(g->g_ll.ll_label);
+    PyObject_FREE(g);
+}
+
 dfa *
 adddfa(grammar *g, int type, char *name)
 {