Compila 2en1

download Compila 2en1

of 34

Transcript of Compila 2en1

  • 8/7/2019 Compila 2en1

    1/34

    GRUPO DE COMPUTADORES Y TIEMPO REAL Javier Gutirrez, Michael Gonzlez 1

    FACULTAD DE CIENCIAS 24/nov/08

    UNIVERSIDAD DE CANTABRIA

    Lenguajes de alto nivel ycompiladores

    Introduccin a la tecnologade compiladores

    4

    GRUPO DE COMPUTADORES Y TIEMPO REAL Javier Gutirrez, Michael Gonzlez 2

    FACULTAD DE CIENCIAS 24/nov/08

    UNIVERSIDAD DE CANTABRIA

    Notas:

    1. Compiladores

    2. Anlisis lxico

    3. Anlisis sintctico

    4. Conclusin

  • 8/7/2019 Compila 2en1

    2/34

    GRUPO DE COMPUTADORES Y TIEMPO REAL Javier Gutirrez, Michael Gonzlez 3

    FACULTAD DE CIENCIAS 24/nov/08

    UNIVERSIDAD DE CANTABRIA1. Compiladores

    Un compilador es un programa que lee un programa escrito

    en un lenguaje, y lo traduce a un programa equivalente en otrolenguaje.

    Durante la traduccin el compilador informa de la presenciade errores en el programa fuente.

    compiladorprogramaprograma

    mensajes

    de error

    en lenguajefuente

    en lenguajedestino

    GRUPO DE COMPUTADORES Y TIEMPO REAL Javier Gutirrez, Michael Gonzlez 4

    FACULTAD DE CIENCIAS 24/nov/08

    UNIVERSIDAD DE CANTABRIA

    Notas:

    Existen multitud de compiladores para un gran nmero de lenguajes fuente y lenguajes destino.

    Los compiladores se utilizan tanto para lenguajes de programacin tradicionales, como Fortran, C oAda, o para aplicaciones especializadas como por ejemplo lenguajes de descripcin de hardware,lenguajes de programacin de robots, etc.

    Los primeros compiladores aparecieron a primeros de los aos 50, como resultado de proyectospara la traduccin de frmulas aritmticas en cdigo mquina.

    Los primeros compiladores eran costosos de implementar. Hoy en da existen tcnicas sistemticaspara construir compiladores que hacen ms sencillo el proceso.

  • 8/7/2019 Compila 2en1

    3/34

    GRUPO DE COMPUTADORES Y TIEMPO REAL Javier Gutirrez, Michael Gonzlez 5

    FACULTAD DE CIENCIAS 24/nov/08

    UNIVERSIDAD DE CANTABRIAAnlisis y sntesis

    Compilacin

    Anlisis Sntesis

    Lxico: Sintctico: Generacintokens instrucciones de cdigo

    Semntico:significado

    GRUPO DE COMPUTADORES Y TIEMPO REAL Javier Gutirrez, Michael Gonzlez 6

    FACULTAD DE CIENCIAS 24/nov/08

    UNIVERSIDAD DE CANTABRIA

    Notas:

    Existen dos partes importantes en la compilacin:

    Etapa de anlisis: Parte el programa fuente en sus piezas constituyentes y crea unarepresentacin intermedia del mismo.

    - Anlisis lxico: separacin de cada elemento componente del programa (token)

    - Anlisis sintctico: separacin de cada instruccin o sentencia del lenguaje, que agrupa

    varios componentes lxicos o tokens.- Anlisis semntico: Se revisa el programa fuente para comprobar que las reglas semnticas

    del lenguaje (aquellas relativas al significado de las distintas instrucciones) se cumplen. Unejemplo de regla semntica es la comprobacin de tipos en las expresiones.

    Etapa de sntesis: Construye el programa destino deseado a partir de una descripcin en unlenguaje de representacin intermedia.

    De las dos partes de la compilacin, la sntesis es la que requiere las tcnicas ms especializadas,aunque en los lenguajes de programacin modernos (Ada, C++, Java) la parte de anlisis estalcanzando una gran complejidad.

    Durante la fase de anlisis la estructura del programa se guarda en una estructura de datos especial

    que suele ser un rbol: el rbol sintctico.

  • 8/7/2019 Compila 2en1

    4/34

    GRUPO DE COMPUTADORES Y TIEMPO REAL Javier Gutirrez, Michael Gonzlez 7

    FACULTAD DE CIENCIAS 24/nov/08

    UNIVERSIDAD DE CANTABRIAAnlisis y sntesis (cont.)

    Algunas herramientas presentan tambin una etapa de

    anlisis:- Editores orientados al lenguaje

    - Impresin con formato (pretty printer)

    - Comprobadores estticos de programas

    - Intrpretes

    GRUPO DE COMPUTADORES Y TIEMPO REAL Javier Gutirrez, Michael Gonzlez 8

    FACULTAD DE CIENCIAS 24/nov/08

    UNIVERSIDAD DE CANTABRIA

    Notas:

    La etapa de anlisis se encuentra en muchas herramientas adems de los compiladores:

    Editores orientados al lenguaje: Adems de facilitar la introduccin de texto por el tecladoanaliza el programa fuente y proporciona la estructura y jerarqua necesarias. Por ejemplo,puede comprobar que la sintaxis es correcta, proporcionar palabras clave, etc.

    Impresin con formato (Pretty Printer): Analiza el programa fuente y lo imprime de forma quela estructura del programa aparece claramente visible.

    Comprobadores estticos: Permiten analizar un programa y descubrir errores potenciales sinnecesidad de ejecutar el programa. Por ejemplo, se pueden detectar zonas de cdigo queno se ejecutarn nunca, variables no inicializadas, errores sintcticos, comprobacin de tipos,etc.

    Intrpretes: En lugar de producir un programa destino mediante un proceso de traduccin, elintrprete ejecuta las operaciones que especifica el programa fuente.

  • 8/7/2019 Compila 2en1

    5/34

    GRUPO DE COMPUTADORES Y TIEMPO REAL Javier Gutirrez, Michael Gonzlez 9

    FACULTAD DE CIENCIAS 24/nov/08

    UNIVERSIDAD DE CANTABRIAFases de un compilador

    AnalizadorLxico

    AnalizadorSintctico

    AnalizadorSemntico

    Generadorcd. interm.

    Generador

    de cd. objeto

    Optimizadorde cdigo

    Programa

    Fuente

    Tokens rbol

    Sintctico

    Cdigo

    IntermedioCdigo

    Objeto

    Tabla deSmbolos

    Tabla deErrores

    rbol Sintctico

    Cdigo Intermedio

    GRUPO DE COMPUTADORES Y TIEMPO REAL Javier Gutirrez, Michael Gonzlez 10

    FACULTAD DE CIENCIAS 24/nov/08

    UNIVERSIDAD DE CANTABRIA

    Notas:

    En cada fase de un compilador se transforma el programa fuente de una representacin a otra. Lastres primeras fases forman la etapa de anlisis, mientras las tres ltimas forman la etapa desntesis.

    La tabla de smbolos es una estructura de datos que almacena los identificadores utilizados en elprograma fuente as como los atributos de cada identificador. Estos atributos pueden proporcionar

    informacin sobre el tipo del identificador, su tamao, su rango de visibilidad, sus argumentos (encaso de procedimientos), etc.

    La tabla de smbolos tiene operaciones para encontrar un identificador rpidamente, y leer susatributos o modificarlos. Asimismo, permite introducir nuevos identificadores. Cada una de las fasesde compilacin puede realizar modificaciones de los registros de una tabla de smbolos,generalmente aadiendo ms atributos a medida que se van conociendo.

    El manejador de errores es un mdulo que gestiona las acciones a realizar por cada uno de loserrores encontrados en las diferentes fases de la compilacin. En general, es deseable que elmanejador de errores permita la continuacin del proceso de compilacin, con objeto de permitirencontrar ms errores en el programa. Las fases de anlisis sintctico y semntico sonhabitualmente las que ms errores encuentran.

  • 8/7/2019 Compila 2en1

    6/34

    GRUPO DE COMPUTADORES Y TIEMPO REAL Javier Gutirrez, Michael Gonzlez 11

    FACULTAD DE CIENCIAS 24/nov/08

    UNIVERSIDAD DE CANTABRIAEjemplo de anlisis y sntesis

    posicion := inicial + velocidad*60

    Analizador Lxico

    id1:= id2+ id3*60

    Analizador Sintctico

    :=

    id1 +id2

    id3 60

    *

    Tabla de smbolos

    1 posicion ...

    2 inicial ...

    3 velocidad ...

    4 ... ...

    GRUPO DE COMPUTADORES Y TIEMPO REAL Javier Gutirrez, Michael Gonzlez 12

    FACULTAD DE CIENCIAS 24/nov/08

    UNIVERSIDAD DE CANTABRIA

    Notas:

    Analizador Semntico

    :=id1 +

    id2id3 conv. a real

    *

    Generador de cdigo intermedio

    60

  • 8/7/2019 Compila 2en1

    7/34

    GRUPO DE COMPUTADORES Y TIEMPO REAL Javier Gutirrez, Michael Gonzlez 13

    FACULTAD DE CIENCIAS 24/nov/08

    UNIVERSIDAD DE CANTABRIAEjemplo (cont.)

    Generador de cdigo intermedio

    temp1 := conv_a_real(60)temp2 := id3 * temp1temp3 := id2 + temp2id1 := temp3

    Optimizador de cdigo

    temp1 := id3 * 60.0

    id1 := id2 + temp1

    Generador de Cdigo

    GRUPO DE COMPUTADORES Y TIEMPO REAL Javier Gutirrez, Michael Gonzlez 14

    FACULTAD DE CIENCIAS 24/nov/08

    UNIVERSIDAD DE CANTABRIA

    Notas:

    Generador de Cdigo

    MOVF id3 , R2MULF #60.0 , R2MOVF id2 , R1ADDF R2 , R1MOVF R1 , ID1

  • 8/7/2019 Compila 2en1

    8/34

    GRUPO DE COMPUTADORES Y TIEMPO REAL Javier Gutirrez, Michael Gonzlez 15

    FACULTAD DE CIENCIAS 24/nov/08

    UNIVERSIDAD DE CANTABRIAEl contexto de un compilador

    Ensamblador

    Preprocesador

    Enlazador

    Compilador

    Programa fuente

    Programa fuente final

    Cdigo Ensamblador

    Objetos enCdigo Mquina

    Programa final

    Libreras

    GRUPO DE COMPUTADORES Y TIEMPO REAL Javier Gutirrez, Michael Gonzlez 16

    FACULTAD DE CIENCIAS 24/nov/08

    UNIVERSIDAD DE CANTABRIA

    Notas:

    Adems de un compilador, otros programas pueden ser necesarios para crear un programa destinoejecutable:

    Preprocesador: Un programa fuente puede estar dividido en mdulos almacenados en ficherosdiferentes. La tarea de recopilar el cdigo fuente almacenado en estos ficheros puede serencomendada a un preprocesador. Asimismo, un preprocesador puede expandir las macrosconvirtindolas en instrucciones ejecutables.

    Ensamblador: Muchos compiladores proporcionan el programa final en lenguaje ensamblador.Para poder obtener un programa ejecutable es preciso ensamblar este programa final con unensamblador convencional.

    Enlazador.Esta herramienta toma cdigo mquina relocalizable de los diferentes objetoscompilados y de librera, modifica las direcciones relocalizables para situarlas a los valoresabsolutos adecuados, y crea el programa ejecutable.

  • 8/7/2019 Compila 2en1

    9/34

    GRUPO DE COMPUTADORES Y TIEMPO REAL Javier Gutirrez, Michael Gonzlez 17

    FACULTAD DE CIENCIAS 24/nov/08

    UNIVERSIDAD DE CANTABRIA2. Anlisis lxico

    Convierte una cadena de caracteres que conforma el

    programa fuente en un grupo de palabras, que sonsecuencias de caracteres con significado propio. Ejemplo:

    if Existe thenposicion:=60;end if;

    1. la palabra reservada if2. la expresin booleana Existe3. la palabra reservada then4. el identificador posicion5. el smbolo de asignacin :=6. la constante 607. el final de instruccin ;8. la palabra reservada end

    9. la palabra reservada if10. el final de instruccin ;

    GRUPO DE COMPUTADORES Y TIEMPO REAL Javier Gutirrez, Michael Gonzlez 18

    FACULTAD DE CIENCIAS 24/nov/08

    UNIVERSIDAD DE CANTABRIA

    Notas:

    Durante el anlisis lxico el programa fuente, que est constituido por una cadena de caracteres, selee de principio a fin y se descompone en un conjunto de palabras, cada una de ellas con significadopropio.

    Estas palabras son identificadas y clasificadas en diferentes grupos. Por ejemplo, las palabras deun lenguaje de programacin pueden ser identificadores, constantes, operadores, palabras

    reservadas del lenguaje, etc.

    Los espacios en blanco que separan los caracteres que forman las palabras son normalmenteeliminados durante la fase de anlisis lxico. Tambin lo son otros separadores como tabuladores,saltos de lnea, etc. Tambin se pueden eliminar en esta fase los comentarios.

    Los errores detectados en la fase de anlisis lxico suelen ser escasos, porque en esta fase sedispone de muy poca informacin sobre el programa. Un error que s se puede detectar es la lecturade un carcter que no corresponde al alfabeto permitido para el lenguaje.

  • 8/7/2019 Compila 2en1

    10/34

    GRUPO DE COMPUTADORES Y TIEMPO REAL Javier Gutirrez, Michael Gonzlez 19

    FACULTAD DE CIENCIAS 24/nov/08

    UNIVERSIDAD DE CANTABRIA

    Reconocimiento de lexemas yla tabla de smbolos

    Para distinguir unas palabras (o lexemas) de otras se utilizan

    patronesde reconocimiento.

    En muchos casos los patrones se describen medianteexpresiones regulares.

    Los identificadores pueden tambin sustituirse porreferencias a la tabla de smbolos, para una utilizacin mseficiente.

    La tabla de smbolos asocia a cada identificador un nmero,as como una serie de atributos (tipo de datos, etc.).

    GRUPO DE COMPUTADORES Y TIEMPO REAL Javier Gutirrez, Michael Gonzlez 20

    FACULTAD DE CIENCIAS 24/nov/08

    UNIVERSIDAD DE CANTABRIA

    Notas:

    Para distinguir unas palabras de otras durante el anlisis lxico, se utilizan determinados patronesde reconocimiento. Por ejemplo, en una expresin aritmtica, los smbolos de operadores, como +,-, *, /, son reconocidos como lexemas, y separan al resto de los lexemas, que a su vez puedenser palabras (nombres de variables) o nmeros.

    Los patrones de reconocimiento se suelen describir utilizando diversas notaciones. La ms popular

    son las expresiones regulares, que veremos a continuacin.

    En ocasiones, cuando el analizador lxico encuentra un identificador lo introduce en la tabla desmbolos. En este caso, la representacin del programa que produce el analizador lxico presentareferencias a los identificadores almacenados en la tabla de smbolos.

  • 8/7/2019 Compila 2en1

    11/34

    GRUPO DE COMPUTADORES Y TIEMPO REAL Javier Gutirrez, Michael Gonzlez 21

    FACULTAD DE CIENCIAS 24/nov/08

    UNIVERSIDAD DE CANTABRIAExpresiones regulares

    Permiten describir conjuntos de strings. El uso ms habitual

    es para comprobar si un string dado se corresponde con unpatrn, descrito mediante una expresin regular

    Notacin general para REs:

    Smbolo Descripcin

    | Or (alternativa)

    () Agrupar una subexpresin

    * 0 ms veces

    ? 0 1 vez

    + 1 o ms veces

    {n,m} entre n y m veces

    GRUPO DE COMPUTADORES Y TIEMPO REAL Javier Gutirrez, Michael Gonzlez 22

    FACULTAD DE CIENCIAS 24/nov/08

    UNIVERSIDAD DE CANTABRIA

    Notas:

    Las expresiones regulares permiten definir conjuntos de strings. Con ellos, podemos comprobar siuna palabra cumple un determinado patrn de reconocimiento.

    Por ejemplo, un identificador Ada es una palabra que empieza con una letra, y luego tiene letras,cifras numricas, o el carcter subrayado. Esto se expresa as:

    identificador=letra(letra | dgito | _)*

    Donde:

    las letras corresponden al conjunto [a-zA-Z]

    los dgitos al conjunto [0-9]

    y el carcter subrayado se expresa como l mismo.

  • 8/7/2019 Compila 2en1

    12/34

    GRUPO DE COMPUTADORES Y TIEMPO REAL Javier Gutirrez, Michael Gonzlez 23

    FACULTAD DE CIENCIAS 24/nov/08

    UNIVERSIDAD DE CANTABRIA

    Reglas para describirexpresiones regulares

    Descripcin Sintaxis

    expresar un carcter especial x \x o x

    a seguido de b a/b

    carcter a al final de una lnea a$

    carcter a al principio de una lnea ^a

    caracteres a, b c [abc]

    cualquier carcter excepto a, b c [^abc]

    caracteres entre A y E [A-E]

    tabulador - nueva lnea \t - \n

    cualquier carcter excepto \n .

    definicin regular nombre exp_regular

    GRUPO DE COMPUTADORES Y TIEMPO REAL Javier Gutirrez, Michael Gonzlez 24

    FACULTAD DE CIENCIAS 24/nov/08

    UNIVERSIDAD DE CANTABRIA

    Notas:

    Ejemplos de expresiones regulares

    signo_opcnal(+ | -)?

    digito[0-9]

    digitos{digito}+mantisa_real{signo_opcnal} {digitos} . {digitos}

    exp_opcnal(E {signo_opcnal} {digitos})?

    numero_real{mantisa_real} {exp_opcnal}

  • 8/7/2019 Compila 2en1

    13/34

    GRUPO DE COMPUTADORES Y TIEMPO REAL Javier Gutirrez, Michael Gonzlez 25

    FACULTAD DE CIENCIAS 24/nov/08

    UNIVERSIDAD DE CANTABRIA

    El constructor deanalizadores lxicos lex

    Lex es un constructor de analizadores lxicos.

    Opera mediante una descripcin de la gramtica hechamediante expresiones regulares.

    Genera un programa en lenguaje C que sirve como analizadorlxico.

    Existe un equivalente en lenguaje Ada: aflex

    http://www.ics.uci.edu/~arcadia/Aflex-Ayacc/aflex-ayacc.html

    GRUPO DE COMPUTADORES Y TIEMPO REAL Javier Gutirrez, Michael Gonzlez 26

    FACULTAD DE CIENCIAS 24/nov/08

    UNIVERSIDAD DE CANTABRIA

    Notas:

    Lex es una herramienta que se ha utilizado para especificar analizadores lxicos para una variedadde lenguajes. Normalmente se le llama compilador Lex a la herramienta, y lenguaje Lex a susespecificaciones de entrada.

    Existe un equivalente a lex en Ada, denominado aflex. La herramienta lex genera un programaC que sirve como analizador lxico; aflex genera tambin un analizador lxico, pero en lenguaje

    Ada.

  • 8/7/2019 Compila 2en1

    14/34

    GRUPO DE COMPUTADORES Y TIEMPO REAL Javier Gutirrez, Michael Gonzlez 27

    FACULTAD DE CIENCIAS 24/nov/08

    UNIVERSIDAD DE CANTABRIAUso de la herramienta aflex

    name.l

    fuente lex

    aflex

    name.a

    programa pral Ada

    name_dfa.a

    paquete Ada

    name_io.a

    paquete ada

    name

    analizador lxico

    compilador

    fuente

    en el lenguaje origen

    al analizadorsintctico

    GRUPO DE COMPUTADORES Y TIEMPO REAL Javier Gutirrez, Michael Gonzlez 28

    FACULTAD DE CIENCIAS 24/nov/08

    UNIVERSIDAD DE CANTABRIA

    Notas:

    Generalmente, lex o aflex se utilizan en la forma indicada en la figura de arriba. Primero se preparauna especificacin de la gramtica en lenguaje Lex. Posteriormente, se utiliza la herramienta paraproducir el cdigo fuente del programa analizador lxico. Este cdigo fuente debe ser compilado, loque produce el analizador lxico. Con el analizador lxico resultante, se puede realizar el anlisislxico de un cdigo fuente tantas veces como sea necesario.

    La herramienta aflex crea ficheros Ada terminados en .a, que por tanto no se adhieren a lasconvenciones de nombres del compilador gnat. Adems, crea los paquetes en un solo fichero, conla especificacin y el cuerpo en el mismo fichero. Esto tambin es contrario a las reglas del gnat.

    Para estas situaciones, existe una herramienta llamada gnatchop, que permite crear los ficheroscon los nombres apropiados, a partir de otros ficheros. En el caso del ejemplo de la figura, habrque ejecutar:

    gnatchop -w name.agnatchop -w name_dfa.agnatchop -w name_io.a

    Donde name es el nombre de la especificacin lex original. Luego hay que construir el ejecutable:

    gnatmake name

  • 8/7/2019 Compila 2en1

    15/34

    GRUPO DE COMPUTADORES Y TIEMPO REAL Javier Gutirrez, Michael Gonzlez 29

    FACULTAD DE CIENCIAS 24/nov/08

    UNIVERSIDAD DE CANTABRIAEspecificaciones en lex

    Constan de tres partes:

    definiciones%%

    reglas de traduccin

    %%

    cdigo auxiliar

    Las definicionesson definiciones regulares que toman laforma:nombre expresin_regular

    Las reglas de traduccinse describen de la forma:patrn {accin}

    Patrnes una expresin regular; Accines un trozo de cdigo

    GRUPO DE COMPUTADORES Y TIEMPO REAL Javier Gutirrez, Michael Gonzlez 30

    FACULTAD DE CIENCIAS 24/nov/08

    UNIVERSIDAD DE CANTABRIA

    Notas:

    Las especificaciones en Lex constan de las tres partes descritas arriba: definiciones, reglas detraduccin, y cdigo auxiliar en C (o Ada en el caso de aflex).

    Las definiciones son definiciones regulares. Por ejemplo:

    letra [a-zA-Z]

    digito [0-9]

    identificador {letra}({letra}|{digito}|_)*

    Las reglas de traduccin describen patrones y acciones a realizar en caso de que en el texto deentrada del analizador lxico se encuentre ese patrn. Las acciones son fragmentos de cdigo C,en el caso de lex, o Ada, en el caso de aflex. Por ejemplo:

    {identificador} {Put_Line (Encontrado un identificador);}

    {digito}+ {Put_Line (Encontrado un nmero);}

    En los nombres de las definiciones se distinguen maysculas de minsculas. Por ejemplo, no es lomismo {digito} que {Digito}.

  • 8/7/2019 Compila 2en1

    16/34

    GRUPO DE COMPUTADORES Y TIEMPO REAL Javier Gutirrez, Michael Gonzlez 31

    FACULTAD DE CIENCIAS 24/nov/08

    UNIVERSIDAD DE CANTABRIAEstructura del cdigo auxiliar

    El cdigo auxiliar se escribe con la estructura

    seccin inicial de cdigo##

    seccin final de cdigo

    El cdigo Ada generado tendr la estructura siguiente:with Name_Dfa, Name_IO, Text_IO;seccin inicial de cdigo (debe incluir el tipo Token)

    function YYLex return Token isbegin

    -- definida por la herramienta lex

    end;

    seccin final de cdigo

    GRUPO DE COMPUTADORES Y TIEMPO REAL Javier Gutirrez, Michael Gonzlez 32

    FACULTAD DE CIENCIAS 24/nov/08

    UNIVERSIDAD DE CANTABRIA

    Notas:

    Un ejemplo de cdigo auxiliar:procedure Name is

    type Token is (End_Of_Input, Error);Tok : Token;

    ##

    beginwhile Tok /= End_of_Input loop

    Tok:=YYLex;end loop;

    end Name;

    La funcin YYLex se crea automticamente, y se coloca en el lugar donde se han escrito loscaracteres ##. Para que esta funcin sea vlida, es imprescindible que en la seccin inicial de cdigose haya creado el tipo enumerado Token, con al menos los dos valores End_Of_Input y Error.

  • 8/7/2019 Compila 2en1

    17/34

    GRUPO DE COMPUTADORES Y TIEMPO REAL Javier Gutirrez, Michael Gonzlez 33

    FACULTAD DE CIENCIAS 24/nov/08

    UNIVERSIDAD DE CANTABRIA

    Aspectos a tener en cuenta enla especificacin lex

    El texto que verifica el patrn de una regla de traduccin se

    puede obtener con la funcin predefinida YYText.

    Es habitual que el cdigo de una regla de traduccin acabecon una instruccin:

    return valor;

    donde valor es un valor del tipo enumerado Token, creadoen la seccin inicial de cdigo auxiliar. Esto es especialmentehabitual si se enlaza lex conyacc (analizador sintctico)

    Cuando un string puede cumplir dos reglas de traduccin, seelige:1. El string ms largo

    2. Si son iguales, la regla que aparece en primer lugar

    GRUPO DE COMPUTADORES Y TIEMPO REAL Javier Gutirrez, Michael Gonzlez 34

    FACULTAD DE CIENCIAS 24/nov/08

    UNIVERSIDAD DE CANTABRIA

    Notas:

    Un aspecto de importancia al escribir las reglas de traduccin es cmo se resuelven lasambigedades. Por ejemplo, si tenemos las definiciones

    lazo lazolazo_while lazo_while

    el string lazo_while cumplira las dos definiciones.

    En lex las ambigedades se resuelven usando siempre el string ms largo de los que cumplen variasreglas. Si hay varias reglas que son cumplidas por strings de la misma longitud, entonces se eligela regla colocada en primer lugar.

  • 8/7/2019 Compila 2en1

    18/34

    GRUPO DE COMPUTADORES Y TIEMPO REAL Javier Gutirrez, Michael Gonzlez 35

    FACULTAD DE CIENCIAS 24/nov/08

    UNIVERSIDAD DE CANTABRIAEjemplo con lex

    El siguiente ejemplo convierte un texto con insultos en otro

    con palabras ms correctas :-)

    Especificacin Lex, en el ficherobien_educado.l:

    -- definicionesespacio " "|\n

    palabra [a-zA-Z]+{espacio}tonto ("tonto"{espacio})|("ignorante"{espacio})tonta "tonta"{espacio}tonto_de "tonto"{espacio}"de"l?{espacio}{palabra}idiota "idiota"{espacio}

    nueva_linea \n%%

    GRUPO DE COMPUTADORES Y TIEMPO REAL Javier Gutirrez, Michael Gonzlez 36

    FACULTAD DE CIENCIAS 24/nov/08

    UNIVERSIDAD DE CANTABRIA

    Notas:

    -- reglas de traduccin{tonto} {Put("listo ");}{tonta} {Put("lista ");}{idiota} {Put("distinguido ");}{tonto_de} {Put("amable caballero ");}{nueva_linea} {New_Line;}

    . {Put(YYText);}

    %%

    -- cdigo auxiliar inicialwith Ada.Text_IO; Use Ada.Text_IO;procedure Bien_Educado istype Token is (end_of_input,error);tok : token;

  • 8/7/2019 Compila 2en1

    19/34

    GRUPO DE COMPUTADORES Y TIEMPO REAL Javier Gutirrez, Michael Gonzlez 37

    FACULTAD DE CIENCIAS 24/nov/08

    UNIVERSIDAD DE CANTABRIAEjemplo (cont.)

    ##

    -- cdigo auxiliar finalbegin loop

    tok:=YYLex; exit when Tok = end_of_input; end loop;end Bien_Educado;

    GRUPO DE COMPUTADORES Y TIEMPO REAL Javier Gutirrez, Michael Gonzlez 38

    FACULTAD DE CIENCIAS 24/nov/08

    UNIVERSIDAD DE CANTABRIA

    Notas:

    El ejemplo se ha utilizado para procesar el siguiente texto:

    Juan le dijo al ignorante de Pedro que no hicieracaso del tonto de baba de su hermano,ya que el idiota de el estaballamando tonta a su hermana.

    El resultado obtenido es:

    Juan le dijo al listo de Pedro que no hicieracaso del amable caballero de su hermano,ya que el distinguido de el estaballamando lista a su hermana.

  • 8/7/2019 Compila 2en1

    20/34

    GRUPO DE COMPUTADORES Y TIEMPO REAL Javier Gutirrez, Michael Gonzlez 39

    FACULTAD DE CIENCIAS 24/nov/08

    UNIVERSIDAD DE CANTABRIA3. Anlisis sintctico

    Agrupa las palabras del programa fuente en frases anidadas

    jerrquicamente con un significado comn.

    Normalmente utiliza unas reglas sintcticas para describir lagramtica del lenguaje fuente.

    Se describen habitualmente mediante gramticas sincontexto, tambin llamadas notacin BNF (Backus-NaurForm)

    Para algunos tipos de gramticas es posible construir elanalizador con herramientas automticas

    GRUPO DE COMPUTADORES Y TIEMPO REAL Javier Gutirrez, Michael Gonzlez 40

    FACULTAD DE CIENCIAS 24/nov/08

    UNIVERSIDAD DE CANTABRIA

    Notas:

    Todos los lenguajes de programacin tienen un conjunto de reglas que describen la estructurasintctica de los programas correctos. La sintaxis de las construcciones de los lenguajes deprogramacin pueden describirse mediante gramticas sin contexto (context-free grammars),tambin llamada notacin BNF (Backus-Naur Form). Las gramticas ofrecen significativas ventajastanto para los diseadores del lenguaje como para los escritores de compiladores:

    Una gramtica suministra una forma precisa y fcil de entender de la especificacin sintctica

    de un lenguaje de programacin. Para ciertas clases de gramticas, se pueden construir analizadores sintcticos con

    herramientas automticas. Adems, la construccin del analizador puede revelarambigedades gramaticales no deseadas.

    Una gramtica adecuadamente diseada aporta al lenguaje de programacin una estructuraadecuada tanto para su traduccin a cdigo objeto, como para la deteccin de errores.

    Como los lenguajes tienen una vida larga y pueden evolucionar aadindoseles nuevasconstrucciones, stas pueden ser aadidas ms fcilmente cuando la implementacinexistente est basada en una descripcin gramatical formal.

  • 8/7/2019 Compila 2en1

    21/34

    GRUPO DE COMPUTADORES Y TIEMPO REAL Javier Gutirrez, Michael Gonzlez 41

    FACULTAD DE CIENCIAS 24/nov/08

    UNIVERSIDAD DE CANTABRIA

    Interaccin entre analizadorlxico y sintctico

    analizador

    Tabla deSmbolos

    lxicoanalizadorsintctico

    ...Programa

    Fuente

    token

    get_nexttoken

    GRUPO DE COMPUTADORES Y TIEMPO REAL Javier Gutirrez, Michael Gonzlez 42

    FACULTAD DE CIENCIAS 24/nov/08

    UNIVERSIDAD DE CANTABRIA

    Notas:

    Como se ha sealado, el analizador lxico es la primera fase de un compilador. Su principal tareaes leer los caracteres de entrada y producir como salida una secuencia de tokens o lexemas, queel analizador sintctico o parser utilizar para el anlisis sintctico.

    La interaccin entre el analizador lxico y el analizador sintctico se muestra en la figura de arriba.Normalmente el analizador lxico se escribe como un subprograma del analizador sintctico, al que

    ste llama para obtener cada token.

    En el caso de las herramientas lex y yacc, el analizador lxico suele ser una funcin llamada YYLex,que retorna cada vez un dato del tipo Token diferente.

    Ambos analizadores pueden compartir una tabla de smbolos, que sirve para traducir identificadoresa nmeros, ms fciles de manejar.

  • 8/7/2019 Compila 2en1

    22/34

    GRUPO DE COMPUTADORES Y TIEMPO REAL Javier Gutirrez, Michael Gonzlez 43

    FACULTAD DE CIENCIAS 24/nov/08

    UNIVERSIDAD DE CANTABRIAGramticas sin contexto

    Una gramtica describe la estructura jerrquica de un

    lenguaje. Por ejemplo, la instruccin if

    if expresion_logica then instrucciones end if;

    se puede expresar en notacin BNF con la siguiente regla:

    instruccion_if -> if expresion then instrucciones end if;

    La gramtica tiene cuatro componentes:1. conjunto de lexemas o tokens (if, then, end)

    2. conjunto de no-terminales (expresion, instrucciones)3. conjunto de reglas, cada una describiendo un no-terminal

    4. la designacin de un no-terminal como el comienzo

    GRUPO DE COMPUTADORES Y TIEMPO REAL Javier Gutirrez, Michael Gonzlez 44

    FACULTAD DE CIENCIAS 24/nov/08

    UNIVERSIDAD DE CANTABRIA

    Notas:

    Una gramtica describe la estructura jerrquica de las construcciones de un lenguaje deprogramacin.

    Una gramtica sin contexto tiene los siguientes cuatro componentes:

    Un conjunto de lexemas o tokens, tambin denominados smbolos terminales.

    Un conjunto de elementos no terminales, que se asocian a strings, y cuyo significado se

    describe en alguna de las reglas de la gramtica

    Un conjunto de reglas de produccin, cada una de ellas constituida por un no-terminal, unaflecha (o smbolo equivalente) y una secuencia de tokens y no-terminales.

    La designacin de uno de los no-terminales como el smbolo de comienzo. Normalmente sesigue el criterio de poner en primer lugar la regla que define el no-terminal de comienzo.

    Por ejemplo, la siguiente gramtica define una expresin binaria con nmeros enteros:

    exp_simple -> exp_simple + digitoexp_simple -> exp_simple - digitoexp_simple -> digito

    digito -> 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9

  • 8/7/2019 Compila 2en1

    23/34

    GRUPO DE COMPUTADORES Y TIEMPO REAL Javier Gutirrez, Michael Gonzlez 45

    FACULTAD DE CIENCIAS 24/nov/08

    UNIVERSIDAD DE CANTABRIAHerramientayacc

    Sirve para generar analizadores sintcticos, utilizando una

    descripcin gramatical expresada con BNF

    La herramientayacc combina en la gramtica instruccionesen lenguaje C para la construccin del analizador sintctico

    Existe una herramienta similar para lenguaje Ada: ayacc

    Una descripcin ayacc tiene tres partes:

    declaraciones

    %%reglas de traduccin%%cdigo auxiliar Ada

    GRUPO DE COMPUTADORES Y TIEMPO REAL Javier Gutirrez, Michael Gonzlez 46

    FACULTAD DE CIENCIAS 24/nov/08

    UNIVERSIDAD DE CANTABRIA

    Notas:

    Yacc es una herramienta para la generacin de analizadores sintcticos o parsers. Fuedesarrollada en los aos 70 por S.C. Johnson, y est disponible junto a la herramienta lex como unautilidad estndar en los sistemas UNIX. Se ha utilizado para generar cientos de compiladores.

    La herramienta Yacc utiliza una descripcin de la gramtica mediante la notacin BNF. Para cadaregla gramatical, se pueden especificar acciones a realizar por el analizador sintctico, expresadas

    en lenguaje C. Al final, la herramienta genera un programa C, que despus de compilado y enlazadocon un analizador lxico (posiblemente producido con lex), produce el programa analizadorsintctico.

    Existe una herramienta similar denominada ayacc para lenguaje Ada. En esa herramienta lasacciones a realizar se expresan en lenguaje Ada, y el programa resultante es un programa Ada.

  • 8/7/2019 Compila 2en1

    24/34

    GRUPO DE COMPUTADORES Y TIEMPO REAL Javier Gutirrez, Michael Gonzlez 47

    FACULTAD DE CIENCIAS 24/nov/08

    UNIVERSIDAD DE CANTABRIAUso de la herramienta ayacc

    name.y

    fuente yacc

    ayacc

    name.a

    programa pral

    name_tokens.ads

    paquete Ada

    name_shift

    paquete ada

    name

    analizador lxico/sintctico

    compilador

    fuente

    lenguaje origen

    al analizadorsemntico

    name.l

    fuente lex

    ayacc

    yylex.adb

    analizador lxico

    name_goto.ads

    paquete ada

    _reduce.ads

    GRUPO DE COMPUTADORES Y TIEMPO REAL Javier Gutirrez, Michael Gonzlez 48

    FACULTAD DE CIENCIAS 24/nov/08

    UNIVERSIDAD DE CANTABRIA

    Notas:

    Generalmente, ayacc se utiliza combinado con la herramienta de generacin de analizadoreslxicos lex, en la forma indicada en la figura de arriba. Primero se prepara una especificacin de lagramtica en lenguaje ayacc, as como el analizador lxico en lex. Posteriormente, se utiliza laherramienta yacc para producir el cdigo fuente del programa analizador sintctico. Este cdigofuente debe ser compilado, lo que produce el analizador sintctico. Con el analizador sintcticoresultante, que utiliza internamente el analizador lxico para leer el texto de entrada, se puede

    realizar el anlisis lxico/sintctico de un cdigo fuente tantas veces como sea necesario.

    La herramienta ayacc crea ficheros Ada terminados en .a, que por tanto no se adhieren a lasconvenciones de nombres del compilador gnat. Adems, crea los paquetes en un solo fichero, conla especificacin y el cuerpo en el mismo fichero. Esto tambin es contrario a las reglas del gnat.

    Para estas situaciones, existe una herramienta llamada gnatchop, que permite crear los ficheroscon los nombres apropiados, a partir de otros ficheros. Habr que ejecutar:

    gnatchop -w name.a

  • 8/7/2019 Compila 2en1

    25/34

    GRUPO DE COMPUTADORES Y TIEMPO REAL Javier Gutirrez, Michael Gonzlez 49

    FACULTAD DE CIENCIAS 24/nov/08

    UNIVERSIDAD DE CANTABRIADeclaraciones ayacc

    Declaraciones de los lexemas o tokens:

    %token nombre

    Declaracin de paquetes a utilizar en el paquete tokens

    %with package_name;

    %use package_name;

    Otras declaraciones a utilizar en el paquete tokens, al menoscon el tipo YYSType. Este tipo de datos se utiliza para

    almacenar el dato resultante de cada regla gramatical:{

    type YYSType is ...;}

    GRUPO DE COMPUTADORES Y TIEMPO REAL Javier Gutirrez, Michael Gonzlez 50

    FACULTAD DE CIENCIAS 24/nov/08

    UNIVERSIDAD DE CANTABRIA

    Notas:

    Ejemplo de la seccin de declaraciones ayacc:

    %token identificador%token numero%token operador_asignacion

    %with Var_Strings%use Var_Strings

    {type YYSType is record

    Operador : Character;Valor : Integer;

    end record}

    %%

    El paquete XXXX_Tokens se crea con los tokens indicados, y los predefinidos End_Of_Input y Error.

  • 8/7/2019 Compila 2en1

    26/34

    GRUPO DE COMPUTADORES Y TIEMPO REAL Javier Gutirrez, Michael Gonzlez 51

    FACULTAD DE CIENCIAS 24/nov/08

    UNIVERSIDAD DE CANTABRIAReglas gramaticales en ayacc

    Cada regla se describe con un no-terminal, el smbolo :, una

    lista de tokens y no-terminales, y las acciones a realizarcuando se detecta la regla:

    A : B C D ;

    A : E F ;

    B : H I {acciones};

    Tambin es posible agrupar varias definiciones para el mismono-terminal juntas:

    A : B C D

    | E F;

    B : H I {acciones};

    La primera regla es la de comienzo.

    GRUPO DE COMPUTADORES Y TIEMPO REAL Javier Gutirrez, Michael Gonzlez 52

    FACULTAD DE CIENCIAS 24/nov/08

    UNIVERSIDAD DE CANTABRIA

    Notas:

    Ejemplo de seccin de reglas gramaticales ayacc:

    linea : expresion fin_linea;

    expresion : termino| expresion + termino

    | expresion - termino;

    termino : factor| termino * factor| termino / factor;

    factor : numero| ( expresion );

    La expresin y el trmino se separan en este caso, para hacer que la suma y la resta sean menosprecedentes que el producto y la divisin y todos a su vez menos precedentes que el parntesis.

  • 8/7/2019 Compila 2en1

    27/34

    GRUPO DE COMPUTADORES Y TIEMPO REAL Javier Gutirrez, Michael Gonzlez 53

    FACULTAD DE CIENCIAS 24/nov/08

    UNIVERSIDAD DE CANTABRIA

    Acciones de las reglasgramaticales

    Cada accin representa instrucciones Ada a realizar al

    detectarse texto que cumple la regla gramatical asociada.

    El valor asociado a cada elemento de la regla (del tipoYYSType) se puede representar con un smbolo especial:

    $$ : valor de la parte izquierda de la regla

    $1 : valor del 1 elemento de la parte derecha

    $2 : valor del 2 elemento de la parte derecha

    ...

    Ejemplo, suponiendo que YYStype es un entero: A : B C D {$$:=1;};

    A : B + C {$$:=$1+$3;};

    D : E F {Put($1);};

    GRUPO DE COMPUTADORES Y TIEMPO REAL Javier Gutirrez, Michael Gonzlez 54

    FACULTAD DE CIENCIAS 24/nov/08

    UNIVERSIDAD DE CANTABRIA

    Notas:

    Ejemplo de reglas gramaticales con acciones:

    linea : expresion fin_linea {Put($1);New_Line;};

    expresion : termino {$$:=$1;}| expresion '+' termino {$$:=$1+$3;}

    | expresion '-' termino {$$:=$1-$3;};

    termino: factor {$$:=$1;}| termino '*' factor {$$:=$1*$3;}| termino '/' factor {$$:=$1/$3;};

    factor : numero {$$:=YYVal;}| '(' expresion ')' {$$:=$2;};

    La variable YYVal permite obtener el valor del nmero, obtenido por el analizador lxico.

  • 8/7/2019 Compila 2en1

    28/34

    GRUPO DE COMPUTADORES Y TIEMPO REAL Javier Gutirrez, Michael Gonzlez 55

    FACULTAD DE CIENCIAS 24/nov/08

    UNIVERSIDAD DE CANTABRIA

    Ejemplo de uso de aflex yayacc.

    El siguiente ejemplo es un compilador completo para

    gestionar un servidor de comunicacin de mensajes.

    Las acciones a realizar por el servidor llegan en forma deinstrucciones de un lenguaje especial, y deben traducirse aoperaciones del paquete Operaciones_Servidor:

    destino => "nombre_computador";

    envia => "texto_mensaje";

    varN => valor_entero;

    if varN envia => "texto_mensaje";

    La instrucciones, respectivamente, cambian el destino,envan un mensaje, cambian el valor de la variable N, o envanun mensaje si la variable Nes distinta de cero (Nes un natural).

    GRUPO DE COMPUTADORES Y TIEMPO REAL Javier Gutirrez, Michael Gonzlez 56

    FACULTAD DE CIENCIAS 24/nov/08

    UNIVERSIDAD DE CANTABRIA

    Notas:

    Ejemplo de un posible programa a compilar y ejecutar:

    destino => "pepito";

    envia => "hola que tal";

    var0 => 1;

    envia => "hola que tal";if var0 envia => "condicional";

    var1 => 0;

    if var1 envia => "condicional no enviada";

    envia => "otro";

  • 8/7/2019 Compila 2en1

    29/34

    GRUPO DE COMPUTADORES Y TIEMPO REAL Javier Gutirrez, Michael Gonzlez 57

    FACULTAD DE CIENCIAS 24/nov/08

    UNIVERSIDAD DE CANTABRIAEjemplo: especificacin lex

    -- declaraciones

    flecha "=>"espacio " "|\t|\ntexto \"(.)*\"var "var"num [0-9]+fin ";"inicio_if "if"destino "destino"envia "envia"

    %%

    GRUPO DE COMPUTADORES Y TIEMPO REAL Javier Gutirrez, Michael Gonzlez 58

    FACULTAD DE CIENCIAS 24/nov/08

    UNIVERSIDAD DE CANTABRIA

    Notas:

    -- reglas de traduccin{flecha} {return Flecha;}{texto} {Text_Buffer:=

    To_Var_String(YYText(2..YYText'Length-1)); return Texto;}{var} {return Var;}

    {num} {Num_Buffer:=Integer'Value(YYText); return Num;}{fin} {return fin;}{inicio_if} {return Inicio_If;}{destino} {return Destino;}{envia} {return Envia;}{espacio} {null;}. {return Error;}%%

  • 8/7/2019 Compila 2en1

    30/34

    GRUPO DE COMPUTADORES Y TIEMPO REAL Javier Gutirrez, Michael Gonzlez 59

    FACULTAD DE CIENCIAS 24/nov/08

    UNIVERSIDAD DE CANTABRIA

    Ejemplo: especificacin lex(cont.)

    -- cdigo auxiliar

    with Servidor_Mensajes_Tokens;use Servidor_Mensajes_Tokens;with Var_Strings;use Var_Strings;package Servidor is

    function Get_Text_Buffer return Var_String;

    function Get_Num_Buffer return Integer;

    function YYlex return Token;

    end Servidor;

    GRUPO DE COMPUTADORES Y TIEMPO REAL Javier Gutirrez, Michael Gonzlez 60

    FACULTAD DE CIENCIAS 24/nov/08

    UNIVERSIDAD DE CANTABRIA

    Notas:

    packagebody Servidor isText_Buffer : Var_String;Num_Buffer : Integer;function Get_Text_Buffer return Var_String is

    beginreturn Text_Buffer;

    end Get_Text_Buffer;

    function Get_Num_Buffer return Integer isbegin

    return Num_Buffer;end Get_Num_Buffer;

    ## -- aqu va YYLexend Servidor;

  • 8/7/2019 Compila 2en1

    31/34

    GRUPO DE COMPUTADORES Y TIEMPO REAL Javier Gutirrez, Michael Gonzlez 61

    FACULTAD DE CIENCIAS 24/nov/08

    UNIVERSIDAD DE CANTABRIAEjemplo: especificacin ayacc

    -- definiciones

    %token flecha, texto, var, num, fin, inicio_if%token destino, envia%with Var_strings;%use Var_Strings;{ type YYstype is record

    varnum,num : Integer;str : Var_String;

    end record;}

    %%

    GRUPO DE COMPUTADORES Y TIEMPO REAL Javier Gutirrez, Michael Gonzlez 62

    FACULTAD DE CIENCIAS 24/nov/08

    UNIVERSIDAD DE CANTABRIA

    Notas:

    -- reglas gramaticales programa : programa instruccion

    | instruccion;

    instruccion : inst_envia_cond| inst_var

    | inst_destino| inst_envia;

    inst_envia_cond : inicio_if variable envia flecha texto fin{if valor_variable($2.Varnum)/=0 then

    Envia(Destino => Destino_Actual,Mensaje => Get_Text_Buffer);

    end if;};

  • 8/7/2019 Compila 2en1

    32/34

    GRUPO DE COMPUTADORES Y TIEMPO REAL Javier Gutirrez, Michael Gonzlez 63

    FACULTAD DE CIENCIAS 24/nov/08

    UNIVERSIDAD DE CANTABRIA

    Ejemplo: especificacin ayacc(cont.)

    inst_var : set_variable fin

    {Cambia_Variable($1.Varnum,$1.Num);};set_variable : variable flecha num

    {$$.Num:=Get_Num_Buffer;$$.varnum:=$1.varnum;}

    ;variable : var num

    {$$.varnum:=Get_Num_Buffer;};

    inst_destino : destino flecha texto fin{Cambia_Destino(Get_Text_Buffer);};

    GRUPO DE COMPUTADORES Y TIEMPO REAL Javier Gutirrez, Michael Gonzlez 64

    FACULTAD DE CIENCIAS 24/nov/08

    UNIVERSIDAD DE CANTABRIA

    Notas:

    inst_envia : envia flecha texto fin{Envia(Destino => Destino_Actual,

    Mensaje => Get_Text_Buffer);};

    %%

    with Operaciones_servidor;use Operaciones_Servidor;with Servidor;use Servidor;with Var_Strings;use Var_Strings;with Servidor_Mensajes_Tokens, Servidor_Mensajes_Shift_Reduce,

    Servidor_Mensajes_Goto;use Servidor_Mensajes_Tokens, Servidor_Mensajes_Shift_Reduce,

    Servidor_Mensajes_Goto;with Text_IO;use Text_IO;procedure Servidor_Mensajes is

  • 8/7/2019 Compila 2en1

    33/34

    GRUPO DE COMPUTADORES Y TIEMPO REAL Javier Gutirrez, Michael Gonzlez 65

    FACULTAD DE CIENCIAS 24/nov/08

    UNIVERSIDAD DE CANTABRIA

    Ejemplo: especificacin ayacc(cont.)

    procedure YYError (S : in String) is

    beginPut_Line(S); end YYError;

    ## -- aqu va YYParse

    beginYYparse;

    end Servidor_Mensajes;

    GRUPO DE COMPUTADORES Y TIEMPO REAL Javier Gutirrez, Michael Gonzlez 66

    FACULTAD DE CIENCIAS 24/nov/08

    UNIVERSIDAD DE CANTABRIA

    Notas:

    with Var_Strings;use Var_Strings;package Operaciones_Servidor is

    subtype Num_Variable is Integer range 0..10;

    procedure Envia (Destino : Var_String; Mensaje : Var_String);

    procedure Cambia_Variable (Num : Num_Variable;

    Valor : Integer); function Valor_Variable (Num : Num_Variable) return Integer;

    procedure Cambia_Destino (Destino : Var_String); function Destino_Actual return Var_String;end Operaciones_Servidor;

  • 8/7/2019 Compila 2en1

    34/34

    GRUPO DE COMPUTADORES Y TIEMPO REAL Javier Gutirrez, Michael Gonzlez 67

    FACULTAD DE CIENCIAS 24/nov/08

    UNIVERSIDAD DE CANTABRIA4. Conclusin

    Los compiladores para lenguajes de alto nivel tienen muchas

    fases, en las que progresivamente se va transformando untexto de un lenguaje a otro

    Muchas aplicaciones necesitan lenguajes especiales y, portanto, compiladores

    Estos compiladores sencillos se pueden construir conherramientas para anlisis lxico y sintctico:

    lex o aflex: permiten generar analizadores lxicos

    yacc o ayacc: permiten generar analizadores sintcticos

    Con estas herramientas se pueden construir analizadores oparsers en C o Ada, y luego integrarlos con la aplicacin.

    UNIVERSIDAD DE CANTABRIA