Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Criterios de evaluación:
CRITERIOS
SI NO OBSERVACIONES
DE EVALUACIÓN
• Faltas de Ortografía.
Investigación documental
Asignatura:
Lenguajes y Autómatas I
Elaborado por:
Zamudio Franco Luis Jesús
193107070
Docente:
M.T.I Brian Antonio Mejía Díaz
Grupo:
362-M
Tema:
ANALISIS SEMANTICO.
Introducción.
El análisis semántico se compone de un conjunto de rutinas independientes, llamadas
por los analizadores morfológico y sintáctico.
El análisis semántico utiliza como entrada el árbol sintáctico detectado por el análisis
sintáctico para comprobar restricciones de tipo y otras limitaciones semánticas y
preparar la generación de código.
En cualquier caso, las rutinas semánticas suelen hacer uso de una pila (la pila
semántica) que contiene la información semántica asociada a los operandos (y a veces
a los operadores) en forma de registros semánticos.
1.1 Arboles de expresiones.
En cada una de las ramas del árbol se registra el valor o significado que este debe
tener y el análisis se encarga de terminar cuál de los valores registrado en las ramas
es aplicable.
Algoritmo.
Operando
Si el árbol está vacío hacer raíz a nuevo, si no recorrer el árbol por la derecha hasta
llegar a un nodo con hojas, si la hoja izquierda, no está etiquetada colocar operando,
si no colocarlo en la hoja derecha.
Operador.
Recorrido en Inorden: En este caso se trata primero el hijo izquierdo, después el nodo
actual y por último el hijo derecho.
• Acceder a la tabla de símbolos (para hacer parte del trabajo del analizador
semántico).
• Chequeo de tipos (del analizador semántico).
• Generar código intermedio.
• Generar errores cuando se producen.
• En definitiva, realiza casi todas las operaciones de la compilación. Este método
de trabajo da lugar a los métodos de compilación dirigidos por sintaxis.
Los errores sintácticos son dados por una expresión aritmética o paréntesis no
equilibrados.
Gramática: G (N, T, P, S)
N = No terminales.
T = Terminales.
P = Reglas de Producción.
S = Axioma Inicial.
➢ Comprobaciones estáticas
Las comprobaciones estáticas recogen el compendio de todas aquellas tareas de
carácter semántico que, por su naturaleza, pueden ser realizadas directamente
durante la fase de compilación mediante el uso de los artefactos y mecanismos propios
de dicha fase. Este tipo de comprobaciones son beneficiosas puesto que confieren
seguridad a la ejecución del programa.
Características
- Diferente de la dinámica en runtime.
- Ejemplo: comprobación de tipos, flujo de control, unicidad.
➢ Comprobaciones dinámicas.
Verificación de tipos.
Comprueba la compatibilidad de tipos de todas las expresiones del código fuente
recuperando la información durante la gestión de declaraciones. Además se asegura
de que no existe en el programa ninguna referencia a ningún símbolo no declarado.
Inferencia de tipos
En lenguajes sin tipificación de variables o con sobrecarga se aplican tareas de
inferencia de tipos en el nivel gramatical de las expresiones para resolver el tipo de
datos de la expresión resultante en función del contexto de evaluación.
Pila: colección de datos a los cuales se les puede acceder mediante un extremo,
que se conoce generalmente como tope. Las pilas tienen dos operaciones básicas:
➢ Push (para introducir un elemento)
➢ Pop (para extraer un elemento)
Las pilas se utilizan en muchas aplicaciones que utilizamos con frecuencia. Las pilas y
colas son estructuras de datos que se utilizan generalmente para simplificar ciertas
operaciones de programación. Estas estructuras pueden implementarse mediante
arrays o listas enlazadas.
Las rutinas semánticas deben realizar la evaluación de los atributos de las gramáticas
siguiendo las reglas semánticas asociadas a cada producción de la gramática.
El análisis sintáctico es la fase en la que se trata de determinar el tipo de los resultados
intermedios, comprobar que los argumentos que tiene un operador pertenecen al
conjunto de los operadores posibles, y si son compatibles entre sí, etc.
Un compilador es un sistema que en la mayoría de los casos tiene que manejar una
entrada incorrecta. Sobre todo en las primeras etapas de la creación de un programa,
es probable que el compilador se utilizará para efectuar las características
que debería proporcionar un buen sistema de edición dirigido por la sintaxis, es decir,
para determinar si las variables han sido declaradas antes de usarla, o si faltan
corchetes o algo así. Por lo tanto, el manejo de errores es parte importante de un
compilador y el escritor del compilador siempre debe tener esto presente durante su
diseño. Hay que señalar que los posibles errores ya deben estar considerados al
diseñar un lenguaje de programación. Por ejemplo, considerar si cada proposición
del lenguaje de programación comienza con una palabra clave diferente (excepto la
proposición de asignación, por supuesto). Sin embargo, es indispensable
lo siguiente:
1. El compilador debe ser capaz de detectar errores en la entrada.
a : = b + c ; en lugar de a : = b * c ;
El error no podrá ser detectado por el compilador ni por el sistema de ejecución. Estos
errores lógicos no afectan la validez del programa en cuanto a su corrección sintáctica.
Son objeto de técnicas formales de verificación de programas que no se consideran
aquí. Para conocer más sobre la verificación de programas, consulte, por ejemplo,
[LOEC 87].
Los errores visibles, a diferencia de los errores lógico, pueden ser detectados por el
compilador o al menos por el sistema de ejecución. Estos errores se pueden
caracterizar de la siguiente manera:1. Errores de ortografía y2. Errores que ocurren
por omitir requisitos formales del lenguaje de programación.
1. Errores de ortografía
2. Errores que ocurren por omitir requisitos formales del lenguaje de programación.
Conclusión.
It consists of a set of independent routines, called by the morphological and parsing
parsers.
Semantic analysis uses the syntax tree detected by parsing as input to check for type
constraints and other semantic constraints and prepare for code generation.
In single-pass compilers, calls to semantic routines are made directly from the parser,
and it is the semantic routines that call the code generator. The most used instrument
to achieve this is the attribute grammar.
Referencias bibliograficas.
1, L. and perfil, V., 2021. Lenguajes y autómatas II. [online]
Lenguajesyautomatas1998.blogspot.com. Available at:
<https://lenguajesyautomatas1998.blogspot.com/2019/04/unidad-4-4.html>
[Accessed 21 October 2021].