struct lablist
*makelab();
newlab
->labelt
= 10L * newlab
->labelt
+ ftemp
;
if (newlab
->labelt
> 99999L)
error("in syntax:\n","","");
fprintf(stderr
,"line %d: label beginning %D too long\n%s\n",
begline
,newlab
->labelt
,buffer
);
fprintf(stderr
,"treating line as straight line code\n");
newlab
= newlab
->nxtlab
= makelab(0L);
/* handle labsw- switches and labels */
/* handle if statements */
case 30: counter
++; break;
if (counter
) return(_if1
);
pred
= remtilda(stralloc(&buffer
[p1
],bufptr
- p1
));
p3
= bufptr
+ 1; /* p3 pts. to 1st symbol after ) */
case 45: /* set p1 to pt.to 1st symbol of pred */
case 61: p1
= bufptr
; break; /* p1 pts. to 1st symbol of increment string */
case 62: counter
++; break;
case 63: counter
--; break;
case 70: if (counter
) return(_rwp
);
case 72: exp
= remtilda( stralloc(&buffer
[r1
+1],bufptr
- r1
- 1)); break;
case 73: endlab
= newlab
;
case 74: errlab
= newlab
;
case 75: reflab
= newlab
;
case 76: r1
= bufptr
; break;
/* generate nodes of all types */
case 111: /* st. line code */
stcode
= remtilda(stralloc(&buffer
[p3
],endbuf
- p3
));
case 122: /* uncond. goto */
case 123: /* assigned goto */
faterr("in parsing:\n","assigned goto must have list of labels","");
case 124: /* ass. goto, labels */
case 125: /* computed goto*/
exp
= remtilda( stralloc(&buffer
[r1
+1],bufptr
- r1
- 1));
case 133: /* if() = is a simple statement, so reset flag to 0 */
case 141: /* arith. if */
case 150: /* label assignment */
exp
= remtilda( stralloc(&buffer
[r1
+1],bufptr
- r1
- 1));
inc
= remtilda(stralloc(&buffer
[p1
],endbuf
- p1
));
case 180: /* continue statement */
case 200: /* function or subroutine statement */
case 210: /* block data statement */
case 300: /* return statement */
case 350: /* stop statement */
case 400: /* end statement */
prerw
= remtilda(stralloc(&buffer
[p3
],r1
- p3
+ 1));
postrw
= remtilda(stralloc(&buffer
[r2
],endbuf
- r2
));
if (reflab
|| endlab
|| errlab
) recognize(IOVX
,flag
);
else recognize(STLNVX
,flag
);
recognize(FMTVX
,0); return(ABORT
);
stcode
= remtilda(stralloc(&buffer
[p3
],endbuf
- p3
));
recognize(entry
,0); return(ABORT
);
fprintf(stderr
,"error: symbol '%c' should not occur as %d'th symbol of: \n%s\n",
struct lablist
*makelab(x
)
p
= challoc (sizeof(*p
));
for (j
= linelabs
; i
> 0; i
--)
stralloc(ad
,n
) /* allocate space, copy n chars from address ad, add '0' */
remtilda(s
) /* change ~ to blank */
for (i
= 0; s
[i
] != '\0'; i
++)
if (s
[i
] == '~') s
[i
] = ' ';