Copyright 1972 Bell Telephone Laboratories, Inc.
extern lookup
, symbuf
, namsiz
;
if ((*sp
++ = *s
++)=='\0') --s
;
extern extdef
, eof
, open
, creat
;
extern fout
, fin
, error
, exit
, nerror
, tmpfil
;
if((fin
=open(argv
[1],0))<0) {
error("Can't find %s", argv
[1]);
if((fout
=creat(argv
[2], 017))<0) {
error("Can't create %s", argv
[2]);
extern hshtab
[], hshsiz
, pssiz
, symbuf
[];
extern hshlen
, hshused
, exit
, error
, nwps
;
auto i
, j
, np
[], sp
[], rp
[];
while(*(np
= &hshtab
[i
+4])) {
if (*np
++ != *sp
++) goto no
;
no
: if ((i
=+ pssiz
) >= hshlen
) i
= 0;
error("Symbol table overflow");
extern peeksym
, peekc
, eof
, getchar
, subseq
, error
, line
;
extern csym
[], getstr
, symbuf
, namsiz
, lookup
[], ctab
, cval
;
char symbuf
[], sp
[], ctab
[];
case 126: /* white space */
if (subseq(' ',0,1)) return(80);
if (subseq(c
,0,1)) return(46);
return(subseq('=',63,62));
if (subseq(c
,0,1)) return(45);
return(subseq('=',65,64));
return(subseq('=',34,61));
error("Nonterminated comment");
while(ctab
[c
]==123 | ctab
[c
]==124) {
if (sp
<symbuf
+namsiz
) *sp
++ = c
;
if (csym
[0]==1) { /* keyword */
error("Unknown character");
printf(".data;L%d:.byte ", cval
=isn
++);
while((c
=mapch('"')) >= 0)
printf("0;.even;.text\n");
while((c
=mapch('\'')) >= 0)
error("Long character constant");
error("Nonterminated string");
extern symbol
, block
, csym
[], ctyp
, isn
,
peeksym
, opdope
[], build
, error
, cp
[], cmst
[],
space
, ospace
, cval
, ossiz
, exit
, errflush
, cmsiz
;
auto op
[], opst
[20], pp
[], prst
[20], andflg
, o
,
*op
= 200; /* stack EOF */
if((peeksym
=symbol())==6)
if(csym
[2]==0) /* unseen so far */
if(*csym
==6) /* extern */
*cp
++ = block(5,20,csym
[1],0,*csym
,
csym
[4],csym
[5],csym
[6],csym
[7]);
*cp
++ = block(2,20,csym
[1],0,*csym
,csym
[2]);
*cp
++ = block(1,21,ctyp
,0,cval
);
*cp
++ = block(1,22,17,0,cval
);
error("Expression overflow");
p
= (opdope
[o
]>>9) & 077;
if (p
>ps
| p
==ps
& (opdope
[o
]&0200)!=0) { /* right-assoc */
if(op
>=opst
+20) { /* opstack size */
error("expression overflow");
*cp
++ = 0; /* 0 arg call */
error("Expression syntax");
extern csym
[], symbol
, paraml
[], parame
[];
extern error
, cval
, errflush
, peeksym
, exit
;
while((o
=symbol())==20) { /* name */
if(kw
>=5) { /* type or sort? */
error("%p redeclared", csym
[4]);
error("%p redeclared", &csym
[4]);
csym
[1] =| csym
[1]&0760 | kw
;
while((o
=symbol())==4) { /* [ */
if((o
=symbol())==21) { /* const */
if(kw
==8) { /* parameter */
if(o
==1 & kw
!=8 | o
==7 & kw
==8)
error("Declaration syntax");
hshlen
800; /* 8*hshsiz */
maprel
[] 60,61,64,65,62,63,68,69,66,67;