COMPILADORES E INTERPRETES

Documentos relacionados
Diseño de Compiladores I. Estructura General de un Compilador

Compiladores e intérpretes Introducción

Es un lenguaje estructurado, tiene una abundante cantidad de operadores y tipos de datos.

Programación Estructurada

8- LEX-Expresiones regulares

ANÁLISIS LÉXICO Ing. Ronald Rentería Ayquipa

Unidad II: Análisis semántico

Todo programa en 'C' consta de una o más funciones, una de las cuales se llama main.

Programación 1. Tema I. Conceptos y elementos básicos de Programación. Lección 2. Lenguaje de programación y ejecución de un programa

PRÁCTICAS DE PROCESADORES DEL LENGUAJE CURSO 2008/2009

Tema: Análisis Léxico

Algoritmo, Estructuras y Programación I Ing. Marglorie Colina

Tema 05: Elementos de un programa en C

Gramaticas Independientes del Contexto, ejemplos y ejercicios

Objetivos Que el estudiante logre conocer, comprender y manejar conceptos y técnicas vinculados con el Analizador Léxico, para lo cual debe:

Lenguaje de programación. COMPILADORES Unidad I: Introducción al proceso de compilación

Java para no Programadores

Introducción a la Programación

Operadores aritméticos

Lenguaje C. República Bolivariana de Venezuela Fundación Misión Sucre Aldea Fray Pedro de Agreda Introducción a la Programación III

Java para no Programadores

Analizador Sintáctico RECURSIVO

Elementos para el estudio de los compiladores

Introducción al Diseño de Compiladores. Año

Cuales son los tipos de instrucciones que se utilizan en la programación?

Estructuras de Datos Declaraciones Tipos de Datos

16 Análisis sintáctico I

Compiladores: Introducción

Laboratorio de Arquitectura de Redes. Introducción al lenguaje C

Programación en Lenguaje C

Unidad 2. Introducción Lenguajes y Compiladores

Unidad III Análisis Léxico. M.C. Juan Carlos Olivares Rojas

Analizador Léxico en LEX

OPERADORES Y EXPRESIONES

Módulo. = Asignación = = Comp. de igualdad!= Com. de desigualdad <= Comp. menor o igual >= Comp. mayor o igual AND lógico OR lógica.

Unidad Didáctica 2. Elementos básicos del lenguaje Java Tipos, declaraciones, expresiones y asignaciones

Java. Introducción a la Programación Orientada a Objetos

Tema 7. Generación de código

Lenguajes de programación

Generación de Código Intermedio

abril de 2017 Desarrollo de aplicaciones en Java Tipos de datos primitivos Tipos de datos Elementos de aplicaciones simples

FASES DE UN COMPILADOR

Tema: Análisis Sintáctico

Lenguaje de programación C. Introducción

Tema: Análisis Semántico

El lenguaje C. 1. Identificadores, constantes y variables

Licenciatura de Matemáticas Informática I Notación algorítmica - Descripción BNF

Descripción de un Programa

Programación en C. Algoritmo y Estructura de Datos. Ing. M. Laura López. Programación en C

Elementos de un programa en C

GUIA EXAMEN FINAL/EXTRAORDINARIO

2007/ PROGRAMACIÓN. Tipo: TRO Curso: 1 Semestre: AB CREDITOS Totales TA TS AT AP PA OBJETIVOS. 1.-Introducción.

VARIABLES, CONSTANTES Y EXPRESIONES ASIGNACIÓN. TIPOS ELEMENTALES. PRECEDENCIA DE LOS ESTRUCTURAS DE CONTROL. CONDICIONAL E

Procesadores de lenguaje Tema 1 Introducción a los compiladores

Análisis léxico. Formalización y desarrollo. Procesadores de Lenguajes. Ingeniería Técnica superior de Ingeniería Informática

Unidad I: Organización del Computador. Ing. Marglorie Colina

INTRODUCCIóN A LA PROGRAMACIóN APUNTES DE JAVA APUNTES DE JAVA

Conceptos básicos sobre gramáticas

INTRODUCCION A LA PROGRAMACION (C.U.) PROGRAMACION (T.I.G.)

Analizador Léxico. Programación II Margarita Álvarez. Analizador Léxico - Funciones

Contenido 1. INTRODUCCIÓN A LOS SISTEMAS OPERATIVOS PROCESOS Prólogo...

LENGUAJE. Tema 2 Elementos de un programa

Compiladores e intérpretes Análisis Léxico I. Análisis Léxico I

Unidad I Introducción a la programación de Sistemas. M.C. Juan Carlos Olivares Rojas

Tema 2: Análisis léxico

Un. VI. Generador de código intermedio.

Introducción al lenguaje C

Introducción a la lingüística computacional

Sintaxis de C Ing. Jose Maria Sola Dr. Oscar Ricardo Bruno

Calendario Académico año Introducción a la Programación I

EXAMEN PARCIAL TRABAJO INTEGRADOR (TI) EVALUACIÓN CONTINUA PESO PORCENTUAL PESO PORCENTUAL 1 30% 06-MAY-14 30% 03-MAY-14 20% 20%

Lección 2 Introducción al lenguaje C

Fundamentos de Programación 2017-I

GENERACIÓN DE CÓDIGO

Fundamentos PHP. El término puntuación nos referimos a la sintaxis usada en PHP para la terminación de una línea de código (;)

Tema 2 Introducción a la Programación en C.

Controla el flujo de tokens reconocidos por parte del analizador léxico. 4.2 Introduccion a las gramaticas libres de contexto y arboles de derivacion

Hardware: componentes físicos (UCP, discos, impresora, circuitos de E/S,...) Software: componentes lógicos (lo que no es hardware)

YACC. Los símbolos terminales que la gramática empleará. El axioma o símbolo inicial de la gramática. %token. %start

Características de JavaScript

Tema 5 Tabla de Símbolos

Lenguaje C Elementos de un Programa. Ing. Hugo Fdo. Velasco Peña Universidad Nacional 2006

1. Computadores y programación

Centro Asociado Palma de Mallorca. Antonio Rivero Cuesta

PROGRAMACIÓN UNIDADES

GENERACIÓN DE CÓDIGO INTERMEDIO ÁRBOLES DE SINTAXIS ABSTRACTA (ASA)

Estatutos de Control C# Estatutos de Decisión (Selección)

Tipos de Datos en C. Palabras reservadas en C

TEMA 2. LENGUAJE C. CONCEPTOS BÁSICOS Y PROGRAMACIÓN ELEMENTAL.

Contenido. Capítulo 1. Teoría de conjuntos. 1. Capítulo 2. Lenguaje. 39. Capítulo 3. Lenguajes formales. 55

Analizador Léxico en ANSI C

Código Intermedio. Compiladores II 1

Examen de Procesadores de Lenguaje

Dobles: Es el caso de la instrucción if-else (punto 1.2).

Transcripción:

COMPILADORES E INTERPRETES Análisis semántico: Estudia el significado de la sentencia Procesadores de lenguaje: Convierte un programa fuente hecho en un lenguaje fuente a un programa objeto hecho en un lenguaje objeto. En consecuencia, es un programa que esta hecho en maquina virtual y es transformado a un programa que entienda la maquina real. Observe el esquema: Maquina Virtual (Generado por SO) Maquina Real para para fuente (hecho en Leng. Fuente) CONVERTIR objeto (hecho en Leng. Objeto) Instrucciones máquina El lenguaje objeto es creado por el compilador, el cual debe estar preparado para el sistema operativo en el que será ejecutado y a la arquitectura respectiva del hardware. Por ejemplo, existen compiladores que a un programa fuente lo transforman a ejecutable para Windows (arquitectura CISC) o para MacOS (arquitectura RISC). Firmware (microprograma ubicado en la ROM) Especie de caja negra (no perceptible por el usuario) fuente (hecho en Pascal) Compilador (hecho en lenguaje C++) objeto (o para un SO Windows - CISC) (o para un SO MacOS - RISC) Lenguaje fuente Lenguaje de implementación Lenguaje objeto Un SO de arquitectura ietaria son aquellas que restringen el desarrollo de aplicaciones sólo a esa misma familia de SO, por ejemplo, Windows: sus aplicaciones no pueden ser ejecutadas por otros SO tal como MacOS o LINUX Interprete Java (utiliza bytecode) Lenguaje de implementación C++ Sistema Computacional Por eso se dice que el Java es el sucesor del C ++ Un SO de arquitectura abierta es aquel en que sus aplicaciones pueden ser ejecutadas en cualquier otro SO, como por ejemplo LINUX puede ser instalado en cualquier arquitectura como CISC o RISC, es decir se puede instalar en una PC o una Mac (Apple) respectivamente. Existen decompiladores que transforman un exe a código fuente. Pero, debe saberse de antemano cual fue el lenguaje que lo originó. Ing. Luis Reyes Lescano 1

Tipos de procesadores de lenguaje Traductores F uente Compilador objeto F uente Ensamblador objeto (Leng. de alto niv el o medio niv el) (Leng. objeto o máquina) (Leng. de ensamble) (Leng. objeto o máquina) Funcionalad: Toma todo el programa fuente y genera las instrucciones máquina (Prog.objeto), inclusive genera el exe que es igual al Prog.objeto+cargadores (rutinas de ejecusión del SO). Interpretes F uente (Leng. de alto niv el) Interprete objeto (Leng. objeto o máquina) Funcionalad: Toma el programa fuente y genera instrucciones máquina necesarias sentencia por sentencia (fuente) sobre la marcha. Muchas veces no genera el ejecutable y para esto necesita del software de apoyo (linker). Estructura de un compilador Etapa de Análisis Análisis Léxico Análisis Sintáctico Análisis Semántico Tabla de símbolos uniformes Etapa de Síntesis Generación código interno Optimizador Generación código final Tabla de manejo de errores PROG. FUENTE PROG. OBJETO ANALISIS LEXICO - Es un análisis lineal - Se da de izquierda a derecha - Necesita de un analizador léxico o scaner Ing. Luis Reyes Lescano 2

Funcionalad: - Se encarga de disponer el programa fuente en unades sintácticas, es decir, palabras con significado io, denominados componentes léxicos o tokens. Por ejemplo: palabras reservadas, entificadores, constantes, operadores aritméticos, operadores relacionales, operadores lógicos, símbolos de asignación, símbolos de puntuación o caracteres especiales del lenguaje, etc. - Elimina los caracteres en forma de espacios en blanco, ejemplo: espacio en blanco, tabulaciones y saltos de línea. - Elimina los comentarios. - Actualiza la tabla de símbolos uniformes, que es la contenedora de todos los tokens del programa fuente actual. Conceptos básicos: - Palabra reservada: Es aquella palabra del io lenguaje de programación que no se puede usar como entificador de variables ni como funciones de usuario. Mayormente todas las palabras clave son reservadas, pero algunas palabras reservadas no siempre son palabras clave. Ejemplo de palabras claves: main, if, else, switch, while, do, etc. Ejemplo de palabras reservadas: printf(), scanf(), getch(), putpixel(), gotoxy(), etc. Estas últimas palabras son reservadas, pero no son palabras clave ya que pueden ser creadas por el usuario como funciones ias, siempre y cuando no se usen las librerías del C++. token Identificador de función printf ( %d, dato); int a =1; float suma ( a, b ); Identificador de variable - Tabla de símbolos uniformes: Se basa en: Tabla de terminales (palabras reservadas) Tabla de entificadores (variables) Tabla de literales (constantes) ANALISIS SINTA CTICO - Es un análisis de tipo jerárquico. - Necesita de un analizador sintáctico o módulo denominado Parser Funcionalad: - Verifica en forma permanente la correcta escritura de las sentencias, teniendo como parámetros un conjunto de reglas denominada gramática. - Una gramática se representa formalmente o matemáticamente en base a un cuádruple de la forma: G = (P, T, N, S), donde: P = Producciones o reglas T = Conjunto de terminales N = Conjunto de no terminales S = Axioma, símbolo distinguo o metanoción Ing. Luis Reyes Lescano

- Sigue la forma BNF (Backus Naur Form) que coince con la gramática de libre contexto de Chomsky. Ejemplo: Reglas para el reconocimiento de una sentencia de asignación: 1. Un entificador es una expresión. 2. Un número es una expresión.. Pueden darse los siguientes casos: expresión + expresión expresión - expresión expresión * expresión expresión / expresión Todas ellas son expresiones. Identificador = expresión es una osición. Transformando estas reglas a BNF, sería: exp exp exp exp exp - exp exp exp = exp O SE PUEDE REPRESENTAR exp exp - exp = exp Ahora planteemos estas reglas o producciones a una sentencia de asignación: X = A + * C - = X * + - A C árbol aritmético = exp X exp - exp A C parser P: {exp exp - exp = exp } T: {X,=,A,+,,*,C,-,} N: {,exp,} S: {} forma gramatical Ing. Luis Reyes Lescano

EJERCICIOS I. Desarrollar el parser para el reconocimiento de las siguientes sentencias de asignación: a. X = A * B / C / 2 + * ( + / 2) = exp X 2 C A B 2 b. X = + * + 1 / 2 / * 6 + ( * ) = exp X exp exp 6 1 2 Ing. Luis Reyes Lescano

c. X = ((A + ) + * + (6 / * )) / 2 + * = exp X 2 A 6 d. X = (A + ( * + (6 * / / 2)) + * ) / / 2 = exp X exp exp 2 A exp / exp 2 6 Ing. Luis Reyes Lescano 6

II. Desarrollar las gramáticas para el reconocimiento de: a. Sentencia condicional if() _cond if (exp) then {} if (exp) then {} else {} dig 0 9 dig dig letra a z A Z comp letra dig _ ( letra dig _ ) comp letra letra (comp) op_arit + - * / op_rel < > <= >= <> exp_arit exp op_arit exp exp_rel exp op_rel exp exp_log exp AND exp exp OR exp NOT exp exp exp_arit exp_rel exp_log _asig = exp _var ++ _declar tipo _asig tipo _asig _var _declar _cond (_asig _var _declar _cond) b. Sentencia repetitiva for() _rep for (inicia; evalua; var) {} inicia _asig _declar (_asig _declar), inicia evalua exp_rel exp_log var _var _asig (_var _asig), var _asig _var _declar _cond _rep (_asig _var _declar _cond _rep) c. Sentencia de control while() _ctrl while (evalua) {} do {} while (evalua) Definición de reglas que serán utilizadas para la construcción de la gramática de las sentencias siguientes. A xioma de la gramática que irá incrementándose _asig _var _declar _cond _rep _ctrl (_asig _var _declar _cond _rep _ctrl) d. Sentencia de selección múltiple switch() _selec switch () {enuncia defa} enuncia case valores: ; break; case valores: ; break; enuncia valores letra, valores letra, valores defa enuncia default: ; break; _asig _var _declar _cond _rep _ctrl _selec (_asig _var _declar _cond _rep _ctrl _selec) e. Sentencia de escritura printf() _esc printf ( cuerpo ) printf ( cuerpo, var_esc) cuerpo cad format (cad format) cuerpo cad letra dig car_esp delim (letra dig car_esp delim) cad format %d %f %c %s car_esp!? < > # $ % & @ / ) ( ; :,.... delim eb TAB space var_esc exp_arit ( exp_arit ), var_esc _asig _var _declar _cond _rep _ctrl _selec _esc (_asig _var _declar _cond _rep _ctrl _selec _esc) f. Sentencia de lectura scanf() _lect scanf ( format, var_lect) var_lect & ( &) var_lect _asig _var _declar _cond _rep _ctrl _selec _esc _lect (_asig _var _declar _cond _rep _ctrl _selec _esc _lect) Ing. Luis Reyes Lescano 7