La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Funciones del Analizador Sintáctico

Presentaciones similares


Presentación del tema: "Funciones del Analizador Sintáctico"— Transcripción de la presentación:

1 Funciones del Analizador Sintáctico
Elaborado el Martes 23 de Agosto de 2005

2 Funciones del Analizador Sintáctico
Contenidos Función del Analizador Sintáctico. Definición de una Gramática. Representación BNF. Árboles de derivación. Lenguaje Yacc. 15/11/2018 Funciones del Analizador Sintáctico

3 Fases de un Compilador Funciones del Analizador Sintáctico 15/11/2018
generador de código intermedio programa objeto programa fuente objeto administrador de la tabla de símbolos optimizador de código manejador de errores analizador semántico sintáctico léxico 15/11/2018 Funciones del Analizador Sintáctico

4 Interacción entre Fases
programa fuente administrador de la tabla de símbolos manejador de errores analizador sintáctico léxico obtén el siguiente componente léxico componente léxico 15/11/2018 Funciones del Analizador Sintáctico

5 Funciones del Analizador Sintáctico
Recibir los componentes léxicos y producir como salida una representación del árbol sintáctico que reconoce la entrada de acuerdo a la gramática especificada. Interactuar con la Tabla de Símbolos. Una estructura que mantiene todos los símbolos presentes en la entrada. 15/11/2018 Funciones del Analizador Sintáctico

6 Funciones del Analizador Sintáctico
Chequear que los tipos de datos están asignados correctamente para evitar la pérdida de información o los errores semánticos. Generar un Código Intermedio, ya sea para una máquina virtual o real, que permita la ejecución o interpretación de la entrada. Informar de los errores encontrados en la entrada. 15/11/2018 Funciones del Analizador Sintáctico

7 Gramáticas libres de contexto
Una gramática es una especificación sintáctica precisa y fácil de entender de un lenguaje de programación. A partir de algunas clases de gramáticas se puede construir automáticamente un analizador sintáctico que determine si un programa fuente está bien construido. Los cambios a la gramática son más fáciles de realizar cuando se tiene una descripción gramatical del lenguaje. 15/11/2018 Funciones del Analizador Sintáctico

8 Definición formal de una gramática
1. Un conjunto de componentes léxicos ∑, denominados símbolos terminales. 2. Un conjunto de símbolos no terminales denominado N. 15/11/2018 Funciones del Analizador Sintáctico

9 Definición formal de una gramática
3. Un conjunto de producciones, en el que cada producción consta de un no terminal, llamado lado izquierdo de la producción, una flecha y una secuencia de componentes léxicos y no terminales, o ambos, llamado lado derecho de la producción. ( P : N  ( N x ∑ ) * ) 4. Un símbolo no terminal S que se considera el símbolo de inicio (o símbolo inicial). 15/11/2018 Funciones del Analizador Sintáctico

10 Funciones del Analizador Sintáctico
Ejemplo 1 Σ = { id, núm, (, ), -, +, *, / } N = { expresión, operador } S = { expresión } 15/11/2018 Funciones del Analizador Sintáctico

11 Funciones del Analizador Sintáctico
P = { expresión  expresión operador expresión, expresión  - expresión, expresión  ( expresión ), expresión  id, expresión  num, operador  +, operador  -, operador  *, operador  / } 15/11/2018 Funciones del Analizador Sintáctico

12 Convenciones respecto a la notación
expresión  expresión operador expresión | - expresión | ( expresión ) | id | num operador  + | - | * | / 15/11/2018 Funciones del Analizador Sintáctico

13 BNF (Backus-Naur Form)
<expresión>::=<expresión><operador><expresión> | - <expresión> | ( <expresión> ) | id | num <operador>::= + | - | * | / 15/11/2018 Funciones del Analizador Sintáctico

14 Funciones del Analizador Sintáctico
EBNF <S> ::= {a}3-4 Es equivalente a: <S> ::= a a a | a a a a 15/11/2018 Funciones del Analizador Sintáctico

15 Árbol de derivación (a+3)*b
expresión expresión operador expresión ( expresión ) * id expresión operador expresión + id núm 15/11/2018 Funciones del Analizador Sintáctico

16 Funciones del Analizador Sintáctico
Ejemplo 2 Σ = { id, núm, (, ), -, +, *, / } N = { expresión } S = { expresión } 15/11/2018 Funciones del Analizador Sintáctico

17 Funciones del Analizador Sintáctico
P = { expresión  expresión + expresión, expresión  expresión - expresión, expresión  expresión * expresión, expresión  expresión / expresión, expresión  - expresión, expresión  ( expresión ), expresión  id, expresión  num } 15/11/2018 Funciones del Analizador Sintáctico

18 BNF(Backus-Naur Form)
<expresión>::= <expresión> + <expresión> | <expresión> - <expresión> | <expresión> * <expresión> | <expresión> / <expresión> | - <expresión> | ( <expresión> ) | id | num 15/11/2018 Funciones del Analizador Sintáctico

19 Árbol de derivación (a+3)*b
expresión expresión expresión * ( expresión ) id expresión expresión + id núm 15/11/2018 Funciones del Analizador Sintáctico

20 Funciones del Analizador Sintáctico
Lenguaje Yacc La herramienta de software que se utiliza para construir un analizador sintáctico en lenguaje C es llamada compilador YACC (yacc en un ambiente linux). Esta herramienta fue utilizada en la especificación de analizadores sintácticos para varios lenguajes en los ambientes operativos de Unix. La especificación del archivo fuente para el compilador YACC se denomina lenguaje YACC. 15/11/2018 Funciones del Analizador Sintáctico

21 Compilación yy.tab.c a.out compilador de YACC de C
Programa fuente en YACC parser.yac Archivo de entrada Salida especificada 15/11/2018 Funciones del Analizador Sintáctico

22 Especificación en YACC
Declaraciones %% Reglas sintácticas Procedimientos auxiliares 15/11/2018 Funciones del Analizador Sintáctico

23 Especificación mínima
%% Reglas sintácticas 15/11/2018 Funciones del Analizador Sintáctico

24 Sección Declaraciones
[ %{ /* Declaraciones y funciones en C */ %} ] /*Definiciones de YACC que comienzan con %*/ 15/11/2018 Funciones del Analizador Sintáctico

25 Sección Reglas sintácticas
%% /* Reglas representando la forma BNF */ [ ] 15/11/2018 Funciones del Analizador Sintáctico

26 Funciones del Analizador Sintáctico
Ejemplo de Reglas %% expresión : expresión ‘+’ expresión | expresión ‘-’ expresión | expresión ‘*’ expresión | expresión ‘/’ expresión | ‘-’ expresión | ‘(‘ expresión ‘)’ | ID | NUM ; 15/11/2018 Funciones del Analizador Sintáctico

27 Sección Procedimientos auxiliares
%% /* Declaraciones y funciones en C */ 15/11/2018 Funciones del Analizador Sintáctico

28 Ejemplo de Procedimientos
%% #include”lex.yy.c” extern FILE* yyin; main(int argc, char** argv) { yyin = fopen(argv[1],”r”); return ( yyparse ( ) ); } 15/11/2018 Funciones del Analizador Sintáctico

29 Funciones del Analizador Sintáctico
Compilación con -ly main() { return ( yyparse ( ) ); } yyerror (char *s) fprintf( stderr, “%s\n”, s); 15/11/2018 Funciones del Analizador Sintáctico

30 Funciones del Analizador Sintáctico
Definiciones de YACC %token ‘+’ %token ‘-’ %token ‘*’ %token ‘/’ %token ‘(’ %token ‘)’ %token ID %token NUM 15/11/2018 Funciones del Analizador Sintáctico

31 Funciones del Analizador Sintáctico
Definiciones de YACC %left ‘+’ ‘-’ %left ‘*’ ‘/’ %rigth MINUS %start expresión %% 15/11/2018 Funciones del Analizador Sintáctico

32 Funciones del Analizador Sintáctico
Uso de %prec %% expresión : expresión ‘+’ expresión | expresión ‘-’ expresión | expresión ‘*’ expresión | expresión ‘/’ expresión | ‘-’ expresión %prec MINUS | ‘(‘ expresión ‘)’ | ID | NUM ; 15/11/2018 Funciones del Analizador Sintáctico

33 Conflictos de una gramática
El conflicto shift/reduce se soluciona seleccionando shift por parte del parser. El conflicto reduce/reduce no se puede solucionar y deben reescribirse las reglas gramáticales que producen el conflicto. 15/11/2018 Funciones del Analizador Sintáctico


Descargar ppt "Funciones del Analizador Sintáctico"

Presentaciones similares


Anuncios Google