BSD 4_3 development
[unix-history] / usr / lib / lex / nrform
block data
integer cshift, csize, yynlin
common /yyllib/ cshift, csize, yynlin
data yynlin/YYNEWLINE/
end
block data
common /yyldat/ yyfnd, ymorf, yyprev, yybgin, yytop
integer yyfnd, yymorf, yyprev, yybgin, yytop
data yybgin/1/
data yyprev/YYNEWLINE/
data yytop/YYTOPVAL/
end
integer function yylook(dummy)
common /Lverif/ verif
common /Ladvan/ advan
common /Lstoff/ stoff
common /Lsfall/ sfall
common /Latable/ atable
common /Lextra/ extra
common /Lvstop/ vstop
integer verif(Sverif), advan(Sadvan),stoff(Sstoff),match(Smatch)
integer sfall(Ssfall),atable(Satable),extra(Sextra), vstop(Svstop)
integer state, lsp, r
integer ch, n
common /yyldat/ yyfnd, yymorf, yyprev, yybgin, yytop, yylsp, yylsta(YYLMAX)
common /yyxel/ yyleng, yytext
integer yyfnd, yymorf, yylsta, yylsp, yytext, yyprev, yyleng, yytop
integer lexshf, yytext(YYLMAX), yyback, yybgin
integer z, t
if (yymorf .eq. 0)
yyleng = 0
else
yymorf=0
1776
lsp = 1
state = yybgin
if (yyprev .eq. YYNEWLINE)
state = state + 1
for (;;){
r = stoff(state)
if (r .eq. 0){
z = sfall(state)
if (z .eq. 0)
break
if(stoff(z) == 0) break
}
ch = input(dummy)
ich = lexshf(ch)
yyleng = yyleng+1
yytext(yyleng) = ch
1984
if(r .gt. 0){
t = r + ich
if (t<= yytop){
if (verif(t) .eq. state){
if(advan(t) == YYERROR){
call unput(yytext(yyleng))
yyleng = yyleng - 1
break
}
state = advan(t)
yylsta(lsp) = state
lsp = lsp +1
goto 2001
}
}
}
if(r < 0){
t = r + ich
if (t <= yytop .and. verif(t) .eq. state){
if(advan(t) == YYERROR){
call unput(yytext(yyleng))
yyleng = yyleng - 1
break
}
state = advan(t)
yylsta(lsp) = state
lsp = lsp +1
goto 2001
}
t = r + match(ich)
if(t <= yytop && state == verif(t)){
if(advan(t) == YYERROR){
call unput(yytext(yyleng))
yyleng = yyleng - 1
break
}
state = advan(t)
yylsta(lsp) = state
lsp = lsp + 1
goto 2001
}
}
else {
if (state > 0) state = sfall(state)
if (state .gt. 0) r = stoff(state)
if (state .gt. 0 .and. r .ne. 0)
goto 1984
call unput(yytext(yyleng))
yyleng = yyleng -1
break
}
2001
continue
}
while (lsp .gt. 1){
lsp = lsp -1
ilsp = yylsta(lsp)
yyfnd = atable(ilsp)
if (yyfnd .gt. 0)
if (vstop(yyfnd) .gt. 0){
r = vstop(yyfnd)
if (extra(r) .ne. 0){
for(;;){
ilsp = yylsta(lsp)
if (yyback(atable(ilsp), -r) .eq. 1)
break
lsp= lsp -1
call unput(yytext(yyleng))
yyleng = yyleng -1
}
}
yyprev = lexshf(yytext(yyleng))
yylsp = lsp
yyfnd = yyfnd + 1
yylook = r
yytext(yyleng+1) = 0
return
}
call unput(yytext(yyleng))
}
if (yytext(1) .eq. 0){
yylook=0
return
}
yyprev = input(dummy)
call output(yyprev)
yyprev = lexshf(yyprev)
yyleng = 0
goto 1776
end
integer function yyback (isub, n)
common /Lvstop/ vstop
integer vstop(Svstop)
if (isub .ne. 0)
while (vstop(isub) .ne. 0){
if (vstop(isub) .eq. m){
yyback = 1
return
}
isub = isub + 1
}
yyback = 0
return
end