eÿinput.r p Ì ¶ ^integer function input (dummy) integer i, inbuff(200) common /yyiob/ i, inbuff, ilim integer first common /yyllib/ cshift,csize, yynlin integer cshift, csize, yynlin data first/1/; data ibl /1h /; data i1/1ha/; data i2 /1hb/; data k1 /2haa/; data k2 /2hab/; if (ierror(104) .ne. 0) goto 110 if (first .eq. 1) { first = 0; cshift = i2-i1 k=k2-k1 if (k .gt. cshift) csize = k/cshift else csize = cshift/k yynlin = yynlin*cshift ilim = 180 i = 1000 } if (i .gt. ilim) { i = 101; read(5,10) (inbuff(j),j=101,180) 10 format(80a1) for(ilim=180; inbuff(ilim) .eq. ibl .and. ilim .ge. 101; ilim=ilim-1); ilim = ilim + 1 inbuff(ilim) = yynlin } input = inbuff(i) i = i+1 return 110 input = 0 return end integer function unput(ch) integer ch integer i, inbuff(200) common /yyiob/ i, inbuff i = i-1 inbuff(i) = ch unput = ch return end output.r Y \ˆ¶ &integer function output (ch) integer buff(80),ch,i,cshift, csize, yynlin common /yyllib/ cshift, csize, yynlin data i/0/; if (ch .eq. yynlin .or. i .ge. 80) # newline { write (6,10) (buff(j), j=1,i) 10 format(80a1) i = 0 goto 111 } i = i +1 buff(i) = ch 111 output = ch return end yywrap.r Y ܇¶ 5 integer function yywrap(dummy) yywrap = 1 return end main.r r Y ܇¶ i = yylex(0) end lexshf.r Y nˆ¶ ‘ integer function lexshf(c) integer c common /yyllib/ cshift,csize, yynlin integer cshift, csize, yynlin lexshf = mod(c/cshift, csize) return end yyecho.r ~º©¶ b subroutine yyecho (text, len) integer text(1), len do i=1,len { call output(text(i)) } return end yymore.r Y ‰¶ c subroutine yymore(dummy) common /yyldat/ yyfnd, yymorf integer yyfnd, yymorf yymorf = 1 return end ratform Œ Ÿí¶ Õblock data integer cshift, csize, yynlin common /yyllib/ cshift, csize, yynlin data yynlin/YYNEWLINE/; end block data common /yyldat/ yyfnd, ymorf, yyprev, yybgin integer yyfnd, yymorf, yyprev, yybgin data yybgin/1/ data yyprev/YYNEWLINE/ end integer function yylook(dummy) common /Lverif/ verif common /Ladvan/ advan common /Lstoff/ stoff common /Lother/ other common /Lstops/ stops common /Lextra/ extra common /Lvstop/ vstop integer verif(Sverif), advan(Sadvan),stoff(Sstoff) integer other(Sother),stops(Sstops),extra(Sextra), vstop(Svstop) integer state, lsp, r integer ch, n common /yyldat/ yyfnd, yymorf, yyprev, yybgin, yylsp, yylsta(YYLMAX) common /yyxel/ yyleng, yytext integer yyfnd, yymorf, yylsta, yylsp, yytext, yyprev, yyleng integer lexshf, yytext(YYLMAX), yyback, yybgin 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) { state = other(state) if (state .eq. 0) break else r = stoff(state) } ch = input(dummy); ich = lexshf(ch) yyleng = yyleng+1 yytext(yyleng) = ch 1984 r = r + ich if (verif(r) .eq. state) { state = advan(r) yylsta(lsp) = state; lsp = lsp +1 } else { state = other(state) if (state .gt. 0) r = stoff(state) if (state .ne. 0 .and. r .ne. 0) goto 1984; call unput(yytext(yyleng)) yyleng = yyleng -1 break; } } while (lsp .gt. 1) { lsp = lsp -1 ilsp = yylsta(lsp) yyfnd = stops(ilsp) if (yyfnd .gt. 0) if (vstop(yyfnd) .gt. 0) { r = vstop(yyfnd) if (extra(r) .ne. 0) { for(;;) { ilsp = yylsta(lsp) if (yyback(stops(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 reject.r Œ í¶ vinteger function yyrjec (text, len) integer text(100), len common /yyldat/ yyfnd, yymorf, yyprev, yybgin, yylsp, yylsta(1) integer yyfnd, yymorf, yyprev, yylsp, yylsta, yybgin common /Lvstop/ vstop integer vstop(1) common /Lstops/ stops integer stops(1) common /Lextra/ extra integer extra(1) integer r r = vstop(yyfnd-1) n = extra(r) while (n .gt. 0) { len = len + 1 text(len) = input(dummy) } r = vstop(yyfnd) if (r .gt. 0) { yyfnd = yyfnd + 1 yyrject = r return } while(yylsp .gt. 1) { yylsp = yylsp -1 ilsp = yylsta(yylsp) yyfnd = stops(ilsp) if (yyfnd .gt. 0) if (vstop(yyfnd) .gt. 0) { r = vstop(yyfnd) n = extra(r) for(; n .gt. 0; n = n -1) { call unput(text(len)) len = len - 1 } yyprev = text(len) yyfnd = yyfnd + 1 yyrjec = r text(len+1)= 0 return } call unput(text(len)) } call output(text(0)) len = 0 yyrjec = -1 return end yyless.r Œ í¶ subroutine yyless(n) common /yyxel/ yyleng, yytext(200) integer yyleng, yytext common /yyldat/ yyfnd, yymorf, yyprev integer yyfnd, yymorf, yyprev while (yyleng .gt. n) { call unput(yytext(yyleng)) yyleng = yyleng - 1 } if (n .gt. 0) yyprev = yytext(yyleng) return end nrform ƒ¼ï©¤ Îblock data integer cshift, csize, yynlin common /yyllib/ cshift, csize, yynlin data yynlin/YYNEWLINE/ end block data common /yyldat/ yyfnd, ymorf, yyprev, yybgin integer yyfnd, yymorf, yyprev, yybgin data yybgin/1/ data yyprev/YYNEWLINE/ 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, yylsp, yylsta(YYLMAX) common /yyxel/ yyleng, yytext integer yyfnd, yymorf, yylsta, yylsp, yytext, yyprev, yyleng 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 .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 } } 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 { state = sfall(state) if (state .gt. 0) r = stoff(state) if (state .ne. 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