17.05.2015 Views

Pascal News

Pascal News

Pascal News

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

2465<br />

2466<br />

2467<br />

2468<br />

2469<br />

2470<br />

2~71<br />

2472<br />

2~73<br />

2474<br />

2475<br />

2476<br />

2477<br />

2478<br />

2479<br />

2480<br />

2481<br />

2482<br />

2483<br />

2484<br />

2485<br />

2486<br />

2487<br />

2488<br />

2489<br />

2490<br />

2491<br />

2492<br />

2493<br />

2494<br />

2495<br />

2496<br />

2497<br />

2498<br />

2499<br />

2500<br />

2501<br />

2502<br />

2503<br />

2504<br />

2505<br />

2506<br />

2507<br />

2508<br />

2509<br />

2510<br />

2511<br />

2512<br />

2513<br />

2514<br />

2515<br />

2516<br />

2517<br />

2518<br />

2519<br />

2520<br />

feof:<br />

aallfip(fsys ,1psr ,EFL);<br />

feo1n:<br />

oallflp( fs:,s ,1par ,ELK l;<br />

fabs:<br />

begin asp: =desub( asp);<br />

if asp=intptr then gensp(ABIl else<br />

if asp=realptr then gensp(ABR) else<br />

if asp=longptr then gensp(ABL) else asperr(+0182);<br />

end;<br />

fsqr:<br />

begin asp:=desub(asp);<br />

if asp:intptr then<br />

begin gen1(op dup,intsize}; genO(op_mul) end else<br />

if asp=rea1ptr then<br />

begin gen1(op dup,realsize);<br />

genO (op flnu); f1 tUBed: =true<br />

end -<br />

else if asp=longptr then<br />

begin gen Hop dup ,1ongsize); genO (op_dmu) end<br />

else asperr( +0 183);<br />

edd;<br />

ford:<br />

begin if not nicescalar(desub(asp)) then asperr(+01811);<br />

asp: =intptr<br />

end;<br />

fchr:<br />

checkbnds( charptr);<br />

fpred ,fsuco:<br />

begin asp:=desub(asp); gen1(op_1oc,ll;<br />

if lkey=fpred then genO(op_sub) else genO(op_add);<br />

if nicesoa1ar( asp) then genrck( asp) else asperr(+0185)<br />

end;<br />

fodd:<br />

begin gen1(op_loc,l); genHop_and,intsize); asp:=boo1ptr end;<br />

ftr-unc:<br />

begin if asprea1ptr then asperr(+0186); opconvert(ri) end;<br />

fround:<br />

begin if asprea1ptr then asperr(+0187);<br />

gensp(RND); asp:=intptr<br />

end;<br />

fsin:<br />

gensp(SIN) ;<br />

fcos:<br />

gensp( COS);<br />

fexp:<br />

gensp(EXPX) ;<br />

fsqrt:<br />

gensp(SQT) ;<br />

fln:<br />

gensp(LOG) :<br />

fare tan :<br />

gensp(ATN);<br />

end;<br />

end;<br />

if 1par then nextif(rparent,+0188);<br />

2521<br />

2523<br />

2525<br />

2526<br />

2527<br />

2528<br />

2529<br />

2530<br />

2531<br />

2532<br />

2533<br />

2534<br />

2535<br />

2536<br />

2537<br />

2538<br />

2539<br />

2540<br />

2541<br />

2542<br />

2543<br />

251111<br />

25115<br />

25116<br />

2547<br />

2548<br />

2549<br />

2550<br />

2552<br />

2553<br />

2554<br />

2555<br />

2556<br />

2557<br />

2558<br />

2559<br />

2560<br />

2561<br />

2562<br />

2564<br />

2565<br />

2566<br />

2567<br />

2568<br />

2569<br />

2570<br />

2571<br />

2572<br />

2573<br />

2574<br />

2575<br />

2576<br />

end end;<br />

{== = = = == = = = == = = = = = == = = = == = == = = = === = = == == = = == === = = == = = = = = = = ==== = === = = }<br />

procedure convert( fsp:sp; 11 :integer);<br />

{Convert tries to make the operands of some operator of the same type.<br />

The operand types are given by fsp and a.asp. The resulting type<br />

is put in a.asp.<br />

11 gives the 1ino of the first instruction of the right operand.<br />

var 12:integer;<br />

ts :twostruct;<br />

begin with a do begin asp: =desub( asp);<br />

ts: =compat( fsp,asp);<br />

case ts of<br />

eq,subeq:<br />

,<br />

rl ,Ii ,ri:<br />

opconvert( compat( asp,fsp)); ri->iretc. }<br />

lr,il,ir:<br />

begin 12:=lino; opconvert(ts); exchange(11,12) end;<br />

se:<br />

expandemptyset( fsp);<br />

es:<br />

begin 12: =lino; expandemptyset( asp); exchange( 11,12) end;<br />

noteq:<br />

asperr(+0189);<br />

end;<br />

if asp=rea1ptr then f1 tused: =true<br />

end end;<br />

procedure buildset( fsys :sos);<br />

{This is a bad construct in pascal. Two objections:<br />

- expr .. expr very difficult to implement on most machines<br />

- this construct makes it hard to implement sets of different size<br />

const<br />

type<br />

var<br />

ncsw = 16; {tunabl"e}<br />

wordset = set of O .. wbml;<br />

i,j ,vall, val2,ncst ,11,12, sz:integer;<br />

cst 1, cst2, cst 12, varpart :boolean;<br />

cstpart:array[l .. ncsw] of wordset;<br />

lsp:sp;<br />

procedure genwordsetCs:wordset);<br />

{level 2: « buildset}<br />

var b,i,w:integer;<br />

begin<br />

if s= [) then w: =0 else<br />

if s=[wbm1) then w:=-t15m1-1 else<br />

begin w:=-1; b:=t14;<br />

for i: =wbm 1-1 downto 0 do<br />

begin if i in s then w:=w+b; b:=b div 2 end;<br />

if wbm1 in s then w:=w-t15m1 else w:=w+1<br />

end;<br />

gen Hop 10c ,w)<br />

end; -<br />

......<br />

""<br />

00<br />

I-'

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!