Post on 07-Jul-2018
8/18/2019 APUNTES2-Pasados a Word.DOC
1/72
1
Analizador Léxico
ANALIZADOR LÉXICO
ÍNDICE:
- INTRODUCCIÓN......................................................................................................2
- AUTÓMATAS FINITOS.............................................................................................3
- AUTÓMATAS FINITOS DETERMINISTAS (AFD)..................................................4
- AUTÓMATA FINITO NO DETERMINISTA (AFN....................................................5
- RELACIÓN ENTRE GRAMÁTICAS Y AUTÓMATAS............................................8
- EJERCICIOS DE CONSTRUCCIÓN DE AUTÓMATAS........................................10
- MINIMIACIÓN DEL N!MERO DE ESTADOS EN UN AFD..............................15
- CONSTRUCCIÓN DE UN AUTÓMATA FINITOA "ARTIR DE UNA E#"RESIÓN REGULAR.......................................................22
- IM"LEMENTACIÓN DE MÁ$UINAS DE ESTADO FINITAS.............................31
- IDENTIFICACIÓN DE "ALA%RAS........................................................................3&
- IDENTIFICACIÓN DE "REFIJOS..........................................................................3'
- ALGUNOS EJEM"LOS DE ANALIADORES L#ICOS.....................................40
- LE#...........................................................................................................................58
- REFERENCIAS........................................................................................................&3
8/18/2019 APUNTES2-Pasados a Word.DOC
2/72
2
Analizador Léxico
ANALIZADOR LÉXICO
E explorador, analizador léxico o "Scanner" *+ , ,/* * , 6* ** +,,/**+ * 7,, 6*9/* 79, : 6* 9+/6:* 69+ +;*9+=)? *@* ,+ ,,
8/18/2019 APUNTES2-Pasados a Word.DOC
3/72
3
Analizador Léxico
⋅ S* 6**9 /*9* ,,+ **+*9/,9*+ */*9,+ * + 7,, 6*9/* (,?+>*//*? 9/, * ,*? */.) 9 +/9/+ 7+ (E%CDIC? ASCII?...) 9 ,/++/9/+ (,,/**+ * *+,* /,
8/18/2019 APUNTES2-Pasados a Word.DOC
4/72
4
Analizador Léxico
A&'()A'AS *INI'OS DE'ER)INIS'AS +A*D
S* 9* * , 5-/6, ( ? T? M? S? )
- C9@69/ * *+/,+? *+ 69 ,,
8/18/2019 APUNTES2-Pasados a Word.DOC
5/72
8/18/2019 APUNTES2-Pasados a Word.DOC
6/72
6
Analizador Léxico
Q E 9@69/ * *+/,+ * AFD *+ * 9@69/ * ,+
8/18/2019 APUNTES2-Pasados a Word.DOC
7/72
7
Analizador Léxico
!"D [!,%] + !% = $ !%, %&, & ' - = $ !% '
= $ %&, & '
$ !, % ' $ %, & '
$ !, % ' $ %, & '
$ !, % ' φ
$ %, & ' φ
$ %, & ' $ %, & ' $ %, & ' $ & ' $ & ' φ
$ & ' φ $ & ' $ & '
E *+/, %C *+ 9, 6*+/ 6* C *+ 9,.
a b c *> AB BC BC
BC BC C C C
Si !n e$ado e$ inicial 3 -inal a la 4ez i#plica 1!e 5 +4ac6o perenece al Len/!a0e%
a
b
c
a
b c a
b c
8/18/2019 APUNTES2-Pasados a Word.DOC
8/72
8
Analizador Léxico
RELACI(N EN'RE 7RA)8'ICAS 9 A&'()A'AS:
E *976,@* *+ 76, ,, , U 0 44> Z 1 0 44> V 1 1 0 44> 0 1 1 0
Autómata completo:
0 1 1 0 ──> V Z U Z
8/18/2019 APUNTES2-Pasados a Word.DOC
9/72
9
Analizador Léxico
- E+ 6: B , ,/ * ,6/,/, *, 69, 7,B/, *76, L,+ *7,+ +9**+*9/,,+ /,9+9*+. L+ *+/,+ +9 +;
8/18/2019 APUNTES2-Pasados a Word.DOC
10/72
10
Analizador Léxico
8/18/2019 APUNTES2-Pasados a Word.DOC
11/72
11
Analizador Léxico
D C a 1 0 1 0 a b b a 0 L
C C b D > La secuencia de sí mbolos
C B a 567 no terminales es laB A 0 C a secuencia
de estadosA B 1 567 que atraviesa el autómata.A 1 C b
567 C b
567 B a
567 A 0
567
B 1 567 A 0
1
Ejercicios de construcción de autómatas donde VT = { 0, 1 } :
1.- Construir un autómata que acepte una secuencia de {0,1} en laque cada e! que apare!can dos unos les si"a un cero.
8/18/2019 APUNTES2-Pasados a Word.DOC
12/72
12
Analizador Léxico
#.- Todo tercer s$m%olo es un 1: & & 1 & & 1 & ...' = { & ( 1 }
).- Cualquier secuencia que ten"a al menos un 1.
*.- +n nmero par de 1s ( un nmero impar de 0s.
nº 1 nº 0 estado *** par par A par impar B impar par C impar impar D
- Si fuera un nº impar de 1s y
par de 0s el estado final sería C.
.- a( un nmero par de 0s entre dos 1s. VT = { 0, 1 }
... 1 0 0 ... 0 1 ...
par
8/18/2019 APUNTES2-Pasados a Word.DOC
13/72
13
Analizador Léxico
/.- ' = VT { 0 │ 1 } ' = VT
2.- Toda secuencia de la 3orma 1 α 0 α ε { 0, 1 }
1 { 1 │ 0 } 0
4.- 5ecuencia con tres unos:
57 NOTA: Si no existe ningún estado final, el autómata no acepta ninguna secuencia. 89
6.- Todas las secuencias en las que todo 1 a precedido ( se"uidode un 0:
8/18/2019 APUNTES2-Pasados a Word.DOC
14/72
14
Analizador Léxico
Ejercicios de dado un autómata, er qu7 len"uaje acepta.
1.- 0 1 * > A B A B B C C C C
{ 1 } 0 { 0 } 1 { 0 1 }
2.- 0 1 * > A B C B
C B
C C C
0 { 1 }
3.-
0 1*
> A B C B D B C C D D D D
8/18/2019 APUNTES2-Pasados a Word.DOC
15/72
15
Analizador Léxico
0 { 1 } 1 { 0 }
4.-
1 * c*
> A B F F B F C F
C C D C D E C C E F F F F F F F
F 444 estado de fallo
1 * { 1 c } * { ( x c ) { 1 c } * } 1
8/18/2019 APUNTES2-Pasados a Word.DOC
16/72
16
Analizador Léxico
)INI)IZACI(N DEL N
8/18/2019 APUNTES2-Pasados a Word.DOC
17/72
17
Analizador Léxico
"**9/ S+/*B/
,) C9+**+ * 9@69/ * *+/,+ * ,6/,/, AFD? 96:*9 * *+/, * , E = { e1, e2, ..., en, φ }
8/18/2019 APUNTES2-Pasados a Word.DOC
18/72
18
Analizador Léxico
Un$il no *e prod/zca /na n/ea */dii*in.
8/18/2019 APUNTES2-Pasados a Word.DOC
19/72
19
Analizador Léxico
) C9+/69 * AFD 9,.
Hay que tener en cuenta el estado de allo, ya que este procedimiento requiere que las transiciones sean exhaustivas.
Ejemplo:
Primera partición:
{ A, B, C, } { D, E }
Con el "0":
{ A, B, C, } { D, E }
8/18/2019 APUNTES2-Pasados a Word.DOC
20/72
20
Analizador Léxico
Segunda partición:
{ A, φ } { B, C } { D, E }
Con el "1":
{ A, φ } { B, C } { D, E }
Tercera partición:
{ A } { φ } { B, C } { D, E } ; ; B D
AFD mínimo:
8/18/2019 APUNTES2-Pasados a Word.DOC
21/72
8/18/2019 APUNTES2-Pasados a Word.DOC
22/72
22
Analizador Léxico
Transiciones con "1"
8/18/2019 APUNTES2-Pasados a Word.DOC
23/72
23
Analizador Léxico
Tercera partición:
{ 1, 7 } { 3 } { 5 } { 4, 6 }
Transiciones con "0"
{ 1, 7 } { 3 } { 5 } { 4, 6 }
Transiciones con "1"
AFD m ínimo :
0 1 **< {1,7} >1 1 3 {4,6} 2 1 2 {3} 3 2 4
{5} 4 1 2
Ejercicios de minimización de AFD
1.-
x y **<
> 1 4 1 2 5 1 3 4 5 4 2 6 5 1 7
8/18/2019 APUNTES2-Pasados a Word.DOC
24/72
24
Analizador Léxico
6 1 4 7 2 5
8/18/2019 APUNTES2-Pasados a Word.DOC
25/72
25
Analizador Léxico
Estados no finales Estados finales
{ 3, 4, 5 } { 1, 2, 6, 7 }
Transiciones con x
{ 3 } { 4, 5 } { 1, 2 } { 6, 7 }
Transiciones con y
{ 3 } { 4, 5 } { 1, 2 } { 6, 7 }
Transiciones con x
AFD m ínimo :
x y **<{1,2}> 1 4 1 {3} 3 4 4 {4,5} 4 1 6 {6,7} 6 1 4
El estado 3 lo podemos eliminar porque no es alcanzable.
x y **< > 1 4 1 4 1 6
8/18/2019 APUNTES2-Pasados a Word.DOC
26/72
26
Analizador Léxico
6 1 4
8/18/2019 APUNTES2-Pasados a Word.DOC
27/72
27
Analizador Léxico
CONSTRUCCIÓN DE UN AUTÓMATA FINITO A PARTIR DE UNA EXPRESIÓNREGULAR:
E?@8E5AB 8E+';8 ;
8/18/2019 APUNTES2-Pasados a Word.DOC
28/72
28
Analizador Léxico
'= .- E+/* 69 ++/*, * /,9+9 ,, 6,6* ,7,, * *+/,+.
C9+/69 S*, S 69 ,7,, * *+/,+? 9 *+/,+ 9,*+ S1? S2?...? S9 : *+/,+9,*+ 1? 2?...? . AV,+ 69 *+/, 96* S? 6* +*B * 96* *+/, 9, (K9) 9,+ * 9
8/18/2019 APUNTES2-Pasados a Word.DOC
29/72
29
Analizador Léxico
e = e1 e2
N+ 9/**+, */, ,+ /,9+9*+ ? +** 6* +*, +
8/18/2019 APUNTES2-Pasados a Word.DOC
30/72
30
Analizador Léxico
El sistema de transición nos quedará:
Eer!i!ios de sistemas de transi!i"n a #artir de e$#resiones re%&'ares
1.- e = { a │ D % { c } F d │ { 3 } F }
e = { e1 }
e1 = e2 e:
e2 = e; e
8/18/2019 APUNTES2-Pasados a Word.DOC
31/72
31
Analizador Léxico
#.- G 8eal en
8/18/2019 APUNTES2-Pasados a Word.DOC
32/72
32
Analizador Léxico
2a#o$ a pa$ar a !n A*D:
a)Eliminar trans. AFN AFD.Tenemos dosposibilidades
b)Trans. AFD.
,) R*7,+ * *9,9 * ,+ /,9+9*+
E K/ ,+ *+ * 9+/6 69 ,7,, * *+/,+ ,, 69 ++/*, * /,9+9.D* 9 *+ *+/, 9, 9 * *7, 99769, /,9+9 * / *+/,? *+ *9, 6* 9 +*B ,*+ *+ 9,? ,*+ 9, , A.
-S A *+ 9,? ,*+ 9, , >.
8/18/2019 APUNTES2-Pasados a Word.DOC
33/72
33
Analizador Léxico
S 9 /*97 , +/6,9 (Q)? *9/9*+ /*9H (QQ)
())*
- E 96* *+/, *K9* ,+ *,*+ * /+ + *+/,+? + ,769 *, 9,? *96* *+/, +*B 9, : + ,769 *, 9,? * 96* *+/, +*B 9,.
*,+ 69 *@* 8 a 9 { a }
8/18/2019 APUNTES2-Pasados a Word.DOC
34/72
34
Analizador Léxico
8/18/2019 APUNTES2-Pasados a Word.DOC
35/72
35
Analizador Léxico
AFD-mínimo:
{ A' } { B', C', D', E' }
con "a":
{ A' } { B', C', D', E' }
con "b":
RESUMEN :
Expresión Regular
Diagrama de transición-
8/18/2019 APUNTES2-Pasados a Word.DOC
36/72
36
Analizador Léxico
AFN AFD AFD-mínimo.
I)PLE)EN'ACI(N DE )8?&INAS DE ES'ADO *INI'AS:
- MH/+ *;/+ E9 * 7,, 6* **9/, ,
B69, *+/* 69, ,,transic. [?ar.est., s@mbolo]
símbolos 57 5 rutinas semánticas estados e' *9 89
A **+? , ,/ *+/B ,;, *
8/18/2019 APUNTES2-Pasados a Word.DOC
37/72
37
Analizador Léxico
. . nil φ
8/18/2019 APUNTES2-Pasados a Word.DOC
38/72
38
Analizador Léxico
9* ,, 69, * ,+ ,+ * , ,/ , 9*/+ *9 69, /,
8/18/2019 APUNTES2-Pasados a Word.DOC
39/72
39
Analizador Léxico
- MH/+ ;/+
- U9 H/ ;/ 6** +* ,6* *9 * 6* ,: 69 / * 7,, ,+, ,,, *+/, ,+; + *9 ,, / * 7,, ,: 69, +*9/*9, =,+*= ,, ,, +;
8/18/2019 APUNTES2-Pasados a Word.DOC
40/72
40
Analizador Léxico
8/18/2019 APUNTES2-Pasados a Word.DOC
41/72
41
Analizador Léxico
A: case S of
a,b:
goto B
c: A
goto C
x: goto A
B:
B RETURN
C: case S of
a: C
goto B
otherwase: ERROR.
- O/ H/ *+ *,9/* , 6/,9 * */ * /,9+9*+ */ * +,/+9* * ;9* *+ * +;
8/18/2019 APUNTES2-Pasados a Word.DOC
42/72
42
Analizador Léxico
5A7 goto dir símbolo 1 dir 1 5A7 B*
8/18/2019 APUNTES2-Pasados a Word.DOC
43/72
43
Analizador Léxico
& ... │ & ... reescri%imos & ...│...F
una sola %arra i3 ... tIenelse ...
... │ ...
D& ... i3 5=& tIen ...
T*9*+ 6*
8/18/2019 APUNTES2-Pasados a Word.DOC
44/72
44
Analizador Léxico
- L+/, 9*, L,+ ,,
8/18/2019 APUNTES2-Pasados a Word.DOC
45/72
45
Analizador Léxico
TA%LA DE TRANSICIONES
"+** , +76*9/* ,
5A7 estado: símbolo dir = e' B*< . . . . . . B*< B*< x fallo 869
C9+**+? *@*? * ,6/,/, ,, * *9* * *976,@* L ACE?%AD? %ADE? %ED P. S697,+ 6* /*9*+ 69, +/, ,+,, 9 ,, *+/, *9 , 6* +*
8/18/2019 APUNTES2-Pasados a Word.DOC
46/72
46
Analizador Léxico
. 89 .
S9 *
8/18/2019 APUNTES2-Pasados a Word.DOC
47/72
47
Analizador Léxico
B*< D B*< 869
2ea#o$ a@ora al/!no$ e0e#plo$ de A% Léxico$:
1.- D,, , +76*9/* 7,B/, %NF
A B *$rinC no+reB DD deci+al A D=D
oc$al
C9+/6 *9 ",+, 69 ,9,, H ,, + *+9*9/*+ +;
8/18/2019 APUNTES2-Pasados a Word.DOC
48/72
48
Analizador Léxico
pro"ram al1p46 3uente, outputFLconst
ceo3 = MNMLceoln = MOMLmc = 10L
t(pe sim% = ident, octal, decimal, strin, dosp, asi", PnPcIFLar
3uente : te&tLc : cIarLs : sim%Lcs : record
cars : pacQed arra( D1..mc o3 cIarLlon" : 0..mcL
endL
procedure error n : inte"erFL%e"in
Jrite MError nm. M, n, M : MFLcase n o3
1 : Jriteln Mci3ra no permitida en octal.MFL# : Jriteln Mstrin" inaca%ada.MFL) : Jriteln McarRcter no permitido.MFL* : Jriteln Mnmero demasiado lar"o.MFL : Jriteln Mstrin" demasiado lar"a.MFL
endL
endLprocedure si"carL%e"in
i3 eo3 3uenteF tIen c := ceo3 else i3 eoln 3uenteF tIen %e"in
c := ceolnLreadln 3uenteF
end else read 3uente, cFLendL
8/18/2019 APUNTES2-Pasados a Word.DOC
49/72
49
Analizador Léxico
procedure le&Lla%el 1Lar erralmc : SooleanLprocedure inicL
ar i : inte"erL%e"in
erralmc := 3alseLJitI cs do %e"in
lon" := 0L3or i := 1 to mc do cars Di := M M
endendL
procedure almcL
%e"inJitI cs do %e"in
erralmc := not lon" K mcFLi3 not erralmc tIen %e"in
lon" := lon" 1Lcars Dlon" := c
endend
endL
%e"in le&F1:JIile c in DM M, MLM, ceoln do
i3 c = MLM tIen repeat si"car until c in Dceoln,ceo3
else si"carLi3 c in DM;M..MM, MaM..M!M tIen %e"in
s := identLinicLrepeat
almcLsi"car
until not c in DM;M..MM, MaM..M!M, M0M..M6MFend else i3 c in DM0M..M6M tIen %e"in
i3 c = M0M tIen s := octal else s := decimalL
8/18/2019 APUNTES2-Pasados a Word.DOC
50/72
50
Analizador Léxico
inicLrepeat
almcLsi"carLi3 s = octal tIen i3 c in DM4M, M6M tIen error
1Funtil not c in DM0M..M6MFLi3 erralmc tIen error *FL
end else i3 c = MUM tIen %e"ins := strinLinicLrepeat
repeatsi"carL
i3 not c in DMUM, ceoln, ceo3F tIenalmc
until c in DMUM, ceoln, ceo3Li3 c = MUM tIen %e"in
si"carLi3 c = MUM tIen almc
end else %e"inerror #FLerralmc := 3alse
end
until c K9 MUMLi3 erralmc tIen error Fend else i3 c = M:M tIen %e"in
si"carLi3 c = M=M tIen %e"in
s := asi"Lsi"car
end else s := dospend else i3 c = ceo3 tIen s := PnPcIelse %e"in
error )FLsi"carL"oto 1
endLend le&FL
8/18/2019 APUNTES2-Pasados a Word.DOC
51/72
51
Analizador Léxico
%e"in pro"ramFassi"n 3uente, M3uenteMFLreset 3uenteFLsi"carLrepeat
le&LJriteln ord sF, M M, cs.carsF
until s = PnPcILclose 3uenteF
end pro"ramF.
2.- ,+ , * * A. H * C, * ",+, ,, "4
8/18/2019 APUNTES2-Pasados a Word.DOC
52/72
52
Analizador Léxico
C* L+/971 (CcE,t,d,lC)
F (CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCG C CH C CI C Jortable Jascal compiler CK C CCCCCCCCCCCCCCCCCCCCCCCC CL C C C Jascal JH CN C C1/ C C11 C !OtPors: C1F C 2rs !mmann C1G C esa? #ori C1H C &Pristian Qacobi C1I C C
1K C !ddress: C1L C C1 C nstitOt "Oer nSormati C1N C Uidg. TecPniscPe VocPscPOle CF/ C &V/NK OericP CF1 C CFF C CFG C CFH C CFI C CFK CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC)FLFFN program pascalcompiler(inpOt,oOtpOt,prr)WG/G1GFGG const displimit = F/W maXle?el = 1/WGH intsi>e = 1WGI intal = 1WGK realsi>e = 1WGL realal = 1WG cParsi>e = 1WGN cParal = 1WH/ cParmaX = 1WH1 boolsi>e = 1WHF boolal = 1WHG ptrsi>e = 1WHH adral = 1W
HI setsi>e = 1WHK setal = 1WHL stacal = 1WH stacelsi>e = 1WHN strglgtP = 1KWI/ setPigP = HLWI1 setloY = /WIF ordmaXcPar = KGWIG ordmincPar = /WIH maXint = GFLKLWII lcaStermarstac = IWIK Sileal = cParalW
8/18/2019 APUNTES2-Pasados a Word.DOC
53/72
53
Analizador Léxico
IL (C stacelsi>e = minimOm si>e Sor 1 stacelementI = CstacalIN stacal = scm(all otPer alconstants)K/ cParmaX = scm(cParsi>e,cParal)K1 scm = smallest common mOltipleKF lcaStermarstac += HCptrsi>eEmaX(Xsi>e)KG = 1Cstacelsi>e C)KH maXstac = 1WKI parmal = stacalWKK parmsi>e = stacelsi>eWKL recal = stacalWK SilebOSSer = HWKN maXaddr = maXintWL/L1LFLG tZpe (Cdescribing:C)LH (CCCCCCCCCCCCC)LILKLL (Cbasic sZmbolsC)L (CCCCCCCCCCCCCCC)LN/ sZmbol=(ident,intconst,realconst,stringconst,notsZ,mOlop,addop,relop,1 lparent,rparent,lbrac,rbrac,comma,semicolon,period,arroY,F colon,becomes,labelsZ,constsZ,tZpesZ,?arsZ,SOncsZ,progsZ,
G procsZ,setsZ,pacedsZ,arraZsZ,recordsZ,SilesZ,SorYardsZ,H eginsZ,iSsZ,casesZ,repeatsZ,YPilesZ,SorsZ,YitPsZ,I otosZ,endsZ,elsesZ,OntilsZ,oSsZ,dosZ,tosZ,doYntosZ,K PensZ,otPersZ)WL operator = (mOl,rdi?,andop,idi?,imod,plOs,minOs,orop,ltop,leop,geop,gtop eop,inop,noop)WN setoSsZs = set oS sZmbolWN/ cPtp = (letter,nOmber,special,illegal,N1 cPstrOo,cPcolon,cPperiod,cPlt,cPgt,cPlparen,cPspace)WNFNG (CconstantsC)NH (CCCCCCCCCCC)NINK cstclass = (reel,pset,strg)WNL csp = \ constantWN constant = record case cclass: cstclass oSNN reel: (r?al: paced arraZ [1..strglgtP] oS cPar)W1// pset: (p?al: settZ)W1/1 strg: (slgtP: /..strglgtPW1/F s?al: paced arraZ [1..strglgtP] oS cPar)1/G endW1/H1/I ?alO = record case int?al: boolean oS (Cint?al ne?er set nor testedC)1/K trOe: (i?al: integer)W1/L Salse: (?alp: csp)1/ endW1/N11/ (Cdata strOctOresC)
8/18/2019 APUNTES2-Pasados a Word.DOC
54/72
54
Analizador Léxico
111 (CCCCCCCCCCCCCCCCC)11F le?range = /..maXle?elW addrrange = /..maXaddrW11G strOctSorm = (scalar,sObrange,pointer,poYer,arraZs,records,Siles,11H tagSld,?ariant)W11I declind = (standard,declared)W
11K stp = \ strOctOreW ctp = \ identiSierW11L11 strOctOre = paced record11N mared: booleanW (CSor test pPase onlZC)1F/ si>e: addrrangeW
1F1 case Sorm: strOctSorm oS1FF scalar: (case scalind: declind oS1FG declared: (Sconst: ctp)W standard: ())W1FH sObrange: (rangetZpe: stpW min,maX: ?alO)W1FI pointer: (eltZpe: stp)W1FK poYer: (elset: stp)W1FL arraZs: (aeltZpe,inXtZpe: stp)W1F records: (SstSld: ctpW rec?ar: stp)W1FN Siles: (SiltZpe: stp)W1G/ tagSld: (tagSieldp: ctpW Sst?ar: stp)W1G1 ?ariant: (nXt?ar,sOb?ar: stpW ?ar?al: ?alO)1GF endW1GG1GH (CnamesC)1GI (CCCCCCC)1GK1GL idclass = (tZpes,onst,?ars,Sield,proc,SOnc)W1G setoSids = set oS idclassW1GN idind = (actOal,Sormal)W
1H/ alpPa = paced arraZ [1..] oS cParW1H11HF identiSier = paced record1HG name: alpPaW llin, rlin: ctpW1HH idtZpe: stpW neXt: ctpW1HI case lass: idclass oS1HK onst:(?alOes: ?alO)W1HL ?ars: (?ind: idindW ?le?: le?rangeW ?addr: addrrange)W1H Sield: (Sldaddr: addrrange)W1HN proc,1I/ SOnc: (case pSdecind: declind oS1I1 standard: (eZ: 1..1I)W1IF declared: (pSle?: le?rangeW pSname: integerW1IG case pSind: idind oS1IH actOal: (SorYdecl, eXtern:1II boolean)))1IK endW1IL1I1IN disprange = /..displimitW1K/ YPere = (blc,crec,?rec,rec)W1K11KF (CeXpressionsC)1KG (CCCCCCCCCCCCC)1KH attrind = (cst,?arbl,eXpr)W1KI ?access = (drct,indrct,inXd)W1KK1KL attr = record tZptr: stpW
8/18/2019 APUNTES2-Pasados a Word.DOC
55/72
55
Analizador Léxico
1K case ind: attrind oS1KN cst: (c?al: ?alO)W1L/ ?arbl: (case access: ?access oS1L1 drct: (?le?el: le?rangeW dplmt: addrrange)W1LF indrct: (idplmt: addrrange))
1LG endW1LH1LI testp = \ testpointerW1LK testpointer = paced record1LL elt1,eltF : stpW1L lasttestp : testp1LN endW1/11 (ClabelsC)1F (CCCCCCCC)1G lbp = \ lablW1H labl = record neXtlab: lbpW deSined: booleanW
1I lab?al, labname: integer1K endW1L1 eXtSilep = \SilerecW1N Silerec = record Silename:alpPaW neXtSile:eXtSilep endW1N/1N1(CC)1NF1NG1NH ?ar1NI (CretOrned bZ soOrce program scanner
1NK insZmbol:1NL CCCCCCCCCC)1N1NN sZ: sZmbolW (Clast sZmbolC)F// op: operatorW (CclassiSication oS last sZmbolC)F/1 ?al: ?alOW (C?alOe oS last constantC)F/F lgtP: integerW (ClengtP oS last string constantC)F/G id: alpPaW (Clast identiSier (possiblZ trOncated)C)F/H : 1..W (Cnr oS cPars in last identiSierC)F/I cP: cParW (Clast cParacterC)F/K eol: booleanW (Cend oS line SlagC)F/LF/F/N (CcoOnters:C)F1/ (CCCCCCCCCCC)F11F1F cPcnt: integerW (CcParacter coOnterC)F1G lc,ic: addrrangeW (Cdata location and instrOction coOnterC)F1H linecoOnt: integerWF1IF1KF1L (CsYitcPes:C)F1 (CCCCCCCCCCC)F1NFF/ dp, (Cdeclaration partC)FF1 prterr, (Cto alloY SorYard reSerences in pointer tZpeFFF declaration bZ sOppressing error messageC)FFG list,prcode,prtables: booleanW (CoOtpOt options Sor
8/18/2019 APUNTES2-Pasados a Word.DOC
56/72
56
Analizador Léxico
FFH soOrce program listingFFI printing sZmbolic codeFFK displaZing ident and strOct tablesFFL +procedOre optionC)FF debOg: booleanW
FFNFG/FG1 (Cpointers:C)FGF (CCCCCCCCCCC)FGG parmptr,FGH intptr,realptr,cParptr,FGI boolptr,nilptr,teXtptr: stpW (Cpointers to entries oS standard idsC)FGK OtZpptr,Ocstptr,O?arptr,FGL OSldptr,Oprcptr,OSctptr, (Cpointers to entries Sor Ondeclared idsC)FG SYptr: ctpW (CPead oS cPain oS SorY decl tZpe idsC)FGN SeXtSilep: eXtSilepW (CPead oS cPain oS eXternal SilesC)FH/ globtestp: testpW (Clast testpointerC)FH1FHFFHG (Cbooeeping oS declaration le?els:C)FHH (CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC)FHIFHK le?el: le?rangeW (CcOrrent static le?elC)FHL disX, (Cle?el oS last id searcPed bZ searcPidC)FH top: disprangeW (Ctop oS displaZC)
FHNFI/ displaZ: (CYPere: means:C)FI1 arraZ [disprange] oS
FIF paced record (C=blc: id is ?ariable idC)FIG Sname: ctpW Slabel: lbpW (C=crec: id is Sield id in record YitPC)FIH case occOr: YPere oS (C constant addressC)FII crec: (cle?: le?rangeW (C=?rec: id is Sield id in record YitPC)FIK cdspl: addrrange)W(C ?ariable addressC)FIL ?rec: (?dspl: addrrange)FI endW (C + procedOre YitPstatementC)FINFK/FK1 (Cerror messages:C)FKF (CCCCCCCCCCCCCCCCC)FKGFKH errinX: /..1/W (Cnr oS errors in cOrrent soOrce lineC)FKI errlist:FKK arraZ [1..1/] oSFKL paced record pos: integerWFK nmr: 1..H//FKN endWFL/FL1FLFFLG (CeXpression compilation:C)FLH (CCCCCCCCCCCCCCCCCCCCCCCCC)FLIFLK gattr: attrW (Cdescribes tPe eXpr cOrrentlZ compiledC)FLLFLFLN (CstrOctOred constants:C)
8/18/2019 APUNTES2-Pasados a Word.DOC
57/72
57
Analizador Léxico
F/ (CCCCCCCCCCCCCCCCCCCCCCC)F1FF constbegsZs,simptZpebegsZs,tZpebegsZs,blocbegsZs,selectsZs,SacbegsZs,FG statbegsZs,tZpedels: setoSsZsWFH cPartp : arraZ[cPar] oS cPtpW
FI rY: arraZ [1..GI(Cnr. oS res. YordsC)] oS alpPaWFK SrY: arraZ [1..N] oS 1..GK(Cnr. oS res. Yords E 1C)WFL rsZ: arraZ [1..GI(Cnr. oS res. YordsC)] oS sZmbolWF ssZ: arraZ [cPar] oS sZmbolWFN rop: arraZ [1..GI(Cnr. oS res. YordsC)] oS operatorWFN/ sop: arraZ [cPar] oS operatorWFN1 na: arraZ [1..GI] oS alpPaWFNF mn: arraZ [/..K/] oS paced arraZ [1..H] oS cParWFNG sna: arraZ [1..FG] oS paced arraZ [1..H] oS cParWFNH cdX: arraZ [/..K/] oS H..EHWFNI pdX: arraZ [1..FG] oS L..ELWFNK ordint: arraZ [cPar] oS integerWFNLFN intlabel,mXint1/,digmaX: integerWFNNG// (CC)G/1G/FG/G procedOre endoSlineWG/H ?ar lastpos,Sreepos,cOrrpos,cOrrnmr,S,: integerWG/I beginG/K iS errinX + / tPen (CoOtpOt error messagesC)G/L begin Yrite(oOtpOt,linecoOnt:K, CCCC :N)WG/ lastpos := /W Sreepos := 1WG/N Sor := 1 to errinX doG1/ beginG11 YitP errlist[] doG1F begin cOrrpos := posW cOrrnmr := nmr endW
G1G iS cOrrpos = lastpos tPen Yrite(oOtpOt,,)G1H elseG1I beginG1K YPile Sreepos cOrrpos doG1L begin Yrite(oOtpOt, )W Sreepos := Sreepos E 1 endWG1 Yrite(oOtpOt,\)WG1N lastpos := cOrrposGF/ endWGF1 iS cOrrnmr 1/ tPen S := 1GFF else iS cOrrnmr 1// tPen S := FGFG else S := GWGFH Yrite(oOtpOt,cOrrnmr:S)WGFI Sreepos := Sreepos E S E 1GFK endWGFL Yriteln(oOtpOt)W errinX := /GF endWGFN linecoOnt := linecoOnt E 1WGG/ iS list and (not eoS(inpOt)) tPenGG1 begin Yrite(oOtpOt,linecoOnt:K, :F)WGGF iS dp tPen Yrite(oOtpOt,lc:L) else Yrite(oOtpOt,ic:L)WGGG Yrite(oOtpOt, )GGH endWGGI cPcnt := /
8/18/2019 APUNTES2-Pasados a Word.DOC
58/72
58
Analizador Léxico
GGK end (CendoSlineC) WGGLGG procedOre error(Serrnr: integer)WGGN beginGH/ iS errinX += N tPen
GH1 begin errlist[1/].nmr := FIIW errinX := 1/ endGHF elseGHG begin errinX := errinX E 1WGHH errlist[errinX].nmr := SerrnrGHI endWGHK errlist[errinX].pos := cPcntGHL end (CerrorC) WGHGHN procedOre insZmbolWGI/ (Cread neXt basic sZmbol oS soOrce program and retOrn itsGI1 description in tPe global ?ariables sZ, op, id, ?al and lgtPC)GIF label 1,F,GWGIG ?ar i,: integerWGIH digit: paced arraZ [1..strglgtP] oS cParWGII string: paced arraZ [1..strglgtP] oS cParWGIK l?p: cspW test: booleanWGILGI procedOre neXtcPWGIN begin iS eol tPenGK/ begin iS list tPen Yriteln(oOtpOt)W endoSlineGK1 endWGKF iS not eoS(inpOt) tPenGKG begin eol := eoln(inpOt)W read(inpOt,cP)WGKH iS list tPen Yrite(oOtpOt,cP)WGKI cPcnt := cPcnt E 1GKK endGKL elseGK begin Yriteln(oOtpOt, CCC eoS ,encoOntered)WGKN test := Salse
GL/ endGL1 endWGLFGLG procedOre optionsWGLH beginGLI repeat neXtcPWGLK iS cP + C tPen
GLL beginGL iS cP = t tPenGLN begin neXtcPW prtables := cP = E endG/ elseG1 iS cP = l tPenGF begin neXtcPW list := cP = EWGG iS not list tPen Yriteln(oOtpOt)GH endGI elseGK iS cP = d tPenGL begin neXtcPW debOg := cP = E endG elseGN iS cP = c tPenGN/ begin neXtcPW prcode := cP = E endWGN1 neXtcP
8/18/2019 APUNTES2-Pasados a Word.DOC
59/72
59
Analizador Léxico
GNF endGNG Ontil cP + ,GNH end (CoptionsC) WGNIGNK begin (CinsZmbolC)
GNL 1:GN repeat YPile ((cP = ) or (cP = )) and not eol do neXtcPWGNN test := eolWH// iS test tPen neXtcPH/1 Ontil not testWH/F iS cPartp[cP] = illegal tPenH/G begin sZ := otPersZW op := noopWH/H error(GNN)W neXtcPH/I endH/K elseH/L case cPartp[cP] oSH/ letter:H/N begin := /WH1/ repeatH11 iS tPenH1F begin := E 1W id[] := cP end WH1G neXtcPH1H Ontil cPartp[cP] in [special,illegal,cPstrOo,cPcolon,H1I cPperiod,cPlt,cPgt,cPlparen,cPspace]WH1K iS += tPen := H1L elseH1 repeat id[] := W := 1H1N Ontil = WHF/ Sor i := SrY[] to SrY[E1] 1 doHF1 iS rY[i] = id tPenHFF begin sZ := rsZ[i]W op := rop[i]W goto F endWHFG sZ := identW op := noopWHFH F: endWHFI nOmber:
HFK begin op := noopW i := /WHFL repeat i := iE1W iS i= digmaX tPen digit[i] := cPW neXtcPHF Ontil cPartp[cP] + nOmberWHFN iS ((cP = .) and (inpOt\ + .)) or (cP = e) tPenHG/ beginHG1 := iWHGF iS cP = . tPenHGG begin := E1W iS = digmaX tPen digit[] := cPWHGH neXtcPW (CiS cP = . tPen begin cP := :W goto G endWC)HGI iS cPartp[cP] + nOmber tPen error(F/1)HGK elseHGL repeat := E 1WHG iS = digmaX tPen digit[] := cPW neXtcPHGN Ontil cPartp[cP] + nOmberHH/ endW
HH1 iS cP = e tPenHHF begin := E1W iS = digmaX tPen digit[] := cPWHHG neXtcPWHHH iS (cP = E) or (cP =) tPenHHI begin := E1W iS = digmaX tPen digit[] := cPWHHK neXtcPHHL endW
8/18/2019 APUNTES2-Pasados a Word.DOC
60/72
60
Analizador Léxico
HH iS cPartp[cP] + nOmber tPen error(F/1)HHN elseHI/ repeat := E1WHI1 iS = digmaX tPen digit[] := cPW neXtcPHIF Ontil cPartp[cP] + nOmber
HIG endWHIH neY(l?p,reel)W sZ:= realconstW l?p\.cclass := reelWHII YitP l?p\ doHIK begin Sor i := 1 to strglgtP do r?al[i] := WHIL iS = digmaX tPenHI Sor i := F to E 1 do r?al[i] := digit[i1]HIN else begin error(F/G)W r?al[F] := /WHK/ r?al[G] := .W r?al[H] := /HK1 endHKF endWHKG ?al.?alp := l?pHKH endHKI elseHKK G: beginHKL iS i + digmaX tPen begin error(F/G)W ?al.i?al := / endHK elseHKN YitP ?al doHL/ begin i?al := /WHL1 Sor := 1 to i doHLF beginHLG iS i?al = mXint1/ tPenHLH i?al := i?alC1/Eordint[digit[]]HLI else begin error(F/G)W i?al := / endHLK endWHLL sZ := intconstHL endHLN endH/ endWH1 cPstrOo:
HF begin lgtP := /W sZ := stringconstW op := noopWHG repeatHH repeat neXtcPW lgtP := lgtP E 1WHI iS lgtP = strglgtP tPen string[lgtP] := cPHK Ontil (eol) or (cP = )WHL iS eol tPen error(F/F) else neXtcPH Ontil cP + WHN lgtP := lgtP 1W (CnoY lgtP = nr oS cPars in stringC)HN/ iS lgtP = / tPen error(F/I) elseHN1 iS lgtP = 1 tPen ?al.i?al := ord(string[1])HNF elseHNG begin neY(l?p,strg)W l?p\.cclass:=strgWHNH iS lgtP + strglgtP tPenHNI begin error(GNN)W lgtP := strglgtP endWHNK YitP l?p\ doHNL begin slgtP := lgtPWHN Sor i := 1 to lgtP do s?al[i] := string[i]HNN endWI// ?al.?alp := l?pI/1 endI/F endWI/G cPcolon:I/H begin op := noopW neXtcPW
8/18/2019 APUNTES2-Pasados a Word.DOC
61/72
61
Analizador Léxico
I/I iS cP = = tPenI/K begin sZ := becomesW neXtcP endI/L else sZ := colonI/ endW
I/N cPperiod:I1/ begin op := noopW neXtcPWI11 iS cP = . tPenI1F begin sZ := colonW neXtcP endI1G else sZ := periodI1H endWI1I cPlt:I1K begin neXtcPW sZ := relopWI1L iS cP = = tPenI1 begin op := leopW neXtcP endI1N elseIF/ iS cP = + tPenIF1 begin op := neopW neXtcP endIFF else op := ltopIFG endWIFH cPgt:IFI begin neXtcPW sZ := relopWIFK iS cP = = tPenIFL begin op := geopW neXtcP endIF else op := gtopIFN endWIG/ cPlparen:IG1 begin neXtcPWIGF iS cP = C tPenIGG begin neXtcPWIGH iS cP = tPen optionsWIGI repeatIGK YPile (cP + C) and not eoS(inpOt) do neXtcPWIGL neXtcP
IG Ontil (cP = )) or eoS(inpOt)WIGN neXtcPW goto 1IH/ endWIH1 sZ := lparentW op := noopIHF endWIHG special:IHH begin sZ := ssZ[cP]W op := sop[cP]WIHI neXtcPIHK endWIHL cPspace: sZ := otPersZIH end (CcaseC)IHN end (CinsZmbolC) WII/II1 procedOre enterid(Scp: ctp)WIIF (Center id pointed at bZ Scp into tPe nametable,IIG YPicP on eacP declaration le?el is organised asIIH an Onbalanced binarZ treeC)III ?ar nam: alpPaW lcp, lcpl: ctpW lleSt: booleanWIIK begin nam := Scp\.nameWIIL lcp := displaZ[top].SnameWII iS lcp = nil tPenIIN displaZ[top].Sname := ScpIK/ elseIK1 beginIKF repeat lcpl := lcpWIKG iS lcp\.name = nam tPen (Cname conSlict, SolloY rigPt linC)IKH begin error(1/1)W := lcp\.rlinW lleSt := Salse endIKI else
8/18/2019 APUNTES2-Pasados a Word.DOC
62/72
62
Analizador Léxico
IKK iS lcp\.name nam tPenIKL begin lcp := lcp\.rlinW lleSt := Salse endIK else begin lcp := lcp\.llinW lleSt:=trOe end
GLKN neY(Ocstptr,onst)WGLL/ YitP Ocstptr\ doGLL1 begin name := ^ ^W idtZpe := nilW neXt := nil WGLLF ?alOes.i?al := /W lass := onstGLLG endWGLLH neY(O?arptr,?ars)WGLLI YitP O?arptr\ doGLLK begin name := ^ ^W idtZpe := nilW ?ind := actOalWGLLL neXt := nilW ?le? := /W ?addr := /W lass := ?arsGLL endWGLLN neY(OSldptr,Sield)WGL/ YitP OSldptr\ do
GL1 begin name := ^ ^W idtZpe := nilW neXt := nilW Sldaddr := /WGLF lass := SieldGLG endWGLH neY(Oprcptr,proc,declared,actOal)WGLI YitP Oprcptr\ doGLK begin name := ^ ^W idtZpe:= nilW SorYdecl := SalseWGLL neXt := nilW eXtern := SalseW pSle? := /W genlabel(pSname)WGL lass := procW pSdecind := declaredW pSind := actOalGLN endWGLN/ neY(OSctptr,SOnc,declared,actOal)WGLN1 YitP OSctptr\ doGLNF begin name := ^ ^W idtZpe := nilW neXt := nilWGLNG SorYdecl := SalseW eXtern := SalseW pSle? := /W genlabel(pSname)WGLNH lass := SOncW pSdcind := declaredW pSind := actOalGLNI endGLNK end (CenterOndeclC)WGLNL
GLN procedOre initscalarsWGLNN begin SYptr := nilWG// prtables := SalseW list := trOeW prcode := trOeW debOg := trOeWG/1 dp := trOeW prterr := trOeW errinX := /WG/F intlabel := /W := W SeXtSilep := nilWG/G lc := lcaStermarstacESilebOSSerCcParmaXWG/H (C note in tPe abo?e reser?ation oS bOSSer store Sor F teXt Siles C)G/I ic := GW eol := trOeW linecoOnt := /WG/K cP := W cPcnt := /WG/L globtestp := nilWG/ mXint1/ := maXint di? 1/W digmaX := strglgtP 1WG/N end (CinitscalarsC) WG1/G11 procedOre initsetsWG1F beginG1G constbegsZs := [addop,intconst,realconst,stringconst,ident]WG1H simptZpebegsZs := [lparent] E constbegsZsW
G1I tZpebegsZs:=[arroY,pacedsZ,arraZsZ,recordsZ,setsZ,SilesZ]EsimptZpebegsZsWG1K tZpedels := [arraZsZ,recordsZ,setsZ,SilesZ]WG1L blocbegsZs := [labelsZ,constsZ,tZpesZ,?arsZ,procsZ,SOncsZ,beginsZ]WG1 selectsZs := [arroY,period,lbrac]WG1N SacbegsZs := [intconst,realconst,stringconst,ident,lparent,lbrac,notsZ]WGF/ statbegsZs := [beginsZ,gotosZ,iSsZ,YPilesZ,repeatsZ,SorsZ,YitPsZ,casesZ]WGF1 end (CinitsetsC) WGFFGFG procedOre inittablesWGFH procedOre resYordsWGFI beginGFK rY[ 1] := iS W rY[ F] := do W rY[ G] := oS WGFL rY[ H] := to W rY[ I] := in W rY[ K] := or WGF rY[ L] := end W rY[ ] := Sor W rY[ N] := ?ar WGFN rY[1/] := di? W rY[11] := mod W rY[1F] := set W
8/18/2019 APUNTES2-Pasados a Word.DOC
63/72
63
Analizador Léxico
GG/ rY[1G] := and W rY[1H] := not W rY[1I] := tPen WGG1 rY[1K] := else W rY[1L] := YitP W rY[1] := goto WGGF rY[1N] := case W rY[F/] := tZpe W
GGG rY[F1] := Sile W rY[FF] := begin WGGH rY[FG] := Ontil W rY[FH] := YPile W rY[FI] := arraZ WGGI rY[FK] := const W rY[FL] := label WGGK rY[F] := repeat W rY[FN] := record W rY[G/] := doYnto WGGL rY[G1] := paced W rY[GF] := SorYard W rY[GG] := program W
GG rY[GH] := SOnctionW rY[GI] := procedOrWGGN SrY[1] := 1W SrY[F] := 1W SrY[G] := LW SrY[H] := 1IW SrY[I] := FFWGH/ SrY[K] := FW SrY[L] := GFW SrY[] := GHW SrY[N] := GKWGH1 end (CresYordsC) WGHFGHG procedOre sZmbolsWGHH beginGHI rsZ[ 1] := iSsZW rsZ[ F] := dosZW rsZ[ G] := oSsZWGHK rsZ[ H] := tosZW rsZ[ I] := relopW rsZ[ K] := addopWGHL rsZ[ L] := endsZW rsZ[ ] := SorsZW rsZ[ N] := ?arsZWGH rsZ[1/] := mOlopW rsZ[11] := mOlopW rsZ[1F] := setsZWGHN rsZ[1G] := mOlopW rsZ[1H] := notsZW rsZ[1I] := tPensZWGI/ rsZ[1K] := elsesZW rsZ[1L] := YitPsZW rsZ[1] := gotosZWGI1 rsZ[1N] := casesZW rsZ[F/] := tZpesZWGIF rsZ[F1] := SilesZW rsZ[FF] := beginsZWGIG rsZ[FG] := OntilsZW rsZ[FH] := YPilesZW rsZ[FI] := arraZsZWGIH rsZ[FK] := constsZW rsZ[FL] := labelsZWGII rsZ[F] := repeatsZW rsZ[FN] := recordsZW rsZ[G/] := doYntosZWGIK rsZ[G1] := pacedsZW rsZ[GF] := SorYardsZW rsZ[GG] := progsZWGIL rsZ[GH] := SOncsZW rsZ[GI] := procsZWGI ssZ[E] := addop W ssZ[] := addopW ssZ[C] := mOlopWGIN ssZ[_] := mOlop W ssZ[(] := lparentW ssZ[)] := rparentWGK/ ssZ[] := otPersZ W ssZ[=] := relopW ssZ[ ] := otPersZWGK1 ssZ[,] := comma W ssZ[.] := periodW ssZ[]:= otPersZWGKF ssZ[[] := lbrac W ssZ[]] := rbracW ssZ[:] := colonWGKG ssZ[\] := arroY W ssZ[] := relopW ssZ[+] := relopWGKH ssZ[W] := semicolonWGKI end (CsZmbolsC) WGKKGKL procedOre ratorsWGK ?ar i: integerWGKN beginGL/ Sor i := 1 to GI (Cnr oS res YordsC) do rop[i] := noopW
GL1 rop[I] := inopW rop[1/] := idi?W rop[11] := imodWGLF rop[K] := oropW rop[1G] := andopWGLG Sor i := ordmincPar to ordmaXcPar do sop[cPr(i)] := noopWGLH sop[E] := plOsW sop[] := minOsW sop[C] := mOlW sop[_] := rdi?WGLI sop[=] := eopW sop[] := ltopW sop[+] := gtopWGLK end (CratorsC) WGLLGL procedOre procmnemonicsWGLN beginG/ sna[ 1] := getW sna[ F] := pOtW sna[ G] := rdiW sna[ H] := rdrWG1 sna[ I] := rdcW sna[ K] := YriW sna[ L] := YroW sna[ ] := YrrWGF sna[ N] := YrcW sna[1/] := YrsW sna[11] := paW sna[1F] := neYWGG sna[1G] := rstW sna[1H] := elnW sna[1I] := sinW sna[1K] := cosWGH sna[1L] := eXpW sna[1] := stW sna[1N] := logW sna[F/] := atnWGI sna[F1] := rlnW sna[FF] := YlnW sna[FG] := sa?WGK end (CprocmnemonicsC) W
8/18/2019 APUNTES2-Pasados a Word.DOC
64/72
64
Analizador Léxico
GLG procedOre instrmnemonicsWGN beginGN/ mn[ /] := abiW mn[ 1] := abrW mn[ F] := adiW mn[ G] := adrWGN1 mn[ H] := andW mn[ I] := diSW mn[ K] := d?iW mn[ L] := d?rWGNF mn[ ] := eoSW mn[ N] := SloW mn[1/] := SltW mn[11] := innW
GNG mn[1F] := intW mn[1G] := iorW mn[1H] := modW mn[1I] := mpiWGNH mn[1K] := mprW mn[1L] := ngiW mn[1] := ngrW mn[1N] := notWGNI mn[F/] := oddW mn[F1] := sbiW mn[FF] := sbrW mn[FG] := sgsWGNK mn[FH] := siW mn[FI] := srW mn[FK] := stoW mn[FL] := trcW
GNL mn[F] := OniW mn[FN] := stpW mn[G/] := cspW mn[G1] := decWGN mn[GF] := entW mn[GG] := S`pW mn[GH] := incW mn[GI] := indWGNN mn[GK] := iXaW mn[GL] := laoW mn[G] := lcaW mn[GN] := ldoWGN// mn[H/] := mo?W mn[H1] := mstW mn[HF] := retW mn[HG] := sroWGN/1 mn[HH] := X`pW mn[HI] := cPW mn[HK] := cOpW mn[HL] := eOWGN/F mn[H] := geW mn[HN] := grtW mn[I/] := ldaW mn[I1] := ldcWGN/G mn[IF] := leW mn[IG] := lesW mn[IH] := lodW mn[II] := neWGN/H mn[IK] := strW mn[IL] := O`pW mn[I] := ordW mn[IN] := cPrWGN/I mn[K/] := O`cWGN/K end (CinstrmnemonicsC) WGN/LGN/ procedOre cPartZpesWGN/N ?ar i : integerWGN1/ beginGN11 Sor i := ordmincPar to ordmaXcPar do cPartp[cPr(i)] := illegalWGN1F cPartp[a] := letter WGN1G cPartp[b] := letter W cPartp[c] := letter WGN1H cPartp[d] := letter W cPartp[e] := letter WGN1I cPartp[S] := letter W cPartp[g] := letter WGN1K cPartp[P] := letter W cPartp[i] := letter WGN1L cPartp[`] := letter W cPartp[] := letter WGN1 cPartp[l] := letter W cPartp[m] := letter WGN1N cPartp[n] := letter W cPartp[o] := letter WGNF/ cPartp[p] := letter W cPartp[] := letter WGNF1 cPartp[r] := letter W cPartp[s] := letter WGNFF cPartp[t] := letter W cPartp[O] := letter WGNFG cPartp[?] := letter W cPartp[Y] := letter WGNFH cPartp[X] := letter W cPartp[Z] := letter WGNFI cPartp[>] := letter W cPartp[/] := nOmber WGNFK cPartp[1] := nOmber W cPartp[F] := nOmber WGNFL cPartp[G] := nOmber W cPartp[H] := nOmber W
GNF cPartp[I] := nOmber W cPartp[K] := nOmber WGNFN cPartp[L] := nOmber W cPartp[] := nOmber WGNG/ cPartp[N] := nOmber W cPartp[E] := special WGNG1 cPartp[] := special W cPartp[C] := special WGNGF cPartp[_] := special W cPartp[(] := cPlparenWGNGG cPartp[)] := special W cPartp[] := special WGNGH cPartp[=] := special W cPartp[ ] := cPspace WGNGI cPartp[,] := special W cPartp[.] := cPperiodWGNGK cPartp[]:= cPstrOoW cPartp[[] := special WGNGL cPartp[]] := special W cPartp[:] := cPcolon WGNG cPartp[\] := special W cPartp[W] := special WGNGN cPartp[] := cPlt W cPartp[+] := cPgt WGNH/ ordint[/] := /W ordint[1] := 1W ordint[F] := FWGNH1 ordint[G] := GW ordint[H] := HW ordint[I] := IWGNHF ordint[K] := KW ordint[L] := LW ordint[] := WGNHG ordint[N] := NW
8/18/2019 APUNTES2-Pasados a Word.DOC
65/72
65
Analizador Léxico
GNHH endWGNHIGNHK procedOre initdXWGNHL beginGNH cdX[ /] := /W cdX[ 1] := /W cdX[ F] := 1W cdX[ G] := 1WGNHN cdX[ H] := 1W cdX[ I] := 1W cdX[ K] := 1W cdX[ L] := 1W
GNI/ cdX[ ] := /W cdX[ N] := /W cdX[1/] := /W cdX[11] := 1WGNI1 cdX[1F] := 1W cdX[1G] := 1W cdX[1H] := 1W cdX[1I] := 1WGNIF cdX[1K] := 1W cdX[1L] := /W cdX[1] := /W cdX[1N] := /WGNIG cdX[F/] := /W cdX[F1] := 1W cdX[FF] := 1W cdX[FG] := /WGNIH cdX[FH] := /W cdX[FI] := /W cdX[FK] := FW cdX[FL] := /WGNII cdX[F] := 1W cdX[FN] := /W cdX[G/] := /W cdX[G1] := /WGNIK cdX[GF] := /W cdX[GG] := 1W cdX[GH] := /W cdX[GI] := /WGNIL cdX[GK] := 1W cdX[GL] := E1W cdX[G] := E1W cdX[GN] := E1WGNI cdX[H/] := FW cdX[H1] := /W cdX[HF] := /W cdX[HG] := 1WGNIN cdX[HH] := 1W cdX[HI] := /W cdX[HK] := /W cdX[HL] := 1WGNK/ cdX[H] := 1W cdX[HN] := 1W cdX[I/] := E1W cdX[I1] := E1W
GNK1 cdX[IF] := 1W cdX[IG] := 1W cdX[IH] := E1W cdX[II] := 1WGNKF cdX[IK] := 1W cdX[IL] := /W cdX[I] := /W cdX[IN] := /WGNKG cdX[K/] := /WGNKH pdX[ 1] := 1W pdX[ F] := 1W pdX[ G] := FW pdX[ H] := FWGNKI pdX[ I] := FW pdX[ K] := GW pdX[ L] := GW pdX[ ] := GWGNKK pdX[ N] := GW pdX[1/] := HW pdX[11] := /W pdX[1F] := FWGNKL pdX[1G] := 1W pdX[1H] := /W pdX[1I] := /W pdX[1K] := /WGNK pdX[1L] := /W pdX[1] := /W pdX[1N] := /W pdX[F/] := /WGNKN pdX[F1] := 1W pdX[FF] := 1W pdX[FG] := 1WGNL/ endWGNL1GNLF begin (CinittablesC)GNLG resYordsW sZmbolsW ratorsWGNLH instrmnemonicsW procmnemonicsWGNLI cPartZpesW initdXWGNLK end (CinittablesC) WGNLLGNL beginGNLN (Cinitiali>eC)GN/ (CCCCCCCCCCCC)GN1 initscalarsW initsetsW inittablesWGNFGNG (Center standard names and standard tZpes:C)GNH (CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC)
GNI le?el := /W top := /WGNK YitP displaZ[/] doGNL begin Sname := nilW Slabel := nilW occOr := blc endWGN enterstdtZpesW stdnamesW entstdnamesW enterOndeclWGNN top := 1W le?el := 1WGNN/ YitP displaZ[1] doGNN1 begin Sname := nilW Slabel := nilW occOr := blc endWGNNFGNNGGNNHGNNI (Ccompile:C ) reYrite(prr)W (C comment tPis oOt YPen compiling YitP pcom C)GNNK (CCCCCCCCCC)GNNL insZmbolWGNN programme(blocbegsZsEstatbegsZs[casesZ])WGNNNH/// end.
8/18/2019 APUNTES2-Pasados a Word.DOC
66/72
66
Analizador Léxico
8/18/2019 APUNTES2-Pasados a Word.DOC
67/72
67
Analizador Léxico
LEX:
- LE# E+/, *+ 69, *,*9/, 6+,, ,, , 7*9*,9 ,6/B/, * ,9,,*+ H+.E+/6,*+ 9+/6 69 ,9,, H , ,/ * 69, *+*,9 *
+;*9+) *9 , * +/, * **+9*+ *76,*+.E 7,, 6*9/* LE# *+ 69, *+*,9 * 69 ,9,, H? 9++/*9/* *9 69
9@69/ * **+9*+ *76,*+? @69/ 9 69, ,9 ,, ,, **+9 *76,. L, ,9+*B 69, ,/* * 7 6* +*B *@*6/,, + +* *9* 69 +;
8/18/2019 APUNTES2-Pasados a Word.DOC
68/72
68
Analizador Léxico
DEFINICIONES AU#ILIARES
E 7,, 6*9/* LE# 9+/, * + ,/*+? 69, +*6*9, * =*99*+ ,6,*+=+*76, 69, +*6*9, * =*7,+ * /,+,9=. L,+ *99*+ ,6,*+ +9 +*6*9,+ *, ,
1 = #1
2 = #2 . . .n = #n
D +9 9
8/18/2019 APUNTES2-Pasados a Word.DOC
69/72
69
Analizador Léxico
9* ,, " *+ 69, **+9 *76, ,,, =,/9= (,//*9)? +
8/18/2019 APUNTES2-Pasados a Word.DOC
70/72
70
Analizador Léxico
D,*+ 69, *+*,9 LE# ,, *+/+ +;*9? , *9*. T,E T8;5';CAB
BEK)N { re$/rn 1 }EN { re$/rn 2 }) { re$/rn : }
(EN { re$/rn ; }EL&E { re$/rn < }
le$ra8le$radFCi$o9H { LEVAL = )N&(ALL89O re$/rn }dFCi$oP { LEVAL = )N&(ALL89O re$/rn }J { LEVAL = 1O re$/rn ? }J= { LEVAL = 2O re$/rn ? }= { LEVAL = :O re$/rn ? }
J> { LEVAL = ;O re$/rn ? }> { LEVAL = = { LEVAL = O re$/rn ? }
S697,+ 6* , ,9,, H *+6/,9/* * ,+ *7,+ ,9/**+ * *7, *9/,, %EGIN +*76
8/18/2019 APUNTES2-Pasados a Word.DOC
71/72
71
Analizador Léxico
",, * +76*9/* *@*? +697,+ 6* [ +9 + + *+ ,,/**+ *;+.A696* * ,/9 [ 9* 9 * * ,B/*? *+/* 9 *+ * ,/9 6* 9* 9 *
*@ B+ ,7 * , *9/,,. E9/9*+ , *+/,/*7, LE# 6* 6*
8/18/2019 APUNTES2-Pasados a Word.DOC
72/72
Analizador Léxico
RE*ERENCIAS >I>LIO7R8*ICAS:
A ''A? A. . ,9 J. D. U,9. "9*+ C* D*+79.A+9-]*+*: "6