140 likes | 317 Views
Análisis Sintáctico. Programa Principal. Generador Código Objeto. Asignar. Pila. Pascal. Ejemplo Práctico de un Compilador Pequeño. Características:. Lenguaje Fuente. Análisis Léxico. Subrutina: Análisis Léxico. Análisis Sintáctico. Generador de Código Objeto. Lenguaje Objeto.
E N D
Análisis Sintáctico Programa Principal Generador Código Objeto Asignar Pila Pascal Ejemplo Práctico de un Compilador Pequeño Características: Lenguaje Fuente Análisis Léxico Subrutina: Análisis Léxico Análisis Sintáctico Generador de Código Objeto Lenguaje Objeto
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 Construcción de Árboles Sintácticos
ASG VAR = EXP ; EXP TER REX REX + EXP | - EXP | VACIO TER ( EXP ) | VAR | CTE VAR A | ... | Z CTE 0 | ... | 9 Línea formada por Gramática del lenguaje Compuesta por reglas Izquierda: Símbolo No Terminal y ::= Derecha: Símbolos Terminales y No Terminales En nuestro caso:
Formado a partir de la Gramática Estructura según el árbol ASG VAR = EXP ; REX TER CTE (Vacío) 2 Árbol Sintáctico Sentencia = Secuencia de símbolos terminales A
Dada la Sentencia y la Gramática Análisis Sintáctico describe el árbol correspondiente a dicha sentencia Método Descendente Parte del símbolo principal hasta llegar a la sentencia Derivación Método Ascendente Parte de la sentencia hasta llegar al símbolo principal Reducción Árbol Sintáctico 2 Métodos
Análisis Sintáctico 1 Subrutina para cada símbolo No Terminal Lee secuencias de caracteres de los símbolos terminales de la Gramática Análisis Léxico Cuando no sea un blanco, será el próximo carácter Todos los símbolos terminales están formados por 1 carácter 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 Implementación Consideración: Convenio para conocer qué subrutina del análisis sintáctico llama al léxico y en qué punto
Coloca en la cima de la pila la cte dada top:= top+1; pila[top]:=cte PUSHC <cte> Coloca en la cima de la pila la dirección de la variable dada top:= top+1; pila[top]:=dir.var. PUSHA <dir.var> 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 LOAD pila[top]:=mem[pila[top]] mem[pila[top-1]]:=pila[top] top:=top-2 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. STORE Lenguaje Máquina Objeto Lenguaje tipo ensamblador que pertenece a una hipotética máquina de pila
Cambia el signo del valor situado en la cima de la pila pila[top]:= - pila[top] NEG 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 ADD Reservamos una zona de memoria para almacenar todas las variables pila variables programa Lenguaje Máquina Objeto
PUSHA A PUSHC 2 STORE PUSHA dir. Var. ______________ ______________ STORE Instrucciones que evaluarán la expresión VAR EXP ASG PUSHA dir.var. Bloque STORE Esquema de traducción A=2; Todo programa terminará siempre con la instrucción STORE
ASG VAR = EXP ; CTE 0 | ... | 9 TER ( EXP ) | VAR | CTE EXP TER REX VAR A | ... | Z REX + EXP | - EXP | VACIO 2+3 EXP TER REX CTE EXP TER REX PUSHC ADD CTE REX CTE 2 + 3 vacío Esquema de traducción Expresión: PUSHC 2 PUSHC 3 ADD
ASG VAR = EXP ; EXP TER REX TER ( EXP ) | VAR | CTE VAR A | ... | Z CTE 0 | ... | 9 REX + EXP | - EXP | VACIO C+3 EXP TER REX VAR EXP TER REX CTE TER LOAD C + 3 vacío Esquema de traducción Expresión: PUSHA dir C LOAD PUSHC 3 ADD
ASG VAR = EXP ; EXP TER REX TER ( EXP ) | VAR | CTE VAR A | ... | Z CTE 0 | ... | 9 REX + EXP | - EXP | VACIO C+3+F EXP TER REX VAR EXP TER REX CTE EXP TER REX VAR C + + 3 F vacío Esquema de traducción Expresión: PUSHA C LOAD PUSHC 3 PUSHA F LOAD ADD ADD
ASG VAR = EXP ; EXP TER REX TER ( EXP ) | VAR | CTE VAR A | ... | Z CTE 0 | ... | 9 REX + EXP | - EXP | VACIO 3-2 EXP TER REX CTE EXP TER REX CTE NEG ADD REX 3 - 2 vacío Esquema de traducción Expresión: PUSHC 3 PUSHC 2 NEG ADD
ASG VAR = EXP ; EXP TER REX TER ( EXP ) | VAR | CTE VAR A | ... | Z CTE 0 | ... | 9 REX + EXP | - EXP | VACIO A-(B-5) A-B-5 Esquema de traducción Expresión: Hacer el árbol de Análisis para estas dos expresiones. ¿CONCLUSIONES?