Descargar la presentación
La descarga está en progreso. Por favor, espere
1
Ejemplo Práctico de un Compilador Pequeño
Características: Programa Principal Análisis Sintáctico Generador Código Objeto Lenguaje Fuente Análisis Léxico Subrutina: Análisis Léxico Análisis Sintáctico Pascal Asignar Pila Generador de Código Objeto Lenguaje Objeto
2
Gramática Independiente del Contexto
Sintaxis Lenguaje Fuente Instrucciones de Asignación Expresiones Aritméticas: + , - , ( , ) A=3 + B + ( 8 – Z ); Expresada a través de la Gramática Gramática Independiente del Contexto Construcción de Árboles Sintácticos
3
Gramática del lenguaje
Compuesta por reglas Línea formada por Izquierda: Símbolo No Terminal y ::= Derecha: Símbolos Terminales y No Terminales En nuestro caso: ASG VAR = EXP ; EXP TER REX REX EXP | - EXP | VACIO TER ( EXP ) | VAR | CTE VAR A | ... | Z CTE | ... | 9
4
Sentencia = Secuencia de símbolos terminales
Árbol Sintáctico Sentencia = Secuencia de símbolos terminales Formado a partir de la Gramática Estructura según el árbol ASG VAR = EXP ; REX TER CTE 2 (Vacío) A
5
Dada la Sentencia y la Gramática
Árbol Sintáctico Dada la Sentencia y la Gramática Análisis Sintáctico describe el árbol correspondiente a dicha sentencia Derivación Método Descendente Parte del símbolo principal hasta llegar a la sentencia 2 Métodos Reducción Método Ascendente Parte de la sentencia hasta llegar al símbolo principal
6
Implementación Análisis Sintáctico
1 Subrutina para cada símbolo No Terminal Análisis Léxico Lee secuencias de caracteres de los símbolos terminales de la Gramática Todos los símbolos terminales están formados por 1 carácter Cuando no sea un blanco, será el próximo carácter Consideración: Convenio para conocer qué subrutina del análisis sintáctico llama al léxico y en qué punto Solución: Antes de llamar a la subrutina ya habremos leído el nuevo carácter a través del léxico Llamada al léxico antes y después de la subrutina
7
Coloca en la cima de la pila la dirección de la variable dada
Lenguaje Máquina Objeto Lenguaje tipo ensamblador que pertenece a una hipotética máquina de pila PUSHC <cte> Coloca en la cima de la pila la cte dada top:= top+1; pila[top]:=cte PUSHA <dir.var> Coloca en la cima de la pila la dirección de la variable dada top:= top+1; pila[top]:=dir.var. LOAD Asume que el valor de la cima de la pila es una dirección. Se extrae de la pila y se pone el valor ubicado en la dirección pila[top]:=mem[pila[top]] STORE Asume que la cima es un valor y la subcima una dirección. Almacena el valor en la dirección. Disminuye en 2 la pila. mem[pila[top-1]]:=pila[top] top:=top-2
8
Lenguaje Máquina Objeto
NEG Cambia el signo del valor situado en la cima de la pila pila[top]:= - pila[top] ADD Opera en los dos elementos de la cima, extrayéndolos y dejando el resultado de la suma. Disminuye en 1 la pila pila[top-1]:=pila[top]+pila[top-1] top:=top-1 Reservamos una zona de memoria para almacenar todas las variables pila programa variables
9
Todo programa terminará siempre con la instrucción STORE
Esquema de traducción PUSHA A PUSHC 2 STORE A=2; PUSHA dir. Var. ______________ STORE Todo programa terminará siempre con la instrucción STORE Instrucciones que evaluarán la expresión VAR EXP ASG PUSHA dir.var. Bloque STORE
10
Esquema de traducción Expresión: 2+3 PUSHC 2 PUSHC 3 ADD CTE REX PUSHC
ASG VAR = EXP ; EXP TER REX REX EXP | - EXP | VACIO TER ( EXP ) | VAR | CTE VAR A | ... | Z CTE | ... | 9 Esquema de traducción Expresión: 2+3 EXP REX TER CTE 3 vacío 2 + PUSHC 2 PUSHC 3 ADD CTE REX PUSHC ADD
11
Esquema de traducción Expresión: C+3 PUSHA dir C LOAD PUSHC 3 ADD TER
ASG VAR = EXP ; EXP TER REX REX EXP | - EXP | VACIO TER ( EXP ) | VAR | CTE VAR A | ... | Z CTE | ... | 9 Esquema de traducción Expresión: C+3 EXP REX TER CTE 3 vacío VAR C + PUSHA dir C LOAD PUSHC 3 ADD TER LOAD
12
Esquema de traducción Expresión: C+3+F ASG VAR = EXP ; EXP TER REX
REX EXP | - EXP | VACIO TER ( EXP ) | VAR | CTE VAR A | ... | Z CTE | ... | 9 Esquema de traducción Expresión: C+3+F EXP REX TER CTE 3 VAR C + F vacío PUSHA C LOAD PUSHC 3 PUSHA F ADD
13
Esquema de traducción Expresión: 3-2 PUSHC 3 PUSHC 2 NEG ADD REX
ASG VAR = EXP ; EXP TER REX REX EXP | - EXP | VACIO TER ( EXP ) | VAR | CTE VAR A | ... | Z CTE | ... | 9 Esquema de traducción Expresión: 3-2 EXP REX TER CTE 2 vacío 3 - PUSHC 3 PUSHC 2 NEG ADD REX NEG ADD
14
Hacer el árbol de Análisis para estas dos expresiones.
ASG VAR = EXP ; EXP TER REX REX EXP | - EXP | VACIO TER ( EXP ) | VAR | CTE VAR A | ... | Z CTE | ... | 9 Esquema de traducción Expresión: A-(B-5) A-B-5 Hacer el árbol de Análisis para estas dos expresiones. ¿CONCLUSIONES?
Presentaciones similares
© 2024 SlidePlayer.es Inc.
All rights reserved.