home *** CD-ROM | disk | FTP | other *** search
- /* skeltab.c ==> table.c
-
- QCAD Systems, Inc. 1990
-
- This generates many of the parser tables when run through lr1p with
- a suitable grammar table file.
- */
-
- #include "decl.h"
-
- #if DEBUG == 1
- /* see the corresponding defines in skeldecl.h, and function 'dump_sym'
- in skeldbug.c */
- char *symtypenames[]= {
- /* 0 */ "RESERVED", "SYMERR", "USER", "INTVAR", "REALVAR", "STRVAR" };
- #endif
-
- {##
- var K, S, COUNT, UD: integer; {parser tables}
- begin
- indent:=0;
-
- write('short statex[]={0');
- for k:=ldim(statex) to udim(statex) do begin
- if k mod 10 = 0 then begin
- writeln;
- write('/* ', k, ' */ ');
- end;
- write(', ', statex[k]);
- end;
- writeln('};');
- writeln;
-
- write('short map[]={0');
- for k:=ldim(map) to udim(map) do begin
- if k mod 10 = 0 then begin
- writeln;
- write('/* ', k, ' */ ');
- end;
- if (map[k] > 0) then
- write(', ', map[k]-1, '+OFFSET')
- else write(', 0');
- end;
- writeln('};');
- writeln;
-
- write('char popno[]={0');
- for k:=ldim(popno) to udim(popno) do begin
- if k mod 10 = 0 then begin
- writeln;
- write('/* ', k, ' */ ');
- end;
- write(', ', popno[k]);
- end;
- writeln('};');
- writeln;
-
- writeln('#if QTREES == 1');
-
- write('short psmx[]={0');
- for k:=ldim(psmx) to udim(psmx) do begin
- if k mod 10 = 0 then begin
- writeln;
- write('/* ', k, ' */');
- end;
- write(', ', psmx[k]);
- end;
- writeln('};');
- writeln;
-
- write('char psmpos[]={');
- for k:=ldim(psmpos) to udim(psmpos) do begin
- if k mod 10 = 0 then begin
- writeln;
- write('/* ', k, ' */');
- end;
- if k > ldim(psmpos) then write(', ');
- write(psmpos[k]);
- end;
- writeln('};');
-
- writeln('#endif /* QTREES */');
- writeln;
-
- write('short toknum[]={');
- for k:=ldim(toknum) to udim(toknum) do begin
- if k mod 10 = 0 then begin
- writeln;
- write('/* ', k, ' */ ');
- end;
- if k > ldim(toknum) then write(', ');
- write(toknum[k]);
- end;
- writeln('};');
- writeln;
-
- write('short tostate[]={');
- for k:=ldim(tostate) to udim(tostate) do begin
- if k mod 10 = 0 then begin
- writeln;
- write('/* ', k, ' */ ');
- end;
- if k > ldim(tostate) then write(', ');
- write(tostate[k]);
- end;
- writeln('};');
- writeln;
-
- write('short stk_state[]={');
- for k:=ldim(stk_state) to udim(stk_state) do begin
- if k mod 10 = 0 then begin
- writeln;
- write('/* ', k, ' */ ');
- end;
- if k > ldim(stk_state) then write(', ');
- write(stk_state[k]);
- end;
- writeln('};');
- writeln;
-
- write('short stk_tostate[]={');
- for k:=ldim(stk_tostate) to udim(stk_tostate) do begin
- if k mod 10 = 0 then begin
- writeln;
- write('/* ', k, ' */ ');
- end;
- if k > ldim(stk_tostate) then write(', ');
- write(stk_tostate[k]);
- end;
- writeln('};');
- writeln;
-
- { These are for printing tokens in parser stack dumps. }
- write('char *tokstring[]={""');
- for k:=1 to all_toks do begin
- if k mod 10 = 0 then begin
- writeln;
- write('/* ', k, ' */ ');
- end;
- write(', ', qstring(tokens[k]));
- end;
- writeln('};');
- writeln;
-
- indent:= 0;
- writeln('#if DEBUG == 1');
- write('short prodx[]={0');
- for k:=ldim(prodx) to udim(prodx) do begin
- if k mod 10 = 0 then begin
- writeln;
- write('/* ', k, ' */ ');
- end;
- write(', ', prodx[k]);
- end;
- writeln('};');
- writeln;
-
- write('short prods[]={0');
- for k:=ldim(prods) to udim(prods) do begin
- if k mod 10 = 0 then begin
- writeln;
- write('/* ', k, ' */ ');
- end;
- write(', ', prods[k]);
- end;
- writeln('};');
- writeln;
-
- write('short insym[]={0');
- for k:=ldim(insym) to udim(insym) do begin
- if k mod 10 = 0 then begin
- writeln;
- write('/* ', k, ' */ ');
- end;
- write(', ', insym[k]);
- end;
- writeln('};');
- writeln;
- indent:= 0;
- writeln('#endif');
-
- write('char trace_nodes[SETSIZE(FLAG_ARRAY_DIM)];');
-
- write('char *flags[]={');
- writeln('"OTHER", "SEMERR", "IDENT", "FIXED",');
- writeln('"FLOAT", "STRNG", "CHAR", "GENL_KIND"');
- count:= 7;
- for k:=ldim(flags) to udim(flags) do begin
- if count mod 10 = 0 then begin
- writeln;
- write('/* ', count, ' */ ');
- end;
- write(', ', qstring(flags[k]));
- count:= count+1;
- end;
- writeln('};');
- writeln;
- end; ##}
-