APUNTES2-Pasados a Word.DOC

download APUNTES2-Pasados a Word.DOC

of 72

Transcript of APUNTES2-Pasados a Word.DOC

  • 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