2 /* Print a bunch of C initializers that represent a grammar */
4 #include "pgenheaders.h"
8 static void printarcs(int, dfa
*, FILE *);
9 static void printstates(grammar
*, FILE *);
10 static void printdfas(grammar
*, FILE *);
11 static void printlabels(grammar
*, FILE *);
14 printgrammar(grammar
*g
, FILE *fp
)
16 fprintf(fp
, "#include \"pgenheaders.h\"\n");
17 fprintf(fp
, "#include \"grammar.h\"\n");
20 fprintf(fp
, "grammar _PyParser_Grammar = {\n");
21 fprintf(fp
, "\t%d,\n", g
->g_ndfas
);
22 fprintf(fp
, "\tdfas,\n");
23 fprintf(fp
, "\t{%d, labels},\n", g
->g_ll
.ll_nlabels
);
24 fprintf(fp
, "\t%d\n", g
->g_start
);
29 printnonterminals(grammar
*g
, FILE *fp
)
35 for (i
= g
->g_ndfas
; --i
>= 0; d
++)
36 fprintf(fp
, "#define %s %d\n", d
->d_name
, d
->d_type
);
40 printarcs(int i
, dfa
*d
, FILE *fp
)
47 for (j
= 0; j
< d
->d_nstates
; j
++, s
++) {
48 fprintf(fp
, "static arc arcs_%d_%d[%d] = {\n",
51 for (k
= 0; k
< s
->s_narcs
; k
++, a
++)
52 fprintf(fp
, "\t{%d, %d},\n", a
->a_lbl
, a
->a_arrow
);
58 printstates(grammar
*g
, FILE *fp
)
65 for (i
= 0; i
< g
->g_ndfas
; i
++, d
++) {
67 fprintf(fp
, "static state states_%d[%d] = {\n",
70 for (j
= 0; j
< d
->d_nstates
; j
++, s
++)
71 fprintf(fp
, "\t{%d, arcs_%d_%d},\n",
78 printdfas(grammar
*g
, FILE *fp
)
84 fprintf(fp
, "static dfa dfas[%d] = {\n", g
->g_ndfas
);
86 for (i
= 0; i
< g
->g_ndfas
; i
++, d
++) {
87 fprintf(fp
, "\t{%d, \"%s\", %d, %d, states_%d,\n",
88 d
->d_type
, d
->d_name
, d
->d_initial
, d
->d_nstates
, i
);
90 for (j
= 0; j
< NBYTES(g
->g_ll
.ll_nlabels
); j
++)
91 fprintf(fp
, "\\%03o", d
->d_first
[j
] & 0xff);
92 fprintf(fp
, "\"},\n");
98 printlabels(grammar
*g
, FILE *fp
)
103 fprintf(fp
, "static label labels[%d] = {\n", g
->g_ll
.ll_nlabels
);
104 l
= g
->g_ll
.ll_label
;
105 for (i
= g
->g_ll
.ll_nlabels
; --i
>= 0; l
++) {
106 if (l
->lb_str
== NULL
)
107 fprintf(fp
, "\t{%d, 0},\n", l
->lb_type
);
109 fprintf(fp
, "\t{%d, \"%s\"},\n",
110 l
->lb_type
, l
->lb_str
);