martes, 31 de mayo de 2016

TABLA DE SIMBOLOS

En informática, una tabla de símbolos es una estructura de datos que usa el proceso de traducción de un lenguaje de programación, por un compilador o un intérprete, donde cada símbolo en el código fuente de un programa está asociado con información tal como la ubicación, el tipo de datos y el ámbito de cada variable, constante o procedimiento.
Una implementación común de una tabla de símbolos puede ser una tabla hash, la cual será mantenida a lo largo de todas las fases del proceso de compilación de ticses.
Puede tratarse como una estructura transitoria o volátil, que sea utilizada únicamente en el proceso de traducción de un lenguaje de programación, para luego ser descartada, o integrada en la salida del proceso de compilación para una explotación posterior, como puede ser por ejemplo, durante una sesión de depuración, o como recurso para obtener un informe de diagnóstico durante o después la ejecución de un programa.
Los símbolos en la tabla de símbolos pueden referirse a constantes, a funciones o a tipos de datos en el código fuente de un programa.
La tabla de símbolos forma parte de cada fichero que contiene el código objeto durante el enlazado o linking de los diferentes ficheros; recae en la responsabilidad del linker o enlazador resolver cualquier referencia no resuelta.

ejemplo en lenguaje C: Undefined símbolo 'x', si es una variable que desea usarse pero no se declaró.
ejemplo en C: multiple declaration for 'x' si x ya estaba en TS.
   Ej. Programa Fuente: 34:= *x - 640;
      Analex: NUM ASIGN POR ID MENOS NUM PTOCOMA
      Parser: "Error Sintáctico"

FASES

Análisis Léxico: Esta fase se encarga de verificar si todas las cadenas pertenecen o no al lenguaje. Es decir realiza un análisis símbolo por símbolo indicando el token por cada uno de los elementos reconocidos o el error en caso de no reconocer. Este análisis no logra detectar muchos errores por su característica.
Ejemplo:
total=valor*5
Luego del análisis léxico:
id = id * num

Análisis Sintáctico: En esta fase se analiza la estructura de las expresiones en base a gramáticas. Aqui ya se puede determinar si una extructura por ejemplo una expresión matemática mal formada. El análisis que se realiza es jerarquico es decir en base a àrboles de derivación que se obtienen de las mismas gramáticas. Ejemplo: position:=initial + rate*60
Análisis Semántico: Este análisis es más dificil de formalizar, determina el tipo de los resultados intermedios, compmrobar que los argumentos que tienen un operador pertenecen al conjunto de operadores posible, y si son compatibles entre sì.
Generación de Código Intemedio: El código intermedio es una representación en base a elementos de 3 y 4 direcciones. Lo que nos permite llegar a la fase de optimizaciòn de código.
a=b+c
1: + b c T1
2: = a  T1
Optimización de Código: Consiste en realizar uuna mejora en el código intermedio, para reducir el número de líneas y hacer que la ejecución sea más rápida
a=b+c
1: + b c a
Generación de Codigo: Llegamos a la generación de código ensamblador o código máquina del procesador que nos interese por ejemplo:
a:=b+c
LOAD B
ADD C
STORE A
Bibliografia:
  • Aho Alfred, Compiladores principios técnicas y herramientas
  • Garrido Alicia, Diseño de Compiladores, 2002

HISTORIA

HISTORIA DE COMPILADORES E INTERPRETES.

En informática, un compilador es un programa informático que transforma código fuente escrito en un lenguaje de programación o lenguaje informático (el lenguaje fuente), en otro lenguaje informático (el lenguaje objetivo, estando a menudo en formato binario conocido como código objeto). La razón más común para querer transformar código fuente es crear un programa ejecutable.

Cualquier programa escrito en un lenguaje de programación de alto nivel debe ser traducido a código objeto antes de que pueda ser ejecutado, para que todos los programadores que usen tal lenguaje usen un compilador o un intérprete. Por esto, los compiladores son muy importantes para los programadores. Cualquier mejora hecha a un compilador lleva a un gran número de programas mejorados.
Los compiladores son programas grandes y complejos, pero el análisis sistemático y la investigación de los científicos informáticos ha llevado a un entendimiento más claro de la construcción de los compiladores y una gran cantidad de teoría ha sido desarrollada sobre ellos. La investigación en la construcción de compiladores ha conducido a herramientas que hacen mucho más fácil crear compiladores, de modo que los estudiantes de informática de hoy en día pueden crear sus propios lenguajes pequeños y desarrollar un compilador simple en pocas semanas.

Primeros compiladores


El software para los primeros computadores estaba primariamente escrito en lenguaje ensamblador. Normalmente para un programador es más productivo usar un lenguaje de alto nivel, y los programas escritos en lenguajes de alto nivel pueden ser reutilizados en distintos tipos de computadores. Aún teniendo en cuenta esto, pasó un tiempo hasta que los compiladores se establecieran, porque generaban código que no tenía tan buen rendimiento como los ensambladores escritos a mano, eran enormes proyectos de desarrollo por sí mismos, y la limitadísima capacidad dememoria de los primeros computadores creó muchos problemas técnicos para las implementaciones prácticas de los compiladores.
El primer compilador fue escrito por Grace Hopper, en 1952, para el lenguaje Sistema A-0. El término compilador fue acuñado por Hopper. El equipo FORTRAN dirigido por John W. Backus de IBM está generalmente acreditado por haber presentado el primer compilador completo, en 1957. El primer compilador FORTRAN necesitó de 18 años-persona para su creación.
En 1960, un compilador FORTRAN extendido, ALTAC, estaba también disponible en el Philco 2000, por lo que es probable que un programa FORTRAN fuera compilado para ambas arquitecturas de computadores a mediados de los años 60. El primer lenguaje de alto nivel multiplataforma demostrado fue COBOL. En una demostración en diciembre de 1960, un programa COBOL fue compilado y ejecutado en el UNIVAC II y el RCA 501.
El compilador COBOL para el UNIVAC II fue probablemente el primero en ser escrito en un lenguaje de alto nivel, llamado FLOW-MATIC, por un equipo dirigido por Grace Hopper.

INICIO

COMPILADORES E INTERPRETES.

Bienvenidos a este blog