caracter+¡sticas generales y objetivos del generador lex

Upload: susy-diaz

Post on 06-Apr-2018

230 views

Category:

Documents


0 download

TRANSCRIPT

  • 8/3/2019 Caracter+sticas Generales y Objetivos del Generador Lex

    1/21

    GENERADOR LEX

  • 8/3/2019 Caracter+sticas Generales y Objetivos del Generador Lex

    2/21

    Caractersticas Generales yObjetivos del Generador

    Lex

  • 8/3/2019 Caracter+sticas Generales y Objetivos del Generador Lex

    3/21

  • 8/3/2019 Caracter+sticas Generales y Objetivos del Generador Lex

    4/21

    Caractersticas de laPrimera Seccin de un

    Programa Lexvv La seccin de reglas debe comenzar con el delimitador%%. Si hay una

    seccin de subrutinas, se sigue la seccin de reglas y est separada de lasreglas por otro delimitador%%. Si no hay un segundo delimitador%%, laseccin de reglas se presume que continuar hasta el fin del programa.

    La siguiente es una pequea, aunque completa, la especificacin lex, lo queilustra las tres secciones:

    {1% 2 int cuenta; 3 %} 4 %% 5 fly {cuenta + +; noise ();} 6 perro {printf ("Guau \ n");} 7 hombre {printf ("Hola mundo \ n");} 8 %% 9 noise () 10 { 11 rintf ("Bzzzz \ n");

  • 8/3/2019 Caracter+sticas Generales y Objetivos del Generador Lex

    5/21

    Caractersticas de laSegunda Seccin de un

    Programa Lexv La segunda seccin son reglas de traduccin de un programa Lex

    son sentencias de la forma:

    p1 { accin1 }

    p2 { accin2 }

    ... ...pn { accinn }

    v

    v Donde cada pi es una expresin regular y cada accin es un

    fragmento de programa, describiendo qu accin debe realizarel analizador lxico cuando el patrn pi se corresponde con un

    lexema. En Lex, las acciones estn escritas en C.

  • 8/3/2019 Caracter+sticas Generales y Objetivos del Generador Lex

    6/21

    Caractersticas de laTercera Seccin de un

    Programa Lexv La tercera seccin contiene cualesquiera procedimientos auxiliares que seanrequeridos por las acciones. Alternativamente, estos procedimientos puedenser compilados separadamente y montados junto con el analizador lxico.

    v

  • 8/3/2019 Caracter+sticas Generales y Objetivos del Generador Lex

    7/21

    Operadores que puedenemplearse en un Programa

    Lex

    li i l b

  • 8/3/2019 Caracter+sticas Generales y Objetivos del Generador Lex

    8/21

    Explicacin General sobreVariables Estndar

    Empleadas en Lex

  • 8/3/2019 Caracter+sticas Generales y Objetivos del Generador Lex

    9/21

    Explicacin sobre FuncionesEstndar Empleadas en Lex

  • 8/3/2019 Caracter+sticas Generales y Objetivos del Generador Lex

    10/21

    Ejemplo de Programa Lex quecontiene la especificacin de

    un Analizador Lxico%{

    #includeint palabra=0, n

    %}

    - -

  • 8/3/2019 Caracter+sticas Generales y Objetivos del Generador Lex

    11/21

    GENERADOR YACC

  • 8/3/2019 Caracter+sticas Generales y Objetivos del Generador Lex

    12/21

    Caractersticas Generales yObjetivos del Generador

    Yacc

  • 8/3/2019 Caracter+sticas Generales y Objetivos del Generador Lex

    13/21

    Sintaxis de un ProgramaYacc

    C t ti d l

  • 8/3/2019 Caracter+sticas Generales y Objetivos del Generador Lex

    14/21

    Caractersticas de laPrimera Seccin de un

    Programa Yaccv Definiciones sobre las variables que el analizador emplear. Estaseccin est delimitada por %{ y %}; en ella se hacendefiniciones en C. Puede tambin contener sentencias#include para incluir archivos de encabezamiento.

    v En esta primera seccin encontramos una serie de directivas de

    Yacc que permiten definir:

    C t ti d l

  • 8/3/2019 Caracter+sticas Generales y Objetivos del Generador Lex

    15/21

    Caractersticas de laSegunda Seccin de un

    Programa Yaccv La segunda seccin est constituida por la gramticalibre al contexto que guiar al analizador gramatical.

    C t ti d l

  • 8/3/2019 Caracter+sticas Generales y Objetivos del Generador Lex

    16/21

    Caractersticas de laTercera Seccin de un

    Programa Yaccv La tercera seccin de un programa en Yacc tiene losprocedimientos auxiliares que hacen operativo alanalizador de lxico. Yacc no define por defecto lasfunciones main(), yylex() e yyerror(), as que hay queincluirlas aqu, o bien en otro fichero que se enlazar en

    la fase final de la compilacin.

    v Yacc genera una funcin llamada yyparse() que contiene elanalizador sintctico. Esta funcin se comporta comouna mquina de estados cuya misin es intentar reducirtodo el fichero de entrada al smbolo inicial de lagramtica (el primero que se haya definido). Si Yacc loconsigue, el analizador sintctico volver sin error, y encaso contrario, se invocar a la funcin yyerror(), que

    debe estar definida tambin en algn sitio.v

    O d d

  • 8/3/2019 Caracter+sticas Generales y Objetivos del Generador Lex

    17/21

    Operadores que puedenemplearse en un Programa

    Yacc

    E li i G l b

  • 8/3/2019 Caracter+sticas Generales y Objetivos del Generador Lex

    18/21

    Explicacin General sobreVariables Estndar

    Empleadas en Yacc

    E li i b F i

  • 8/3/2019 Caracter+sticas Generales y Objetivos del Generador Lex

    19/21

    Explicacin sobre FuncionesEstndar Empleadas en

    Yacc

  • 8/3/2019 Caracter+sticas Generales y Objetivos del Generador Lex

    20/21

    contiene la especificacin de un

    Analizador Sintctico Construir un analizador sintctico que reconozca la palabra

    Hola, en maysculas o minsculas, y con un nmeroarbitrario de letras o:

    %token H,O,L,A%{

    #define H 257 #define O 258 #define L 259 #define A 260 int yylex() { char carac=getchar(); switch(carac) { case 'H': case 'h':

    return H;

    case 'O':

  • 8/3/2019 Caracter+sticas Generales y Objetivos del Generador Lex

    21/21

    case O : case 'o': return O; case 'L': case 'l': return L;

    case 'A': case 'a': return A;} return -1;}

    int yyerror() {printf("La expresin de la entrada NO forma parte del lenguaje reconocido\n");return 0;}%}%%hola: H letra_o L A {printf("La expresin introducida es parte del lenguaje reconocido\n");}letra_o: O |letra_o O ;%%int main() {yyparse();return 0;

    }