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;
}
Top Related