home *** CD-ROM | disk | FTP | other *** search
-
- module symbol_table_initialization;
-
- {$I global.inc} { include global constants & types }
-
- var
- key: external array
- [1.. nkw] of alfa;
- ksy: external array
- [1.. nkw] of symbol;
- sps: external array
- [char] of symbol; {special symbols}
-
- t, a, b, sx, c1, c2: external integer; {identifier table}
- tab: external array
- [0.. tmax] of {identifier table}
- packed record
- name: alfa;
- link: index;
- obj: object;
- typ: types;
- ref: index;
- normal: boolean;
- lev: 0.. lmax;
- adr: integer;
- end;
-
- procedure enterstandardids(x0: alfa; x1: object; x2: types; x3: integer);
-
- begin
- t := t + 1;
- with tab[t] do
- begin
- name := x0;
- link := t - 1;
- obj := x1;
- typ := x2;
- ref := 0;
- normal := true;
- lev := 0;
- adr := x3
- end
- end {enter};
-
-
- procedure init_reserved_words;
-
- begin
- key[1] := 'and ';
- key[2] := 'array ';
- key[3] := 'begin ';
- key[4] := 'cobegin ';
- key[5] := 'coend ';
- key[6] := 'const ';
- key[7] := 'div ';
- key[8] := 'do ';
- key[9] := 'else ';
- key[10] := 'end ';
- key[11] := 'for ';
- key[12] := 'function ';
- key[13] := 'if ';
- key[14] := 'mod ';
- key[15] := 'not ';
- key[16] := 'of ';
- key[17] := 'or ';
- key[18] := 'procedure ';
- key[19] := 'program ';
- key[20] := 'repeat ';
- key[21] := 'then ';
- key[22] := 'to ';
- key[23] := 'type ';
- key[24] := 'until ';
- key[25] := 'var ';
- key[26] := 'while ';
- ksy[1] := andsy;
- ksy[2] := arraysy;
- ksy[3] := beginsy;
- ksy[4] := beginsy;
- ksy[5] := endsy;
- ksy[6] := constsy;
- ksy[7] := idiv;
- ksy[8] := dosy;
- ksy[9] := elsesy;
- ksy[10] := endsy;
- ksy[11] := forsy;
- ksy[12] := functionsy;
- ksy[13] := ifsy;
- ksy[14] := imod;
- ksy[15] := notsy;
- ksy[16] := ofsy;
- ksy[17] := orsy;
- ksy[18] := proceduresy;
- ksy[19] := programsy;
- ksy[20] := repeatsy;
- ksy[21] := thensy;
- ksy[22] := tosy;
- ksy[23] := typesy;
- ksy[24] := untilsy;
- ksy[25] := varsy;
- ksy[26] := whilesy;
- sps['+'] := plus;
- sps['-'] := minus;
- sps['('] := lparent;
- sps[')'] := rparent;
- sps['='] := eql;
- sps[','] := comma;
- sps['[']:=lbrack;
- sps[']']:=rbrack;
- sps['#'] := neq;
- sps['&'] := andsy;
- sps[';'] := semicolon;
- sps['*'] := times;
- end;
-
- procedure init_predefined_identifiers;
-
- begin
- enterstandardids(' ',variable, notyp, 0); {sentinel}
- enterstandardids('false ',konstant, bools, 0);
- enterstandardids('true ',konstant, bools, 1);
- enterstandardids('char ',type1, chars, 1);
- enterstandardids('boolean ',type1, bools, 1);
- enterstandardids('integer ',type1, ints, 1);
- enterstandardids('semaphore ',type1, ints, 1);
- enterstandardids('eof ',funktion, bools, 17);
- enterstandardids('eoln ',funktion, bools, 18);
- enterstandardids('read ',prozedure, notyp, 1);
- enterstandardids('readln ',prozedure, notyp, 2);
- enterstandardids('write ',prozedure, notyp, 3);
- enterstandardids('writeln ',prozedure, notyp, 4);
- enterstandardids('wait ',prozedure, notyp, 5);
- enterstandardids('signal ',prozedure, notyp, 6);
- enterstandardids(' ',prozedure, notyp, 0);
- end;
-
- modend.
-