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.

561<br />

562<br />

563<br />

564<br />

565<br />

566<br />

567<br />

568<br />

569<br />

570<br />

571<br />

572<br />

573<br />

574<br />

575<br />

577<br />

578<br />

579<br />

580<br />

581<br />

582<br />

584<br />

585<br />

586<br />

587<br />

588<br />

589<br />

590<br />

592<br />

593<br />

594<br />

595<br />

596<br />

597<br />

598<br />

599<br />

600<br />

601<br />

602<br />

603<br />

604<br />

605<br />

606<br />

607<br />

608<br />

609<br />

610<br />

611<br />

613<br />

614<br />

615<br />

616<br />

if lip=nil then top' .fname:=fip else<br />

begin<br />

repeat lip 1: =lip;<br />

if lip' .name>nam then<br />

begin lip:=l1p' .llink; lleft :=true end<br />

else<br />

begin if lip' .name=nam then again:=true; {name conflict)<br />

lip :=lip' .rlink; lleft: =false;<br />

end;<br />

until l1p=nil;<br />

if Heft then lip1' .llink:=fip else lip1' .rlink:=fip<br />

end:;<br />

fip' .1link:=nll; fip' .rlink:=n11;<br />

if again tben err id (+02, nam) ;<br />

end;<br />

procedure initpos( var ~ p:posi tion);<br />

begin p.lv:=level; p.ad:=O;<br />

lifdef SEGMENTS<br />

p.sg:=O<br />

lendif<br />

end;<br />

procedure inita(fsp:sp; fad:integer);<br />

begin wi tb a do begin<br />

asp:=fsp; packbit:=false; ak:=fixed; pos.ad:=fad; pos.lv:=level;<br />

IUdef SEGMENTS<br />

pos.sg:=O;<br />

'endif<br />

end_ end;<br />

function newip(kl:idclass; n:alpba; idt:sp; nxt:ip):ip;<br />

var p:ip; f:iflagset;<br />

begin f:=[l;<br />

case kl of<br />

types,carrbnd~ {similar structure)<br />

new(p,types);<br />

konst:<br />

beginnew(p,konst);~ p' .value:=O end;<br />

vars:<br />

begin new(p,vars); r :=[used ,assigned]; initpos(p ..... vpos) end;<br />

field:<br />

begin new(p,field); p' .foffset:=O end;<br />

proc,func: {same structurel<br />

begin new(p,proc ,actual); p' .pfkind: =actual;<br />

initpos( p' .pfpos); p' .pfno: =0; p' .parhead: =n11; p' .headlc: =0<br />

end<br />

end;<br />

p' .name:=n; p' .klass:=kl; p' .idtype:=idt; p' .next;=nxt;<br />

p' .1link:=n11; p' .rlink:=nll; p' .iflag:=f; newip:=p<br />

end;<br />

function newsp(sf:structform; sz:integer):sp;<br />

var p:sp; sflag:sflagset;<br />

begin sflag:=[l;<br />

case_sf of<br />

617<br />

618<br />

619<br />

620<br />

621<br />

622<br />

623<br />

624<br />

625<br />

626<br />

627<br />

628<br />

.629<br />

630<br />

631<br />

632<br />

633<br />

634<br />

635<br />

636<br />

637<br />

639<br />

640<br />

641<br />

642<br />

643<br />

644<br />

645<br />

646<br />

647<br />

648<br />

649<br />

650<br />

651<br />

652<br />

653<br />

654<br />

655<br />

656<br />

657<br />

658<br />

659<br />

660<br />

661<br />

662<br />

663<br />

664<br />

665<br />

666<br />

667<br />

668<br />

669<br />

670<br />

671<br />

672<br />

scalar:<br />

begin new(p,scalar); p .... scalno:=O; p'" .fcanst:=nil end;<br />

subrange:<br />

new( p,subrange);<br />

pointer:<br />

begin new(p,pointer); p·.eltype:=n11 end;<br />

power:<br />

new( P ,power) ;<br />

files:<br />

begin new(p,files); sflag:=[withfilel end;<br />

arrays,earray: {same structurel<br />

new(p,arrays);<br />

records:<br />

new(p,records) ;<br />

variant:<br />

new(p,variant):<br />

tag:<br />

new(p,tag);<br />

~d; ...<br />

P .form:=sf; p .size:=sz; p'" .sflag:=sflag; newsp:=p;<br />

end;<br />

procedure init 1;<br />

var c :char;<br />

begin<br />

!initialize the first name space)<br />

new(top,blck); top·.occur:=blck; top·.nl1nk:=n11; top·.fname:=nll;<br />

level :=0;<br />

{reserved words}<br />

rw[ Ol:='if '; rw[ 1]: =' do 1 ; rw[ 2l:='of ';<br />

rw[ 3l:='to '; rw[ 4 J: =' in I; rw[ 5l:='or ';<br />

rw[ 6]:='end '; rw[ 7l: = ' for ' • rw[ 8l:='nil<br />

,.<br />

rw[ 9]: ='var '; rw[10):='div I; rw[ 11]: = 'mod<br />

,.<br />

rw[12]:='set '; rw[13l: ='and '; rw[ 14l: = 'not<br />

,.<br />

rw[15l:='then ,. rw[ 16l: ='else '; rw[17l:='with ';<br />

rw[ 1 B]: =' case I; rw[19l:='type ,. rw[20]: =' goto t;<br />

rw[21]:='file I; rw[22l:='begin '; rw[23l:='until ';<br />

rw[2ijl:='while ,. rw[25]:='array ,. rw[26]:='const I.<br />

rw[27l:='label '; rw[28J:='r€>peat I; rw[29l: = 'record ,.<br />

rw[30l:='downto '; rw[""; _::='packed , rw[32l:='program '~;<br />

rw(33]: ='function'; r'."i. ]:::' procedur ';<br />

{corresponding symbols)<br />

rsy[ Ol:=ifsy; rsy[ 1]:=dosy; rsy[ 2l: =oj"sy;<br />

rsy[ 3l:=tosy; rsy[ ijl:=insy; rsy[ 5l:=orsy;<br />

rsy[ 6l:=endsy; rsy[ 7l:=forsy; rsy[ 8l: =nilcst;<br />

rsy[ 9l:=varsy; rsy[10l:=divsy; rsy[11l: =modsy;<br />

rsy[12l: =setsy; rsy[13l: =andsy; rsy[14l:=notsy;<br />

rsy[ 15l: =thensy; rsy[ 16l: =elsesy; rsy[17l: =withsy;<br />

rsy[ 18l: =casesy; rsy[ 19l: =typesy; rsy[20l: =gotosy;<br />

rsy[21l: =filesy; rsy[22l: =beginsy; rsy[23l: =untilsy;<br />

rsy[2ij l: =whilesy; rsy[25l: =arraysy; rsy[26l: =cOnstsy;<br />

rsy[271: =labelsy; rsy[28l: =repeatsy; rsy[29l: =recordsy;<br />

rsy[30l: =downtosy; rsy[31l: =packedsy'; r sy[ 32l: =progsy;<br />

rsy[33l: =funcsy; rsy[34l: =procsy;<br />

!indices into rw to find reserved words fast)<br />

frw[Ol:= 0; frw[1l:= 0; frw[2l:= 6; frw[3l:=15; frw[4l:=22;<br />

....<br />

CD<br />

00<br />

....<br />

,.<br />

-0<br />

'"<br />

'"

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

Saved successfully!

Ooh no, something went wrong!