La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Ejemplo Práctico de un Compilador Pequeño

Presentaciones similares


Presentación del tema: "Ejemplo Práctico de un Compilador Pequeño"— Transcripción de la presentación:

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?


Descargar ppt "Ejemplo Práctico de un Compilador Pequeño"

Presentaciones similares


Anuncios Google