Descargar la presentación
La descarga está en progreso. Por favor, espere
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
Presentaciones similares
© 2025 SlidePlayer.es Inc.
All rights reserved.