You are on page 1of 10

29/08/2018

LENGUAJES AUTÓMATAS II
L.C.C. Jesús Epifanio Bote May

7-B
Reporte de investigación

Integrantes:
Miguel Ángel Hobak Koh
Oscar Samuel Perez Rangel
Ángel Adrián Mukul May

INGENIERIA EN SISTEMAS COMPUTACIONALES


1

SEMESTRE 2018B
Índice.
Introducción……………………………………………………………………………pág. 3
Objetivo General………………………………………………………………………pág. 3
Objetivos Específicos………………………………………………………………….pág. 3
Metodologías………..………………………………………………………………….pág. 3
Expresiones Regulares………………………………………………………………..pág. 4
Conclusión…………..………………………………………………………………….pág. 6
Referencias………….………………………………………………………………….pág. 6

2
Introducción

Objetivos generales
 Lograr que el reporte cumpla con las indicaciones establecidas en la rúbrica del curso.
 Expresar el fin concreto de la investigación en correspondencia directa con el problema.
 Hacer el reporte lo mas entendible posible para cada persona en general.

Objetivos Específicos
El objetivo de este tema es comprender las tareas necesarias para realizar el análisis semántico.

 Conocer el esquema conceptual para el análisis semántico.

 Conocer qué tipos de controles semánticos podemos llegar a realizar.

 Entender para qué se utilizan los atributos y las gramáticas de atributos.

 Aprender a utilizar las reglas semánticas.

 Entender las diferencias entre atributos sintetizados y atributos heredados.

 Comprender la necesidad de los grafos de dependencias

Análisis semántico

3
La semántica se refiere a los aspectos del significado, sentido o interpretación del significado de
un determinado elemento, símbolo, palabra o expresión.

Análisis semántico
Se trata de determinar el tipo de los resultados intermedios, comprobar que los argumentos que
tienen un operador perteneces al conjunto de operadores posibles. El análisis semántico se realiza
posterior mente al sintáctico, la salida “teórica” de la fase de análisis semántico sería un árbol
semántico.

Árbol semántico.
Es una estructura jerárquica en la cual se registran las operaciones que implica u operan dentro
de un programa fuente. En cada una de las ramas del árbol semántico se registra el valor
o significado que este debe tener, y el análisis.

Ejemplo:
Res=Valor1+Valor 2 En C el símbolo (+) implica una suma de valores o una unión de las
cadenas.

El análisis semántico se va encargar que tanto el valor1 como el valor 2 tengan datos que son
compatibles en común y que además se les pueda aplicar dicho operador.

4
Tabla de símbolos
Un compilador necesita guardar y usar la información de los objetos que se va encontrando en el
texto fuente, como variables, etiquetas, declaraciones de tipo, etc.
Esta información se almacena en una estructura de datos interna conocida como tabla de
símbolos.

El compilador debe desarrollar una serie de funciones


relativas a la manipulación de esta tabla como insertar
un nuevo elemento en ella, consultar la información
seleccionada con un símbolo, borrar un elemento etc.

Estructura semántica de un lenguaje.

A partir de la construcción del árbol de análisis


sintáctico, lo recorreremos en un determinado orden y
calcularemos en cada nodo la información semántica
necesaria (el valor de una expresión, el tipo de una variable, su ámbito de declaración, el número
de argumentos de una función, etc.).

Conceptualmente, se analiza sintácticamente la cadena de componentes léxicos de entrada, se


construye el árbol de análisis sintáctico y después se recorre el árbol, en un determinado orden
para tener en cuenta las dependencias, para evaluar las reglas semánticas en sus nodos.

Esquema conceptual
La forma de proceder conceptual es la siguiente:
1. Se analiza sintácticamente los componentes léxicos que constituyen la cadena de entrada.
2. Se construye el árbol de análisis sintáctico.
3. Se recorre el árbol para evaluar las reglas semánticas de cada uno de sus nodos.
4. La traducción de la cadena de componentes léxicos es el resultado obtenido al evaluar las
reglas semánticas.

5
Aunque este es el esquema, lo lógico es ir construyendo el árbol y a la vez ir realizando los
controles semánticos. De hecho, si el análisis semántico pudiera realizarse cuando está hecho
todo el análisis sintáctico y por tanto se ha construido un árbol de sintaxis abstracta, entonces
esta tarea de análisis semántico sería mucho más fácil, puesto q ue consistiría en la
especificación del orden para el recorrido de dicho árbol, junto con los cálculos a realizar en cada
nodo del recorrido.

Hemos aprendido a reconocer los tokens de un lenguaje y a partir de ellos verificar la estructura
sintáctica de un programa construyendo un árbol sintáctico y ahora nos falta comprobar que estas
sentencias sintácticamente correctas tienen validez semántica. Es decir, vamos a verificar que
estas sentencias sintácticamente correctas tienen coherencia en su contexto y por tanto tienen
sentido.

6
Conclusión
En este tema hemos comprendido las tareas necesarias para realizar un análisis semántico,
entendiendo los pasos necesarios citados en el esquema conceptual.

Hemos aprendido a distinguir entre controles estáticos (tiempo de compilación) y controles


dinámicos (tiempo de ejecución). Sabiendo en qué consisten, de entre los controles estáticos
podemos realizar comprobaciones: de tipos, del flujo de control, de unicidad o relacionados con
el nombre. En cuanto a los controles dinámicos, las comprobaciones a realizar son: de asignación
de variables, de rango o de referencias a punteros.

Por otro lado hemos visto varios tipos de atributos a tener en cuenta como son el tipo de datos, el
valor, el ámbito o la posición en memoria, que junto con las gramáticas de atributos nos permite
incorporar reglas semánticas basadas en estos atributos que se calculan según se va produciendo
el proceso de análisis, permitiendo por tanto realizar en una sola pasada todas las fases del
compilador.

También hemos aprendido a utilizar atributos sintetizados (paso de atributos de nodos hijo a
nodos padre) y heredados (el valor de un nodo depende del valor de los hermanos y del padre)
para realizar los controles semánticos y aplicarlos a las reglas semánticas.

Por último hemos aprendido a utilizar los grafos de dependencias cuando en una misma
gramática tenemos atributos sintetizados y heredados, con el objeto de validar que el flujo de
atributos es el correcto.

7
8
9
Fuentes:

Introducción a la teoría de autómatas, lenguajes y computación Hopcroft, J. E.; Motwani, R.;


Ullman, J. D. PEARSON EDUCACIÓN S.A., Madrid, 2007

https://ccc.inaoep.mx/~emorales/Cursos/Automatas/ExpRegulares.pdf

10