El documento describe los conceptos fundamentales de las tablas de símbolos, compiladores y gramáticas libres de contexto. Explica que las tablas de símbolos permiten realizar operaciones de inserción, búsqueda y eliminación de información en el compilador. También describe cómo se representan las expresiones aritméticas en una pila y los procesos de análisis léxico y sintáctico mediante gramáticas libres de contexto.
3. La tabla de símbolos es una
estructura de datos que nos permite
realizar operaciones de
inserción, búsqueda y eliminación de
información en varias
construcciones del lenguaje fuente, la
cual es analizada por el compilador
originándose un código objeto.
4. Interfaz de la tabla de símbolos
Las principales operaciones de la tabla de símbolos las
definimos así:
Inserción: Almacena información proporcionada por
las declaraciones de nombre cuando estas son
procesadas.
Búsqueda: Recupera la información asociada con un
nombre cuando este se utiliza en una declaración o el
código asociado.
5. Eliminación: Elimina la información proporcionada por
una declaración cuando esta ya no se aplica.
Ejemplo : Parte de procedimientos en programa fuente
Se procesa de nuevo
La operación Datos(var1, var2) por
Ser llamada de nuevo en la aplicación
Si
Datos(var1, var2) Se aplica la operación
No
Se elimina de la tabla de símbolos
La operación Datos(var1, var2)
Ya que no se considera
necesarios para procesos
posteriores
6. Manejo de la palabra clave
reservada
En las sintaxis anteriores, también se pueden
emplear palabras reservadas como pueden ser los
componentes léxico por ej: mod, div
Insertar (“div”, div); Insertar (“mod”, mod);
Cualquier llamada posterior busca(“div”) devuelve el
componente léxico div, de modo que div no puede
usarse como identificador o variable.
7. Implantación de una tabla de
símbolos
En la siguiente tabla de símbolos de matriz para el
almacenamiento de cadenas, una cadena fija de
espacios no puede ser lo suficientemente grande
para guardar un identificador muy largo, y puede
ser innecesariamente grande para un
identificador corto, donde se determina que al
final de cada cadena se finaliza con un fin-de-
cadena representado por FDC, y que no puede
aparecer en los identificadores.
8. MATRIZ
TABLASIMB
Div
Mod
i
d i v FDC m o d FDC i FDC
Matriz Lexemas
9. MAQUINA DE PILA ABSTRACTAS
La maquina tiene memorias independiente para
las instrucciones y datos, y todas las operaciones
aritméticas se realizan con los valores en una pila.
Las instrucciones son bastantes limitadas y están
comprendidas en las siguientes clases:
Aritmética,
Manipulación de la pila
10. A continuación se simula la representación de una
expresión en una pila. La evaluación se realiza de izq. A
der. Insertando los operadores en la pila a medida que los
encuentran asi:
La expresión -- 1 3 + 5
Insertar 1 en la pila
PILA
Insertar 3 en la pila ----------------------------------
1
3
Sumar Operador aritmético
5
Insertar 5 en la pila + (VALOR DE LA CIMA)
9
Sumar los dos elementos de la cima, extraerlos e insertar en la
pila el resultado 9
11. GRAMATICAS LIBRES DE CONTEXTO
El análisis gramatical es la tarea de determinar la
sintaxis, o estructura de un programa.
Por esta razón también se le conoce como análisis
sintáctico. La sintaxis de un lenguaje de programación
por lo regular se determina mediante las reglas
gramaticales de una gramática libre de contexto de
manera similar como se determina mediante
expresiones regulares la estructura léxica de los tokens.
12. EL PROCESO DEL ANALISIS
SINTACTICO
La tarea del analizador sintáctico es determinar
la estructura sintáctica de un programa a partir
de los tokens producidos por el analizador lexico
y, ya sea de manera explicita o implícita, construir
un árbol de análisis gramatical o árbol sintáctico
Que represente esta estructura. De este modo,
Se puede ver el analizador sintáctico como una
Funcion que toma su entrada la secuencia de
13. Tokens producidos por el analizador léxico y que produce
como su salida el árbol sintáctico.
Secuencia de tokens analizador sintáctico árbol sintáctico
La secuencia de tokens por lo regular no es un parámetro de
entrada explicito pero el analizador sintáctico llama a un
procedimiento del analizador léxico, como get token para
obtener el siguiente token desde la entrada a medida que lo
necesite durante el proceso de analisis sintactico. De este
modo, la etapa de analisis sintactico del compilador se
reduce a una llamada al anlizador lexico de la manera :
14. syntaxtree = parse ();
En un compilador de una sola pasada el analizador
sintáctico incorpora todas las otras fases de un compilador
incluyendo la generacion del codigo y no es necesario
construir ningun arbol sintactico explicito (las mismas
etapas del analizador sintactico representaran de manera
implicita al arbol sintactico y por consiguiente una
llamada.
parse();
15. GRAMATICAS LIBRES DE CONTEXTO
Una gramática libre de contexto es una especificación
para la estructura sintactica de un lenguaje de
programación. Una especificación así es muy similar a
la especificación de la estructura lexica de un lenguaje
utilizando expresiones regulares, excepto que una
gramática libre de contexto involucra reglas de
recursividad. Como ejemplo de ejecución utilizaremos
expresiones aritmeti
16. Simples de enteros con operaciones de suma resta y
multiplicación. Estas expresiones se pueden dar mediante
la gramatica siguiente
exp — exp op exp /(exp)/ numero
op -- +/-/*