TC Expo

Descargar como pptx, pdf o txt
Descargar como pptx, pdf o txt
Está en la página 1de 24

ANÁLISIS SEMÁNTICO

Que es la semántica?
Se refiere a los aspectos del significado, sentido o interpretación del
significado de un determinado elemento, símbolo, palabra, expresión o
representación formal.

Análisis semántico
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. En definitiva, comprobará que el
significado de lo que se va leyendo es válido.
ANÁLISIS SEMÁNTICO

El análisis semántico se realiza posteriormente al sintáctico


y mucho más difícil de formalizar que éste.

La salida “teórica” de la fase de análisis semántico sería un


árbol semántico.
QUE ES UN ARBOLSEMANTICO?

• Es una estructura jerárquica en la cual se registran las operaciónes que


implica u operan dentro del programa fuente

En cada una de las ramas del


arbol semantico se registra el
valor o significado que este
debe tener, y el analisis

semantico • se encarga de terminar cual de


los valores registrados en las
ramas es aplicable.
EJEMPLO:
SUPONIENDO QUE TENEMOS ESTA LINEA DE
CODIGO EN C:

res=valor1+valor2; En C el simbolo (+)


implica una suma
de valores o una
union de las
cadenas
El analisis semantico se va a encargar que tanto el valor1
como el valor2 tengan datos que son compatibles en
común y que ademas se les pueda aplicar dicho operador.
TABLA DE SIMBOLOS

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 tipos, etc.

Esta información se almacena en una estructura de datos


interna conocida como tabla de símbolos.
TABLA DE SIMBOLOS

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
relacionada con un símbolo, borrar
un elemento, etc. Como se tiene
que acceder mucho a la tabla de
símbolos los accesos deben ser lo
más rápidos posible para que la
compilación sea eficiente.
SISTEMAS DE TIPO:

Sistema de tipos: conjunto de reglas que determinan el


criterio para asignar expresiones de tipo a las diferentes
partes del código fuente.
Tipo básico: entero, carácter, real, lógico
Nombres de tipo
Constructores de tipo: estructuras, uniones, objetos
Apuntadores: referencias a tipos
Funciones a=suma();
CHEQUEOS DE TIPOS (Y OTROS)

Un compilador debe realizar una serie de chequeos


estáticos, como chequeos de tipos:

Consistencia: unicidad, existencia, no-ciclicidad, ...


Equivalencia y compatibilidad de tipos
Conversión explícita [cast] o forzada [coercion]
Inferencia de tipos (en valores)
Sobrecarga de funciones y operadores
COMPROBACIONES SEMÁNTICAS

Comprobaciones ESTÁTICAS.
Las comprobaciones sintácticas y semánticas.
Comprobaciones DINÁMICAS.
Realizadas en tiempo de ejecución.
Comprobaciones SEMÁNTICAS
De TIPO.
Verificación del tipo de los operandos en las expresiones.
De FLUJO de CONTROL.
Verifica los puntos del programa de salida y entrada del
control.
De UNICIDAD.
Verifica la presencia de símbolos de forma única.
(ejemplo: declarar un símbolo una sóla vez).
Relación de NOMBRES.
Un mismo nombre puede aparecer más de una vez.
REPRESENTACIONES INTERNAS

Intermedias entre frontal [front-end] y dorsal [back-end],


permiten desacoplar los diseños de unos y otros.
Orientadas a:

Su optimización (instrucciones claras y simples)


Generar código de distintas máquinas objeto y el diseño
debe permitir su fácil generación por el analizador
semántico.
EJEMPLOS
ANÁLISIS SINTÁCTICO DE UN
COMPILADOR

• Es la fase del analizador que se encarga de chequear el texto de entrada en


base a una gramática dada.
• Y en caso de que el programa de entrada sea válido, suministra el árbol
sintáctico que lo reconoce. En teoría, se supone que la salida del analizador
sintáctico es alguna representación del árbol sintáctico que reconoce la
secuencia de tokens suministrada por el analizador léxico.
• En la práctica, el analizador sintáctico también hace:
• • 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.
MANEJO DE ERRORES
SINTÁCTICOS

• Si un compilador tuviera que procesar sólo programas correctos,


su diseño e implantación se simplificarían mucho. Pero los
programadores a menudo escriben programas incorrectos, y un
buen compilador debería ayudar al programador a identificar y
localizar errores.
• Los errores en la programación pueden ser de los siguientes tipos:
• • Léxicos, producidos al escribir mal un identificador, una palabra
clave o un operador.
• • Sintácticos, por una expresión aritmética o paréntesis no
equilibrados.
• • Semánticos, como un operador aplicado a un operando
incompatible.
• • Lógicos, puede ser una llamada infinitamente recursiva.
TIPO DE GRAMÁTIC A QUE ACEPTA
UN ANALIZADOR SINTÁCTICO
ÁRBOL SINTÁCTICO DE UNA
SENTENCIA DE UN LENGUAJE

Es una representación que se utiliza para describir el proceso


de derivación de dicha sentencia. Como nodos internos del
árbol, se sitúan los elementos no terminales de las reglas de
producción que vayamos aplicando, y tantos hijos como
símbolos existan en la parte derecha de dichas reglas.
ÁRBOL DE PARSEO

• Un árbol de parseo es la representación gráfica de una


derivación. Es conveniente ver como las cadenas son
derivadas a partir del símbolo de inicio. El símbolo de inicio
de la derivación se convierte en la raíz del árbol de parseo.
• Ejemplo:
• Tomaremos la derivación mas a la izquierda de: a + b * c
Si un operando tiene operadores en ambos
ASOCIATIVIDAD lados, el lado en el cual el operador toma su
operador se decide por la asociatividad de esos
operadores. Si la operación es asociativa por la
izquierda, entonces el operando será tomado
por la izquierda. Si la operación es asociativa
por la derecha tomamos el operador de la
derecha.

Si dos operadores diferentes comparten un


mismo operando, la precedencia de los
PRECEDENCIA operadores decide cual tomará el operando.
Esto es, 2+3*4 puede tener 2 árboles de parseo,
uno que corresponde a (2+3)*4 y otro que
corresponda a 2+(3*4).

RECURSIVIDAD POR Una gramática se convierte en recursiva por la


izquierda si no tiene ningún no-terminal ‘A que
LA IZQUIERDA contenga una derivación ‘A’ recursiva como el
símbolo mas a la izquierda. Una gramatica
recursiva por la izquierda es considerada
problemática por los parsers de tipo ‘top
down’, estos parsers comienzan parseando
desde el símbolo de inicio el cual es un no-
terminal

También podría gustarte