Главная  Терминология Хоора 

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 [ 126 ] 127 128 129 130 131 132 133

id a; i := 1; J := norw; repeat fc := {i+j) div 2;

if id < word[k] tiien j := fc-1;

if id > word[lc] tlien i := fc+1 until i > j;

ifi-l > j tlien sym := wsym[k] else sym := ident end else

if cA in [0..9] then

begin [число] fc := 0; num := 0; sjw := ттЬег;)

repeat пит 10*п ш + (prd(ch)-ord(Q)); fc := fc+1; ge?cA

until -1(с/г in [0,. 9]);

if fc > nmax then error (30) end else

if с/г = -.then ---

begin getcii;

itch = =then

beginsym := becomes; getch

end else sym nul; end else

begin syw := ssym[ch]; getch end [getsym] ;

procedure еи(л:: fct; y,z: integer); begin if cx > cxmax then

begin write( PROGRAM TOO LONG); goto 99 end ; with code[cx] do

begin/ ;= x; I y; a := г end ; cx := сл: + 1 end [gen] i

procedure <cs<(sl,s2: symset; n\ inijeger); begin if -i(sym in si) then

begin error(n); si := si + s2; while -i(sym in si) do getsym

end [test] ;

procedme block(lev,tx: integer; fsys: symset);

var dx: integer; {индексразмещения данных] txO: integer; {начальный индекс таблицы] схО: integer; [начальный индекс программы)



procedure enier(k: object); begin [запись объекта в таблицу] tx :~ tx + 1; with table[tx] do begin Tiame :== id; kind := k; case k of

constant: begin if имт > amaxthen

begin error (30); пит .- 0 end ; vol := пит end ;

variable: begin feve/ :== lev; adr ;~ dx; dx := dx+1; end ;

procedure: level := /ev end

end [enter] ;

fmcuoapositionQd: alfa): integer;

var i: integer; begin [поиск имени id в таблице^ tabie[0] .name := id; i :~ tx; I while table[i] .name Ф id do i :=. i-1; \ position := i end {position} ;

procedure constdeclaration; begin if jw = ident then begin g-efejw;

if jw in [eql ,becomes] then begin if j>/?z = becomes tbea error (1); I getsym;

t if jjw = number then

begin enter Q:onstant); getsym

end else wo/- (2) end else error (3) end else error (4) end [constdeclaration] ;

procedure vardeclaration; begin if = ident thea

begin enter (variable); getsym end else error (4) №d [vardeclaration] ;



procedure list code;

таг/: integer; begin

for i :== cxO to cx-l do with code[i] do

writelnQ, mnemonic[f]:5, 1:3, c:5) end {listcode] ;

procedure statement {fsys: symset); лах i,cx\,cx2: integer; procedure expression{fsys: symset); var addop: symbol; procedure term{fsys: symset); var mulop: symbol; procedure/ac/c>/ (>i: symset);

var /: integer; begin test{facbegsys,fsys, 24); while sym in facbegsys do begin

if sym - ident then begin / := positioned);

if / = 0 then error (11) else with table[i\ do case kind of constant: gen{lit, 0, va/); variable: gen{lod, lev-level, adr); procedure: error (21) end ; getsym end else

if sym number then begin if и 1 > <7 2flxthen

begin e/ro/- (30); num := 0

end {

gen{lit, 0, num); getsym end else

ifsym = /p /then

begin expression(lrparen]+fsys);

if s>m = rparen then getsym ejse erW (22) end ;

test {fsys, [Iparen], 23)

end [factor] ;




1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 [ 126 ] 127 128 129 130 131 132 133