Pascal News
Pascal News
Pascal News
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-'