xref: /csrg-svn/old/lex/nrform (revision 14497)
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