home *** CD-ROM | disk | FTP | other *** search
/ The Education Master 1994 (4th Edition) / EDUCATIONS_MASTER_4TH_EDITION.bin / files / progmisc / qparser2 / cskels / skeltab.c < prev    next >
Encoding:
C/C++ Source or Header  |  1993-11-07  |  4.8 KB  |  200 lines

  1. /*  skeltab.c ==> table.c
  2.  
  3.     QCAD Systems, Inc.  1990
  4.  
  5.     This generates many of the parser tables when run through lr1p with
  6. a suitable grammar table file.
  7.     */
  8.  
  9. #include "decl.h"
  10.  
  11. #if DEBUG == 1
  12. /* see the corresponding defines in skeldecl.h, and function 'dump_sym'
  13.     in skeldbug.c */
  14. char  *symtypenames[]= {
  15.   /* 0 */ "RESERVED", "SYMERR", "USER", "INTVAR", "REALVAR", "STRVAR" };
  16. #endif
  17.  
  18. {##
  19.   var K, S, COUNT, UD: integer;   {parser tables}
  20.   begin
  21.     indent:=0;
  22.  
  23.     write('short statex[]={0');
  24.     for k:=ldim(statex) to udim(statex) do begin
  25.       if k mod 10 = 0 then begin
  26.         writeln;
  27.         write('/* ', k, ' */ ');
  28.         end;
  29.       write(', ', statex[k]);
  30.       end;
  31.     writeln('};');
  32.     writeln;
  33.  
  34.     write('short map[]={0');
  35.     for k:=ldim(map) to udim(map) do begin
  36.       if k mod 10 = 0 then begin
  37.         writeln;
  38.         write('/* ', k, ' */ ');
  39.         end;
  40.       if (map[k] > 0) then
  41.         write(', ', map[k]-1, '+OFFSET')
  42.       else write(', 0');
  43.       end;
  44.     writeln('};');
  45.     writeln;
  46.  
  47.     write('char popno[]={0');
  48.     for k:=ldim(popno) to udim(popno) do begin
  49.       if k mod 10 = 0 then begin
  50.         writeln;
  51.         write('/* ', k, ' */ ');
  52.         end;
  53.       write(', ', popno[k]);
  54.       end;
  55.     writeln('};');
  56.     writeln;
  57.  
  58.     writeln('#if QTREES == 1');
  59.  
  60.     write('short psmx[]={0');
  61.     for k:=ldim(psmx) to udim(psmx) do begin
  62.       if k mod 10 = 0 then begin
  63.         writeln;
  64.         write('/* ', k, ' */');
  65.         end;
  66.       write(', ', psmx[k]);
  67.       end;
  68.     writeln('};');
  69.     writeln;
  70.  
  71.     write('char psmpos[]={');
  72.     for k:=ldim(psmpos) to udim(psmpos) do begin
  73.       if k mod 10 = 0 then begin
  74.         writeln;
  75.         write('/* ', k, ' */');
  76.         end;
  77.       if k > ldim(psmpos) then write(', ');
  78.       write(psmpos[k]);
  79.       end;
  80.     writeln('};');
  81.  
  82.     writeln('#endif /* QTREES */');
  83.     writeln;
  84.  
  85.     write('short toknum[]={');
  86.     for k:=ldim(toknum) to udim(toknum) do begin
  87.       if k mod 10 = 0 then begin
  88.         writeln;
  89.         write('/* ', k, ' */ ');
  90.         end;
  91.       if k > ldim(toknum) then write(', ');
  92.       write(toknum[k]);
  93.       end;
  94.     writeln('};');
  95.     writeln;
  96.  
  97.     write('short tostate[]={');
  98.     for k:=ldim(tostate) to udim(tostate) do begin
  99.       if k mod 10 = 0 then begin
  100.         writeln;
  101.         write('/* ', k, ' */ ');
  102.         end;
  103.       if k > ldim(tostate) then write(', ');
  104.       write(tostate[k]);
  105.       end;
  106.     writeln('};');
  107.     writeln;
  108.  
  109.     write('short stk_state[]={');
  110.     for k:=ldim(stk_state) to udim(stk_state) do begin
  111.       if k mod 10 = 0 then begin
  112.         writeln;
  113.         write('/* ', k, ' */ ');
  114.         end;
  115.       if k > ldim(stk_state) then write(', ');
  116.       write(stk_state[k]);
  117.       end;
  118.     writeln('};');
  119.     writeln;
  120.  
  121.     write('short stk_tostate[]={');
  122.     for k:=ldim(stk_tostate) to udim(stk_tostate) do begin
  123.       if k mod 10 = 0 then begin
  124.         writeln;
  125.         write('/* ', k, ' */ ');
  126.         end;
  127.       if k > ldim(stk_tostate) then write(', ');
  128.       write(stk_tostate[k]);
  129.       end;
  130.     writeln('};');
  131.     writeln;
  132.  
  133.     { These are for printing tokens in parser stack dumps. }
  134.     write('char *tokstring[]={""');
  135.     for k:=1 to all_toks do begin
  136.       if k mod 10 = 0 then begin
  137.         writeln;
  138.         write('/* ', k, ' */ ');
  139.         end;
  140.       write(', ', qstring(tokens[k]));
  141.       end;
  142.     writeln('};');
  143.     writeln;
  144.  
  145.     indent:= 0;
  146.     writeln('#if DEBUG == 1');
  147.     write('short prodx[]={0');
  148.     for k:=ldim(prodx) to udim(prodx) do begin
  149.       if k mod 10 = 0 then begin
  150.         writeln;
  151.         write('/* ', k, ' */ ');
  152.         end;
  153.       write(', ', prodx[k]);
  154.       end;
  155.     writeln('};');
  156.     writeln;
  157.  
  158.     write('short prods[]={0');
  159.     for k:=ldim(prods) to udim(prods) do begin
  160.       if k mod 10 = 0 then begin
  161.         writeln;
  162.         write('/* ', k, ' */ ');
  163.         end;
  164.       write(', ', prods[k]);
  165.       end;
  166.     writeln('};');
  167.     writeln;
  168.  
  169.     write('short insym[]={0');
  170.     for k:=ldim(insym) to udim(insym) do begin
  171.       if k mod 10 = 0 then begin
  172.         writeln;
  173.         write('/* ', k, ' */ ');
  174.         end;
  175.       write(', ', insym[k]);
  176.       end;
  177.     writeln('};');
  178.     writeln;
  179.     indent:= 0;
  180.     writeln('#endif');
  181.  
  182.     write('char trace_nodes[SETSIZE(FLAG_ARRAY_DIM)];');
  183.  
  184.     write('char *flags[]={');
  185.     writeln('"OTHER", "SEMERR", "IDENT", "FIXED",');
  186.     writeln('"FLOAT", "STRNG", "CHAR", "GENL_KIND"');
  187.     count:= 7;
  188.     for k:=ldim(flags) to udim(flags) do begin
  189.       if count mod 10 = 0 then begin
  190.         writeln;
  191.         write('/* ', count, ' */ ');
  192.         end;
  193.       write(', ', qstring(flags[k]));
  194.       count:= count+1;
  195.       end;
  196.     writeln('};');
  197.     writeln;
  198.   end;   ##}
  199.  
  200.