1*14497Ssamblock data 2*14497Ssaminteger cshift, csize, yynlin 3*14497Ssamcommon /yyllib/ cshift, csize, yynlin 4*14497Ssamdata yynlin/YYNEWLINE/ 5*14497Ssamend 6*14497Ssamblock data 7*14497Ssamcommon /yyldat/ yyfnd, ymorf, yyprev, yybgin, yytop 8*14497Ssaminteger yyfnd, yymorf, yyprev, yybgin, yytop 9*14497Ssamdata yybgin/1/ 10*14497Ssamdata yyprev/YYNEWLINE/ 11*14497Ssamdata yytop/YYTOPVAL/ 12*14497Ssamend 13*14497Ssaminteger function yylook(dummy) 14*14497Ssamcommon /Lverif/ verif 15*14497Ssamcommon /Ladvan/ advan 16*14497Ssamcommon /Lstoff/ stoff 17*14497Ssamcommon /Lsfall/ sfall 18*14497Ssamcommon /Latable/ atable 19*14497Ssamcommon /Lextra/ extra 20*14497Ssamcommon /Lvstop/ vstop 21*14497Ssaminteger verif(Sverif), advan(Sadvan),stoff(Sstoff),match(Smatch) 22*14497Ssaminteger sfall(Ssfall),atable(Satable),extra(Sextra), vstop(Svstop) 23*14497Ssaminteger state, lsp, r 24*14497Ssaminteger ch, n 25*14497Ssamcommon /yyldat/ yyfnd, yymorf, yyprev, yybgin, yytop, yylsp, yylsta(YYLMAX) 26*14497Ssamcommon /yyxel/ yyleng, yytext 27*14497Ssaminteger yyfnd, yymorf, yylsta, yylsp, yytext, yyprev, yyleng, yytop 28*14497Ssaminteger lexshf, yytext(YYLMAX), yyback, yybgin 29*14497Ssaminteger z, t 30*14497Ssamif (yymorf .eq. 0) 31*14497Ssam yyleng = 0 32*14497Ssamelse 33*14497Ssam yymorf=0 34*14497Ssam1776 35*14497Ssam lsp = 1 36*14497Ssam state = yybgin 37*14497Ssam if (yyprev .eq. YYNEWLINE) 38*14497Ssam state = state + 1 39*14497Ssam for (;;){ 40*14497Ssam r = stoff(state) 41*14497Ssam if (r .eq. 0){ 42*14497Ssam z = sfall(state) 43*14497Ssam if (z .eq. 0) 44*14497Ssam break 45*14497Ssam if(stoff(z) == 0) break 46*14497Ssam } 47*14497Ssam ch = input(dummy) 48*14497Ssam ich = lexshf(ch) 49*14497Ssam yyleng = yyleng+1 50*14497Ssam yytext(yyleng) = ch 51*14497Ssam 1984 52*14497Ssam if(r .gt. 0){ 53*14497Ssam t = r + ich 54*14497Ssam if (t<= yytop){ 55*14497Ssam if (verif(t) .eq. state){ 56*14497Ssam if(advan(t) == YYERROR){ 57*14497Ssam call unput(yytext(yyleng)) 58*14497Ssam yyleng = yyleng - 1 59*14497Ssam break 60*14497Ssam } 61*14497Ssam state = advan(t) 62*14497Ssam yylsta(lsp) = state 63*14497Ssam lsp = lsp +1 64*14497Ssam goto 2001 65*14497Ssam } 66*14497Ssam } 67*14497Ssam } 68*14497Ssam if(r < 0){ 69*14497Ssam t = r + ich 70*14497Ssam if (t <= yytop .and. verif(t) .eq. state){ 71*14497Ssam if(advan(t) == YYERROR){ 72*14497Ssam call unput(yytext(yyleng)) 73*14497Ssam yyleng = yyleng - 1 74*14497Ssam break 75*14497Ssam } 76*14497Ssam state = advan(t) 77*14497Ssam yylsta(lsp) = state 78*14497Ssam lsp = lsp +1 79*14497Ssam goto 2001 80*14497Ssam } 81*14497Ssam t = r + match(ich) 82*14497Ssam if(t <= yytop && state == verif(t)){ 83*14497Ssam if(advan(t) == YYERROR){ 84*14497Ssam call unput(yytext(yyleng)) 85*14497Ssam yyleng = yyleng - 1 86*14497Ssam break 87*14497Ssam } 88*14497Ssam state = advan(t) 89*14497Ssam yylsta(lsp) = state 90*14497Ssam lsp = lsp + 1 91*14497Ssam goto 2001 92*14497Ssam } 93*14497Ssam } 94*14497Ssam else { 95*14497Ssam if (state > 0) state = sfall(state) 96*14497Ssam if (state .gt. 0) r = stoff(state) 97*14497Ssam if (state .gt. 0 .and. r .ne. 0) 98*14497Ssam goto 1984 99*14497Ssam call unput(yytext(yyleng)) 100*14497Ssam yyleng = yyleng -1 101*14497Ssam break 102*14497Ssam } 103*14497Ssam 2001 104*14497Ssam continue 105*14497Ssam } 106*14497Ssam while (lsp .gt. 1){ 107*14497Ssam lsp = lsp -1 108*14497Ssam ilsp = yylsta(lsp) 109*14497Ssam yyfnd = atable(ilsp) 110*14497Ssam if (yyfnd .gt. 0) 111*14497Ssam if (vstop(yyfnd) .gt. 0){ 112*14497Ssam r = vstop(yyfnd) 113*14497Ssam if (extra(r) .ne. 0){ 114*14497Ssam for(;;){ 115*14497Ssam ilsp = yylsta(lsp) 116*14497Ssam if (yyback(atable(ilsp), -r) .eq. 1) 117*14497Ssam break 118*14497Ssam lsp= lsp -1 119*14497Ssam call unput(yytext(yyleng)) 120*14497Ssam yyleng = yyleng -1 121*14497Ssam } 122*14497Ssam } 123*14497Ssam yyprev = lexshf(yytext(yyleng)) 124*14497Ssam yylsp = lsp 125*14497Ssam yyfnd = yyfnd + 1 126*14497Ssam yylook = r 127*14497Ssam yytext(yyleng+1) = 0 128*14497Ssam return 129*14497Ssam } 130*14497Ssam call unput(yytext(yyleng)) 131*14497Ssam } 132*14497Ssam if (yytext(1) .eq. 0){ 133*14497Ssam yylook=0 134*14497Ssam return 135*14497Ssam } 136*14497Ssam yyprev = input(dummy) 137*14497Ssam call output(yyprev) 138*14497Ssam yyprev = lexshf(yyprev) 139*14497Ssam yyleng = 0 140*14497Ssam goto 1776 141*14497Ssamend 142*14497Ssaminteger function yyback (isub, n) 143*14497Ssamcommon /Lvstop/ vstop 144*14497Ssaminteger vstop(Svstop) 145*14497Ssamif (isub .ne. 0) 146*14497Ssamwhile (vstop(isub) .ne. 0){ 147*14497Ssam if (vstop(isub) .eq. m){ 148*14497Ssam yyback = 1 149*14497Ssam return 150*14497Ssam } 151*14497Ssam isub = isub + 1 152*14497Ssam } 153*14497Ssamyyback = 0 154*14497Ssamreturn 155*14497Ssamend 156