DataMuseum.dk

Presents historical artifacts from the history of:

DANOSI

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about DANOSI

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - download

⟦f5bd07b05⟧ TextFile

    Length: 10783 (0x2a1f)
    Types: TextFile
    Names: »EBOBS.PAS«

Derivation

└─⟦7d3116ab8⟧ Bits:30010531 BOBS Sourcer RTP25,RTP11,RTP86,RTP ASN1 grammatikken DVBS1.SW2114.src.2.6-9 BB920506
    └─⟦this⟧ »SRC\EBOBS.PAS« 

TextFile

; editfil for bobsnew over i tbobs\r
\r
\r
; f|lgende er {ndret i forhold til den oprindelige tekst:\r
; - bobs lever af allokeringsr{kkef|lgen af pointerobjekter, dvs.\r
;   generel dispose kan ikke bruges!\r
; - inputgrammatikkens produktions-r{kkef|lge bevares\r
; - option 99 er tilf|jet til styring af listning af input\r
; - kald af procedure dump1 er flyttet til de relevante steder\r
; - beregning af const13 = cost2 div (setmax+1) og ikke som i manualen\r
;   hvor 59 indg}r uden forklaring og med manglende parentes\r
; - fjernet variable der ikke bruges ( dummyyp, tegn1, konstp )\r
; - {ndret indl{sningsproceduren s} et tegn f|rst skrives ved l{sning\r
;   af det efterf|lgende, dette giver p{nere output hvis man ikke\r
;   selv angiver metasymboler.\r
; - consterror skriver ogs} den aktuelle v{rdi af konstanten ud\r
; - strammet formaterne for outgrammar og testudskrifter op\r
; - hvis "iterer" skal have mening m} "matrix" v{re VAR-parameter\r
; - test p} const6 i procedure remember\r
; - {ndret test p} const6 til const14 i procedure findreduce\r
; - f|rste tal p} filen tables angiver antal efterf|lgende konstanter \r
;   der kan/skal skippes af parsin/out\r
; - errortable forsynes med en liste af produktionsnumre for hvert fejlnr,\r
;   produktionsnumrene siger "lidt" om hvorfra de p}g{ldende fejl kan v{re\r
;   opdaget, dvs en hj{lp n}r man skal finde p} tekster til fejlene.\r
; - alfalength er sat op til 18 for at tillade terminaler af l{ngde 18\r
; - specialversion der skelner mellem sm} og store bogstaver, dette opn}s\r
;   ved at vende betingelsen s} andet edit kald udf|res\r
; - sat const10 op fra 700 til 800\r
\r
(\r
tbobs=edit bobsnew\r
tbobs=edit tbobs\r
end\r
)\r
\r
;i/\r
;(*$t- *)\r
;/,\r
\r
l./program bobs/,r/*//,r/*//,\r
  r/parsin/parsin = 'bobsparsin'/,\r
  r/parsout/parsout = 'bobsparsout'/,\r
  r/tables/tables = 'bobstables'/,\r
\r
l./const1=100/,d./const19=30/,d,i/\r
listoption = 99;    (* option(99) = list.yes or no *)\r
const1  =  350;     (* maximum number of productions *)\r
const2  =  286;     (* maximum number of terminal and nonterminal symbols *)\r
const3  =   50;     (* maximum size of array fcq *)\r
const4  = 6500;     (* maximum size of array rhs *)\r
const5  =   63;     (* maximum number of elements in a basis set of an lr(0) table *)\r
const6  = 6000;     (* maximum value of 'frekvens' *)\r
const7  = 1500;     (* maximum size of final parse tables *)\r
const8  =  100;     (* maximum number of lookahead elements of a nonterminal *)\r
const9  =  800;     (* maximum size of array stack in procedure lr0 *)\r
const10 =  800;     (* maximum number of parse tables *)\r
const11 =  130;     (* maximum number of nonterminals *)\r
const12 =  300;     (* maximum number of terminals *)\r
const13 =    1;     (* = const2 div (setmax + 1) *)\r
const14 =   15;     (* maximum size of a parse table *)\r
const16 = 1200;     (* maximum size of array ll in procedure lalrlookahead\r
  notice: const16 > const2 *)\r
const18 =   99;     (* maximum number of options *)\r
const19 = 4500;     (* max size of array labelbuf - sum of length\r
     of all production labels  ( options[34])  *)\r
/,\r
\r
l./setmax=71/,r/71/143/,\r
 r/(*72-1*)//,\r
\r
l./alfalength=10/, r/10/18/,\r
; !!!!!!!!!!!! {ndring af alfalength kr{ver ogs} {ndring af alf3 !!!!!!\r
l./alf3=/, r/31/55/,\r
\r
l./blank=' '/, l1, i/\r
version = 'bobs8000   version 1988.02.16';\r
/\r
\r
l./ rtype=record r: array/, i/\r
alfa = packed array [1..alfalength] of char;\r
/,\r
\r
l./entrytyp=packed/,l1, r/ dummyyp,//,\r
l./tegn1:/,d,\r
\r
\r
l./konfigt=packed record/,\r
l./const2;/, r/;/; xprodnr, /,\r
\r
\r
l./help:array[0..const2/,\r
i/\r
firstleftside, lastleftside : 0..const2; (* used to link 'help' in input sequence *)\r
/,\r
l./prodindex:/, r/;/; (* also used as 0..const2 during init *)/,\r
\r
\r
l./tilstand:array/, r/packed//,\r
\r
l./options:/, l1, i/\r
listing : boolean;   (* listing = options(listoption), default=no *)\r
oldch : integer;     (* 0 after readln, else ord(ch) *)\r
/,\r
\r
\r
\r
\r
l./procedure msg(m/, \r
l./message(/, r/mes/(* mes/, r/);/); *)/,\r
\r
l./procedure consterror(s1,s2/,\r
l./lf,lf,'=/,d, i/\r
write(lf,lf,' error in ', s1, s2, 'too small (= ',cc:1, ')' );\r
/,\r
\r
l./procedure inputerror(nr/,\r
l./1: write(/,d, i/\r
1: write('  *** end of file encountered. ');\r
/,\r
 \r
l./procedure fresh;/,\r
l./while ((ch<>metasymbol[4]) andtestch(c[i],ch)) do/,\r
r/andtestch(/and testch(/,\r
l./if false then 11:/, r/false/i<>i/,\r
\r
l./procedure terminal;/,\r
l./if false then 77:/, r/if/while/, r/then/do/,\r
\r
; side 13-14\r
l./procedure goalsymb;/,\r
l./begin/, i/\r
const\r
length_of_goalsymbol = 10;\r
/,\r
l./toalfalength/, r/alfalength/length_of_goalsymbol/,\r
l./pack(/, i/\r
for i := length_of_goalsymbol + 1 to alfalength do buffer [ i ] := ' ';\r
/,\r
\r
\r
l./procedure inch;/,\r
l./if eoln(input)/, i/\r
if listing then\r
if oldch = 0 then write(lf,' ')\r
else write(chr(oldch));\r
/,\r
l./begin writeln/, d, i/\r
begin\r
/, l./readln/, l1, i/\r
oldch := 0;\r
/,\r
\r
l./read(ch)/, r/write(ch);/oldch := ord(ch);\r
  if ch in ['a'..'z'] then ch := chr(ord(ch)-ord('a') + ord('A'));\r
/,\r
\r
; side 16\r
l./procedure laes(vara/, r/var//,\r
l./ifi<12/, r/</<=/, g/12/alfalength/,\r
\r
; side 17\r
l./procedure nextword;/,\r
l./<=30/, g3/30/alf3-1/,\r
l./pack(buffer,11/, r/11/alfalength+1/,\r
l./pack(buffer,21/, r/21/2*alfalength+1/,\r
\r
\r
; side 20\r
l./procedure init;/,\r
l./combegin:=0/, i/\r
listing := true; oldch := 0;\r
/,\r
\r
l./end;/, i/\r
\r
antalprod := -1;\r
\r
for i:=0 to const2 do\r
with help[i] do\r
begin\r
afledt := true;\r
overgang := true;\r
prodindex := const1;\r
rightp := rhsnil;   (* important!? *)\r
status := finish;\r
term := true;\r
end;\r
\r
firstleftside := 0;\r
lastleftside := 0;\r
\r
/,\r
\r
\r
\r
\r
l./begin init;/,\r
l./write(lf,lf,''/,r/''/' '/,\r
l./(*SLUT PAA INDLAES/, i/\r
listing := options[listoption];\r
/,\r
\r
l./metavar:='METASYMBOL'/, r/OL'/OLS'/,\r
\r
l./write('M1==/, d, i/\r
for i := 1 to 4 do\r
write(' m', i:1, '=', metasymbol[i]);\r
write(lf,lf,' ');\r
/,\r
\r
l./point:=top;/,\r
i/\r
for point := 0 to const4 do\r
with rhs[point] do\r
begin\r
symbol := const2;\r
parserp:= nil;\r
link   := const4;\r
basisl := const5;\r
basis  := true;\r
first  := const19;\r
length := 100;\r
end;\r
/,\r
\r
l./help[count].rightp =rhsnil then/, d, i/\r
if help[count].rightp = rhsnil then\r
begin\r
help[count].rightp := point;\r
(* chain the left sides in input order using 'prodindex' *)\r
if firstleftside = 0 then\r
firstleftside := count\r
else\r
help[lastleftside].prodindex := count;\r
lastleftside := count;\r
help[lastleftside].prodindex := 0;\r
end;\r
/,\r
\r
\r
l./procedure dump2;/,\r
l./write(' SY/,d,i/\r
write(' ' : 8, 'symbol' : 8, 'link' : 8, 'basisl' : 8, 'parserp' : 8);\r
/,\r
\r
\r
l./procedure initprod/,\r
l./for i:=nont/, d1, i/\r
i := nontstart;\r
repeat  (* changed at rc 79.11.12 *)\r
/,\r
l./end;end;/, d, i/\r
if i = nontstart then i := firstleftside\r
else i := help[i].prodindex;\r
until i = 0;\r
/,\r
\r
\r
l./procedure outgrammar;/,\r
l./k,j,i,/, r/i/i, oldi/,\r
l./prodno:=0/, d./while p<>rhsnil/, i/\r
writeln; writeln;\r
\r
oldi := 0; (* used to indicate new leftside *)\r
\r
for prodno := 1 to antalprod do\r
with prod[prodno] do\r
begin\r
\r
i := leftside;\r
p := start;\r
\r
if i <> oldi then writeln; (* new leftside *)\r
writeln; write(prodno:5, '   ');\r
\r
if i <> oldi then\r
begin\r
t := 0; nontwrit(i,t);\r
write(' ::= '); t := t + 3; \r
oldi := i;\r
end\r
else\r
write(' ' : t, '! ');\r
/,\r
\r
l./begin p1:=p/, r/begin//,\r
\r
l./for l:=1 to t+7/, d1, i/\r
write(' ' : t + 5 (* prodno *) + 3 (* leading spaces *) + 2 (* indention *) );\r
tt := t;\r
/,\r
l./write(' :/, r/ :/:/,\r
\r
\r
l./p:=rhs[p].link;/, d./end;end;/,\r
\r
\r
\r
l./procedure erasure/,\r
l./lambda,/, r/,rest//,\r
\r
\r
\r
l./procedure matrixout(s:bitmatrix);/,\r
l./if ((j mod 59/, g/59/(setmax+1)/,\r
\r
l./procedure writeheadsandtails;/,\r
l./label 10,20;/, l1, i/\r
const textlength = 7; (* number of printed chars from internrep *)\r
/,\r
l./for i:=1 to 45/, l1, d, i/\r
write('symbol' : 9, '!' : (35-9), 'heads' : 9, '!' : (4*(1+textlength)+2 - 9),\r
'tails':9);\r
/,\r
l-5, l./for i:=1 to 45 do/,\r
  g15/to 45/to 4*(1+textlength) + 1/,\r
 g-16/'I'/'!'/,\r
l./for tael:=tael+1 to 34/, r/'I'/'!'/,\r
l./mod 59/, g/59/(setmax+1)/,\r
l./if nomoreheads/, r/' ',' '/' ', ' ' : textlength/,\r
l1, r/])/] : textlength)/,\r
l./,'I');/, r/'I'/'!'/,\r
l./mod 59/, g/59/(setmax+1)/,\r
l./if nomoretails/, r/' ',' '/' ', ' ' : textlength/,\r
l1, r/])/] : textlength)/,\r
\r
\r
l./procedure iterer(matrix:bitmatrix/,\r
  r/matrix:/var matrix:/,\r
\r
\r
l./procedure idogfjern( b:boolean/,\r
l./function identprod (var/,\r
l./write(' DU/,\r
l1, d./dump5;/,\r
l./boo3:=boo3 orboo4;/,r/orbo/or bo/,\r
l./if (band (fjboo=false)) then/, r/band/b and/,\r
l./write('DU/, l1, d./dump5;/,\r
\r
\r
l./procedure allocp(var p/,\r
l./if p=nil then/,d,\r
\r
\r
l./procedure lr0;/,\r
l./kopi:boolean/, i/\r
errorprodno : 0 .. const1;\r
/,\r
\r
l./procedure niceparser/,\r
l./konstp/, r/konstp,//,\r
\r
\r
\r
l./procedure stackellerej;/,\r
l./begingoalprod:=0/,\r
l./prodnr:=goalprod;/, l1, i/\r
xprodnr := prodnr;\r
/,\r
l./prodnr:= lqbep^.prodnr;/, l1, i/\r
xprodnr := prodnr;\r
/,\r
l./(****** TILHQRENDE CLOSURE/,\r
l./closp:=classtop;/, l1, i/\r
errorprodno := closp^.prodnr;\r
/,\r
l./prodnr:=prodno/, l1, i/\r
xprodnr := errorprodno;\r
/,\r
\r
\r
\r
l./procedure remember(p:pointer);/,\r
l./if false then/ ,r/false/i<>i/,\r
l./5:fcq/, d, i/\r
5: with fcq[i] do\r
begin\r
if frekvens = const6 then\r
consterror('remember','const6  ',const6);\r
frekvens := frekvens + 1;\r
end\r
/,\r
\r
\r
\r
l./procedure lookb;/,\r
l./if options[17] then/,\r
r/*)/*) (* nb: newstart is undefined *)/,\r
\r
\r
l./procedure lookahead;/,\r
l./hoejres/, r/,hoejres//,\r
\r
\r
l./procedure adeqwrite ( x/,\r
l./3:/,\r
l./for j:=1 to termant do/,\r
l./write(''/, r/''/' '/,\r
\r
\r
l./function findreduce(pnr/,\r
l./(*START AF SUBRUTINE ADEQUAD *)/,\r
l./const6/, r/6 /14/, r/6/14/,\r
\r
\r
\r
l./procedure copy(var ch:/,\r
l./begin ch:=parsin^;/, d, i/\r
begin\r
if eoln(parsin) then ch := ' ' else ch := parsin^;\r
/,\r
\r
\r
l./procedure emitconstants/,\r
l./writeln(tables,nontslut)/, i/\r
writeln(tables, 11); (* number of constants *)\r
/,\r
\r
\r
l./procedure compress;/,\r
l./begin(*COMPRESS*)/,\r
l./end;(*COMPRESS*)/, i/\r
if options[17] then dump1; (* tilstand *)\r
/,\r
\r
\r
\r
\r
l./procedure errortable;/,\r
l./lqbep:=newstart; write(lf,lf,no,' : ');/, r/':'/' :',blank/,\r
;l./if ((i5 mod 5/, r/blank/blank,blank/,\r
l./for j:= i+1/, i/\r
writeln(lf,' nr=', oldstart^.xprodnr :1);\r
/,\r
l./if i5=ctmax/,\r
l./end;/, i/\r
writeln(' nr=', oldstart^.xprodnr :1);\r
/,\r
\r
\r
\r
l./ARCH 1977/, d1, i/\r
write(lf, version, lf);\r
/,\r
\r
f\r
\r
\r
\r
\r
; editeringer til specialversion der skelner mellem sm} og store bogstaver\r
; og bruger STRINGV istedet for STRING\r
; 86 09 24\r
l./(*INITIALISERING*)/,\r
l./'STRING/, r/G /GV/,\r
\r
l./unused;/,\r
; page 15-16\r
l./procedure inch;/,\r
l./ifchin/, d,\r
\r
; page 20\r
l./procedure init;varc:char/,\r
l./'A/, l1, i/\r
for c:= 'a' to 'z' do chgroup[ c ]:= alfanum;\r
/,\r
\r
\r
f\r