LCOV - code coverage report
Current view: top level - libreoffice/workdir/unxlngi6.pro/UnpackedTarball/python3/Parser - printgrammar.c (source / functions) Hit Total Coverage
Test: libreoffice_filtered.info Lines: 0 60 0.0 %
Date: 2012-12-17 Functions: 0 6 0.0 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : 
       2             : /* Print a bunch of C initializers that represent a grammar */
       3             : 
       4             : #define PGEN
       5             : 
       6             : #include "pgenheaders.h"
       7             : #include "grammar.h"
       8             : 
       9             : /* Forward */
      10             : static void printarcs(int, dfa *, FILE *);
      11             : static void printstates(grammar *, FILE *);
      12             : static void printdfas(grammar *, FILE *);
      13             : static void printlabels(grammar *, FILE *);
      14             : 
      15             : void
      16           0 : printgrammar(grammar *g, FILE *fp)
      17             : {
      18           0 :     fprintf(fp, "/* Generated by Parser/pgen */\n\n");
      19           0 :     fprintf(fp, "#include \"pgenheaders.h\"\n");
      20           0 :     fprintf(fp, "#include \"grammar.h\"\n");
      21           0 :     fprintf(fp, "PyAPI_DATA(grammar) _PyParser_Grammar;\n");
      22           0 :     printdfas(g, fp);
      23           0 :     printlabels(g, fp);
      24           0 :     fprintf(fp, "grammar _PyParser_Grammar = {\n");
      25           0 :     fprintf(fp, "    %d,\n", g->g_ndfas);
      26           0 :     fprintf(fp, "    dfas,\n");
      27           0 :     fprintf(fp, "    {%d, labels},\n", g->g_ll.ll_nlabels);
      28           0 :     fprintf(fp, "    %d\n", g->g_start);
      29           0 :     fprintf(fp, "};\n");
      30           0 : }
      31             : 
      32             : void
      33           0 : printnonterminals(grammar *g, FILE *fp)
      34             : {
      35             :     dfa *d;
      36             :     int i;
      37             : 
      38           0 :     fprintf(fp, "/* Generated by Parser/pgen */\n\n");
      39             : 
      40           0 :     d = g->g_dfa;
      41           0 :     for (i = g->g_ndfas; --i >= 0; d++)
      42           0 :         fprintf(fp, "#define %s %d\n", d->d_name, d->d_type);
      43           0 : }
      44             : 
      45             : static void
      46           0 : printarcs(int i, dfa *d, FILE *fp)
      47             : {
      48             :     arc *a;
      49             :     state *s;
      50             :     int j, k;
      51             : 
      52           0 :     s = d->d_state;
      53           0 :     for (j = 0; j < d->d_nstates; j++, s++) {
      54           0 :         fprintf(fp, "static arc arcs_%d_%d[%d] = {\n",
      55             :             i, j, s->s_narcs);
      56           0 :         a = s->s_arc;
      57           0 :         for (k = 0; k < s->s_narcs; k++, a++)
      58           0 :             fprintf(fp, "    {%d, %d},\n", a->a_lbl, a->a_arrow);
      59           0 :         fprintf(fp, "};\n");
      60             :     }
      61           0 : }
      62             : 
      63             : static void
      64           0 : printstates(grammar *g, FILE *fp)
      65             : {
      66             :     state *s;
      67             :     dfa *d;
      68             :     int i, j;
      69             : 
      70           0 :     d = g->g_dfa;
      71           0 :     for (i = 0; i < g->g_ndfas; i++, d++) {
      72           0 :         printarcs(i, d, fp);
      73           0 :         fprintf(fp, "static state states_%d[%d] = {\n",
      74             :             i, d->d_nstates);
      75           0 :         s = d->d_state;
      76           0 :         for (j = 0; j < d->d_nstates; j++, s++)
      77           0 :             fprintf(fp, "    {%d, arcs_%d_%d},\n",
      78             :                 s->s_narcs, i, j);
      79           0 :         fprintf(fp, "};\n");
      80             :     }
      81           0 : }
      82             : 
      83             : static void
      84           0 : printdfas(grammar *g, FILE *fp)
      85             : {
      86             :     dfa *d;
      87             :     int i, j;
      88             : 
      89           0 :     printstates(g, fp);
      90           0 :     fprintf(fp, "static dfa dfas[%d] = {\n", g->g_ndfas);
      91           0 :     d = g->g_dfa;
      92           0 :     for (i = 0; i < g->g_ndfas; i++, d++) {
      93           0 :         fprintf(fp, "    {%d, \"%s\", %d, %d, states_%d,\n",
      94             :             d->d_type, d->d_name, d->d_initial, d->d_nstates, i);
      95           0 :         fprintf(fp, "     \"");
      96           0 :         for (j = 0; j < NBYTES(g->g_ll.ll_nlabels); j++)
      97           0 :             fprintf(fp, "\\%03o", d->d_first[j] & 0xff);
      98           0 :         fprintf(fp, "\"},\n");
      99             :     }
     100           0 :     fprintf(fp, "};\n");
     101           0 : }
     102             : 
     103             : static void
     104           0 : printlabels(grammar *g, FILE *fp)
     105             : {
     106             :     label *l;
     107             :     int i;
     108             : 
     109           0 :     fprintf(fp, "static label labels[%d] = {\n", g->g_ll.ll_nlabels);
     110           0 :     l = g->g_ll.ll_label;
     111           0 :     for (i = g->g_ll.ll_nlabels; --i >= 0; l++) {
     112           0 :         if (l->lb_str == NULL)
     113           0 :             fprintf(fp, "    {%d, 0},\n", l->lb_type);
     114             :         else
     115           0 :             fprintf(fp, "    {%d, \"%s\"},\n",
     116             :                 l->lb_type, l->lb_str);
     117             :     }
     118           0 :     fprintf(fp, "};\n");
     119           0 : }

Generated by: LCOV version 1.10