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