SlideShare ist ein Scribd-Unternehmen logo
1 von 11
Es una descripción de la fase de análisis
semántico de la compilación. Es una fase
intermedia que vincula la fase de análisis
inicial de un compilador con la fase de
síntesis final
ANÁLISIS
SEMÁNTICO
AUTÓMATAS Y COMPILADORES
CALDASDOMINGUEZ, ROQUE
Contenido
1. INTRODUCCIÓN ------------------------------------------------------------------------------------2
2. ATRIBUTOS Y GRAMÁTICA CON ATRIBUTOS------------------------------------------------3
A. ATRIBUTOS: --------------------------------------------------------------------------------------- 3
B. GRAMATICA CON ATRIBUTOS------------------------------------------------------------------ 3
FORMA DE UNA SEMANTICA DIRIGIDA POR SINTAXIS-------------------------------------------------------------4
3. NOTACIONES PARA LA ESPECIFICACIÓN DE UN TRADUCTOR---------------------------5
A. Definición dirigida por sintaxis (DDS):--------------------------------------------------------- 5
B. ESQUEMA DE TRADUCCIÓN (ETDS) ------------------------------------------------------------ 6
4. TRADUCCIÓN A UNA REPRESENTACIÓN INTERMEDIA -----------------------------------7
A. ÁRBOL SINTÁCTICO ABSTRACTO --------------------------------------------------------------- 7
B. NOTACIÓN POSFIJA ------------------------------------------------------------------------------ 8
C. CÓDIGO DES TRES DIRECCIONES --------------------------------------------------------------- 8
1. INTRODUCCIÓN
En el análisisléxicoysintáctico se handesarrolladolastécnicasadecuadasparacomprobarque
una serie de palabrasy símbolosestánbienconstruidosrespectoalas reglasimpuestasporun
lenguaje concreto. Pero el hecho de que estén bien construidos u ordenados no quiere decir
que su significadoseael deseadoporel creadordel compilador,porloque hayque comprobar
que lo que se quiere hacer tiene sentido.
Esta fase de análisis trata de verificar que los tipos que intervienen en las expresionessean
compatiblesentre sí,que losparámetrosque se lepasanalossubprogramasseanlosadecuados
tanto en número como en tipo, que las funciones devuelven valores adecuados en cuanto al
tipo, etc.
El análisis semántico involucra tanto la descripción de los análisis a realizar como la
implementaciónde losanálisisutilizandoalgoritmosapropiados.Eneste sentido,essemejante
al análisis léxico y sintáctico. En el análisis sintáctico,por ejemplo, utilizamos gramáticas libres
de contextoenlaformaBNFpara describirlasintaxisydiversosalgoritmosde análisissintáctico
descendiente y ascendiente para implementar la sintaxis. En el análisis semántico la situación
no es tan clara, en parte porque no hay un método estándar (como el BNF) que permita
especificar la semántica estática de un lenguaje, y en parte porque la cantidad y categoría del
análisissemánticovaríademasiadode unlenguaje aotro. Un métodopara describirel análisis
semántico que los escritores de compiladores usan muy a menudo con buenos efectos es la
identificaciónde atributos, o propiedades, de entidadesdel lenguaje que deben calcularse y
escribir ecuaciones de atributos o reglas semánticas, que expresan cómo el cálculo de tales
atributosestárelacionadoconlasreglasgramaticalesdel lenguaje.Unconjuntoasíde atributos
y ecuacionesse denominagramáticacon atributos.Las gramáticas conatributossonmás útiles
paraloslenguajesque obedecenelprincipiode lasemánticadirigidaporsintaxis,lacual asegura
que el contenido semántico de un programa se encuentra estrechamente relacionado con su
sintaxis.
2. ATRIBUTOSY GRAMÁTICACONATRIBUTOS
A. ATRIBUTOS:
Los atributos son información personalizada (semántica) de los símbolos (terminales y no
terminales).Porloque cadatipode símbolo(terminalesynoterminales) puedeteneratributos
diferentes.Estainformaciónviajaatravésdel árbol de análisissintácticoadjuntaacadasímbolo
(terminalesynoterminales).Lasaccionessemánticasse encargande manipularel contenidode
losatributosparaverificarque existe unsignificadocorrectoenlarelaciónde lossímbolosentre
sí. Ejemplos típicos de atributos son:
 El tipo de dato de una variable.
 E l valor de una expresión.
 La ubicación de una variable en la memoria.
 E l código objeto de un procedimiento.
 El número de dígitos significativos en un número.
Los atributos se pueden establecer antes del proceso de compilación (o incluso en la
construcciónde un compilador). Porejemplo,el númerode dígitossignificativosenunnúmero
se puede establecer(oporlomenosdarunvalormínimo) medianteladefinicióndeunLenguaje.
Además, los atributos solo se pueden determinar durante la ejecución del programa como el
valorde unaexpresión(noconstante).olaubicaciónde unaestructura dedatosdinámicamente
asignada.El procesode calcular un atributoy asociar su valorcalculadocon la construccióndel
lenguaje encuestiónse definecornofijacióndel atributo.Losatributosque puedenfijarse antes
de la ejecución se denominan estáticos mientras que los atributos que sólo se pueden fijar
durante la ejecución son dinámicos.
B. GRAMATICA CON ATRIBUTOS
Una gramáticaconatributosesunagramáticade contextolibrecuyosterminalesynoterminales
pueden tener asociados atributos y las producciones pueden tener asociadas reglas de
evaluaciónde losatributos.Cadasímbolopuede tenerasociadounnúmerofinitode atributos.
En lasemánticadirigidaporsintaxislosatributosestándirectamenteasociadosconlossímbolos
gramaticalesdel lenguaje(losterminalesynoterminales).Elvalorde unatributoenunnodode
un árbol de análisis sintáctico (terminales y no terminales) se define mediante una regla
semántica asociadaa la producciónutilizadaendichonodo.El valor de un atributosintetizado
en un nodo se calcula a partir de los valores de los atributos de los hijos de dicho nodo en el
árbol de análisissintáctico;el valorde unatributoheredadose calculaapartir de losvaloresde
los atributos en los hermanos y el padre de dicho nodo.
Un árbol de análisis sintáctico que muestre los valores de los atributos en cada nodo se
denominaunárbol de análisis sintáctico con anotaciones.El procesode calcular losvaloresde
los atributos en los nodos se denomina anotar o decorar el árbol de análisis sintáctico.
 FORMA DE UNA SEMANTICA DIRIGIDA POR SINTAXIS
Cadaproducciónpuede tenerasociadaunnúmerofinitode reglasdeevaluacióndelosatributos.
Los valores de los atributos deberán estar asociados con un dominio de valores.
Sea G = (T, N, P, S) una gramática de contexto libre y 𝐶 = {𝑐1, 𝑐2,…, 𝑐𝑛} el conjunto de
atributos asociados con los símbolos (terminales y no terminales) de la gramática G.
Dada una regla de evaluación 𝑏 → 𝑓(𝑐1,… , 𝑐𝑘) asociado con la producción.
b dependede losatributos 𝑐1,… , 𝑐𝑘 Unagramáticacon atributosesuna semánticadirigidapor
la sintaxisenlaque lasfuncionesenlasreglassemánticasnopuedentenerefectoscolaterales.
EJEMPLO: La definición dirigida por la sintaxis de la figura 2.1 es para un programa para una
calculadora de escritorio. Esta definición asocia un atributo sintetizado con un valor entero
llamado val a cada uno de los no terminales E, T y F. Para cada producción de E, T y E, la regla
semántica calcula el valor del atributo val para el no terminal del lado izquierdo a partir de los
valores de val de los no terminales del lado derecho.
PRODUCCIÓN REGLA SEMÁNTICA
𝐿 −> 𝐸 𝑝𝑟𝑖𝑛𝑡(𝐸. 𝑣𝑎𝑙)
𝐸−> 𝐸 + 𝑇 𝐸. 𝑣𝑎𝑙−> 𝐸. 𝑣𝑎𝑙 + 𝑇. 𝑣𝑎𝑙
𝐸−> 𝑇 𝐸. 𝑣𝑎𝑙−> 𝑇. 𝑣𝑎𝑙
𝑇−> 𝑇 ∗ 𝐹 𝑇. 𝑣𝑎𝑙−> 𝑇. 𝑣𝑎𝑙 ∗ 𝐹. 𝑣𝑎𝑙
𝑇−> 𝐹 𝑇. 𝑣𝑎𝑙−> 𝐹. 𝑣𝑎𝑙
𝐹−> ( 𝐸 ) 𝐹. 𝑣𝑎𝑙−> ( 𝐸. 𝑣𝑎𝑙 )
𝐹−> 𝑑𝑖𝑔𝑖𝑡𝑜 𝐹. 𝑣𝑎𝑙−> 𝑑𝑖𝑔𝑖𝑡𝑜. 𝑣𝑎𝑙
Figura 2.1|DEFINICIÓN DIRIGIDA PORSINTAXISDEUNA CALCULADORA SENCILLA
3. NOTACIONESPARALAESPECIFICACIÓNDEUN
TRADUCTOR
Existen dos formas de asociar acciones semánticas con reglas de producción.
Las más significativas tenemos:
A. Definición dirigida por sintaxis (DDS):
Consiste enasociarunaacción semánticaa una regladeproducción, perosinindicarcuandose
debe ejecutar dicha acción.
En una DDS se hace lo mismo que en las gramáticas con atributos, pero además se puede
manipularinformaciónexternaalagramática(estamanipulaciónesnecesariaparaimplementar
compiladores reales). De todas formas, no se indicará el orden de ejecución de las acciones
semánticas.
Definidotambiéncomounformalismoparaespecificarlastraduccionesparalasconstrucciones
en función de atributos asociados con sus componentes sintácticos.
Se suele representarenunatablacon doscolumnasytantas fialascomoreglasde lagramática.
En la primeracolumnase pone la reglade lagramática y en la segundalasaccionessemánticas
asociadas a dicha regla.
Ejemplo
REGLASSEMANTICA
𝐿 −> 𝐸 “𝑛”𝑝𝑟𝑖𝑛𝑡(𝐸. 𝑣𝑎𝑙)
𝐸 −> 𝐸1 + 𝑇𝐸. 𝑣𝑎𝑙 = 𝐸1. 𝑣𝑎𝑙 + 𝑇. 𝑣𝑎𝑙
𝐸 −> 𝑇𝐸. 𝑣𝑎𝑙 = 𝑇. 𝑣𝑎𝑙
𝑇 −> 𝑇1 ∗ 𝐹𝑇. 𝑣𝑎𝑙 = 𝑇1. 𝑣𝑎𝑙 ∗ 𝐹. 𝑣𝑎𝑙
𝑇 −> 𝐹𝑇. 𝑣𝑎𝑙 = 𝐹. 𝑣𝑎𝑙
𝐹 −> ( 𝐸). 𝑣𝑎𝑙 = 𝐸. 𝑣𝑎𝑙
𝐹 −> 𝑐𝑡𝑒𝐹. 𝑣𝑎𝑙 = 𝑐𝑡𝑒. 𝑣𝑎𝑙
Ingresando la cadena 3+5*4
Su árbol sintáctico correspondiente sería:
Figura 3.1|ARBOL SEMANTICO PARA EL EJEMPLO
En una DDS especifica el valor de los atributos, pero no especifica la forma de evaluación.
Existen 2 tipos o métodos para la evaluación:
 Evaluación mediante Grafos:
Es independiente del reconocimiento sintáctico. Durante el proceso de parsing se genera el
grafo de dependencia de atributos.
Posteriormente se computanlos valores de los atributos respetando el orden impuesto por el
grafo de dependencias.
 Evaluación durante el Parsing:
La evaluación se produce durante el reconocimiento sintáctico.
B. ESQUEMA DE TRADUCCIÓN (ETDS)
Es una gramática atribuida en la que hay intercalados en el lado derecho de las reglas de
producción, fragmentos de código de lenguaje de programación, que implementan acciones
semánticas.
Un ETDS es un DDS en que se da un orden de ejecución de acciones semánticas. Las acciones
semánticasse situaránaladerechade lossímbolosalosque se refierenyentrellaves.Estaregla
de situarlasaccionessemánticasdespuésde lossímbolosqueutilizandaunordende ejecución.
La traducciónenlas ETDS solopuede realizarse de unasolapasada.Porlotanto, nopermitirála
herencia de atributos desde la derecha hacia la izquierda.
Los ETDS se utilizana menudopara convertirun formatode un lenguajeenel formatode otro
lenguaje.
4. TRADUCCIÓNA UNAREPRESENTACIÓNINTERMEDIA
Una estructurade datosque representael programafuentedurante latraducciónse denomina
representaciónintermedia, o IR (por las siglas del término en inglés) para abreviar. A fin de
realizaroptimizacionessobre unprogramay para generarcódigo,esconveniente produciruna
representaciónintermedia más adecuada para estas tareas que la representación del árbol de
análisis sintáctico.
A. ÁRBOL SINTÁCTICO ABSTRACTO
Aunque unárbol sintácticoabstractoesunarepresentaciónadecuadadelcódigofuente,incluso
para lageneraciónde código,nose parecenni remotamenteal códigoobjetivo,enparticularen
su representación de construcciones de flujo de control, donde el código objetivo, como el
códigode máquinaocódigoensamblador,empleansaltosmásque construccionesde altonivel,
como las sentencias if y while. Por lo tanto, un escritorde compiladorespuede deseargenerar
unanuevaformade representaciónintermediadel árbolsintácticoque separezcamásal código
objetivo o reemplace del todo al árbol sintáctico mediante una representación intermedia de
esaclase,yentoncesgenere códigoobjetivode estanuevarepresentación.Unarepresentación
intermediadeestanaturalezaque se parece al códigoobjetivose denominacódigointermedio.
Un árbol abstracto de sintaxis es un árbol de análisis sintáctico de información innecesaria, tal
como lasproduccionesúnicas.Cadano hojarepresentaunoperadorycada hojarepresentaun
operando.
Así 𝐴 + 𝐵 podría tener los siguientes árboles: de análisis sintáctico y abstracto de sintaxis
Figura 4.1|ARBOL ABSTRACTOSINTACTICO
B. NOTACIÓN POSFIJA
La notación polaca posfija es una línea de código lineal que es más útil para la generación de
código que para la fase de optimización, puesto que es difícil hacer las clasificacionesde las
transformacionesenellaque se realizandurantelafase deoptimización.Enesencia,lanotación
polaca posfija coloca primero los operandos seguidos por su operador.
De este modo,
𝐴 + 𝐵
Se convierte en
𝐴𝐵 +
Y
𝐴 + 𝐵 ∗ 𝐶
Se transforma
𝐴𝐵𝐶 ∗ +
C. CÓDIGO DES TRES DIRECCIONES
El códigode tres direccionesesunlenguaje intermediousadoporcompiladoresoptimizadores
para ayudar en las transformaciones de mejora de código. La instrucción básica del código de
tresdireccionesestádiseñadapararepresentarlaevaluaciónde expresionesaritméticasytiene
la siguiente forma general:
𝑋 = 𝑌 𝑜𝑝 𝑍
Cada instrucciónde códigode tres direccionestiene alosumotres operandosyes típicamente
una combinación de asignación y operador binario por ejemplo 𝑡1 = 𝑡2 + 𝑡3 .
Ya que el códigode tresdireccionesesusadocomounlenguajeintermedioenloscompiladores,
los operando normalmente no contendrán direccionesde memoria o registros concretos, sino
que direccionessimbólicasque seránconvertidasendireccionesrealesdurantelaasignaciónde
registros.
El nombre "códigode tresdirecciones"vienede estaformade instrucción,yaque porlogeneral
cada unode losnombresX,YyZrepresentanunadirecciónde lamemoria.Sinembargo,observe
que el uso de la direcciónde x difiere del usode las direccionesde Y y Z, y que tanto Y como Z
(peronox) puedenrepresentarconstantesovaloresde literales sin direcciones de ejecución.
Obsérvese que no se permite ninguna expresión aritmética compuesta, pues solo hay un
operadorenel ladoderechode unaproposición.Paravercómolassecuenciasde códigode tres
direcciones de esta forma pueden representar el cálculo de una expresión, considere la
expresión aritmética:
2 ∗ 𝑎 + (𝑏 − 3)
Como árbol sintáctico
Figura 4.2| ÁRBOLSINTÁCTICO
El código de tres direcciones correspondiente es:
𝑡 1 = 2 ∗ 𝑎
𝑡 2 = 𝑏 − 3
𝑡 3 = 𝑡1 + 𝑡 2
Esta descomposición de expresiones aritméticas complejas y de preposiciones de flujo del
control anidadashace el códigode tresdireccionesdeseable paralageneracióndecódigoobjeto
y para la optimización. El uso de nombres para los valores intermedios calculados por un
programa permite que el código de tres direcciones se reorganice fácilmente.

Weitere ähnliche Inhalte

Was ist angesagt?

Diferencias entre enrutamiento estático y dinámico
Diferencias entre enrutamiento estático y dinámicoDiferencias entre enrutamiento estático y dinámico
Diferencias entre enrutamiento estático y dinámicoEduardo Lange
 
Unidad4 analisis-semantico
Unidad4 analisis-semanticoUnidad4 analisis-semantico
Unidad4 analisis-semanticoInfomania pro
 
Gramática Libre de Contexto
Gramática Libre de ContextoGramática Libre de Contexto
Gramática Libre de ContextoBrayhan Acosta
 
Analizador Sintáctico
Analizador SintácticoAnalizador Sintáctico
Analizador SintácticoPablo Guerra
 
Lenguajes de interfaz
Lenguajes de interfazLenguajes de interfaz
Lenguajes de interfazXavi Flores
 
Fundamentos de Telecomunicaciones - Unidad 4: Técnicas de Conmutación
Fundamentos de Telecomunicaciones - Unidad 4: Técnicas de ConmutaciónFundamentos de Telecomunicaciones - Unidad 4: Técnicas de Conmutación
Fundamentos de Telecomunicaciones - Unidad 4: Técnicas de ConmutaciónJosé Antonio Sandoval Acosta
 
Materia unidad compiladores
Materia unidad compiladoresMateria unidad compiladores
Materia unidad compiladoresbachispasaca
 
Ensamblador y enlazador
Ensamblador y enlazadorEnsamblador y enlazador
Ensamblador y enlazadorRickyZhengHu
 
Protocolos de las capas sesion,presentacion y aplicacion
Protocolos de las capas sesion,presentacion y aplicacionProtocolos de las capas sesion,presentacion y aplicacion
Protocolos de las capas sesion,presentacion y aplicacionEduardo J Onofre
 
Lenguajes autómatas.
Lenguajes autómatas.Lenguajes autómatas.
Lenguajes autómatas.LuiS YmAY
 
Generación código intermedio 2
Generación código intermedio 2Generación código intermedio 2
Generación código intermedio 2Humano Terricola
 
Protocolos, estandares y tipos de modem
Protocolos, estandares y tipos de modemProtocolos, estandares y tipos de modem
Protocolos, estandares y tipos de modemMirna L. Torres Garcia
 

Was ist angesagt? (20)

Diferencias entre enrutamiento estático y dinámico
Diferencias entre enrutamiento estático y dinámicoDiferencias entre enrutamiento estático y dinámico
Diferencias entre enrutamiento estático y dinámico
 
Unidad4 analisis-semantico
Unidad4 analisis-semanticoUnidad4 analisis-semantico
Unidad4 analisis-semantico
 
Gramática Libre de Contexto
Gramática Libre de ContextoGramática Libre de Contexto
Gramática Libre de Contexto
 
Analizador Sintáctico
Analizador SintácticoAnalizador Sintáctico
Analizador Sintáctico
 
1.2. El procesador y sus registros internos
1.2. El procesador y sus registros internos1.2. El procesador y sus registros internos
1.2. El procesador y sus registros internos
 
Analisis Semantico
Analisis Semantico Analisis Semantico
Analisis Semantico
 
Lenguaje ensamblador
Lenguaje ensambladorLenguaje ensamblador
Lenguaje ensamblador
 
Lenguajes de interfaz
Lenguajes de interfazLenguajes de interfaz
Lenguajes de interfaz
 
Couchdb
CouchdbCouchdb
Couchdb
 
Fundamentos de Telecomunicaciones - Unidad 4: Técnicas de Conmutación
Fundamentos de Telecomunicaciones - Unidad 4: Técnicas de ConmutaciónFundamentos de Telecomunicaciones - Unidad 4: Técnicas de Conmutación
Fundamentos de Telecomunicaciones - Unidad 4: Técnicas de Conmutación
 
Decompilador y metacompilador
Decompilador y metacompiladorDecompilador y metacompilador
Decompilador y metacompilador
 
Materia unidad compiladores
Materia unidad compiladoresMateria unidad compiladores
Materia unidad compiladores
 
Ensamblador y enlazador
Ensamblador y enlazadorEnsamblador y enlazador
Ensamblador y enlazador
 
Protocolos de las capas sesion,presentacion y aplicacion
Protocolos de las capas sesion,presentacion y aplicacionProtocolos de las capas sesion,presentacion y aplicacion
Protocolos de las capas sesion,presentacion y aplicacion
 
Lenguajes autómatas.
Lenguajes autómatas.Lenguajes autómatas.
Lenguajes autómatas.
 
Generación código intermedio 2
Generación código intermedio 2Generación código intermedio 2
Generación código intermedio 2
 
Taller de Base de Datos - Unidad 7 Conectividad
Taller de Base de Datos - Unidad 7 ConectividadTaller de Base de Datos - Unidad 7 Conectividad
Taller de Base de Datos - Unidad 7 Conectividad
 
Protocolos, estandares y tipos de modem
Protocolos, estandares y tipos de modemProtocolos, estandares y tipos de modem
Protocolos, estandares y tipos de modem
 
Ejercicios
EjerciciosEjercicios
Ejercicios
 
Ejemplo TCP-IP
Ejemplo TCP-IPEjemplo TCP-IP
Ejemplo TCP-IP
 

Ähnlich wie Análisis semántico

Actividad 2 programacion de sistemas
Actividad 2 programacion de sistemasActividad 2 programacion de sistemas
Actividad 2 programacion de sistemasJESSIKADG86
 
Analisis semantico 06 06-2019 galarraga
Analisis semantico  06 06-2019 galarragaAnalisis semantico  06 06-2019 galarraga
Analisis semantico 06 06-2019 galarragaFabricio Galárraga
 
Taller compiladores Análisis Semántico
Taller compiladores Análisis Semántico Taller compiladores Análisis Semántico
Taller compiladores Análisis Semántico Alex Toapanta
 
Taller analisis semantico
Taller analisis semanticoTaller analisis semantico
Taller analisis semanticoAlvaro Cedeño
 
Análisis semántico
Análisis semánticoAnálisis semántico
Análisis semánticoAndres Pozo
 
ANALIZADOR SINTACTICO: INTRODUCION, CONCEPTOS, CARACTERISTICAS
ANALIZADOR SINTACTICO: INTRODUCION, CONCEPTOS, CARACTERISTICAS ANALIZADOR SINTACTICO: INTRODUCION, CONCEPTOS, CARACTERISTICAS
ANALIZADOR SINTACTICO: INTRODUCION, CONCEPTOS, CARACTERISTICAS Infomania pro
 
Taller análisis sintáctico
Taller análisis sintácticoTaller análisis sintáctico
Taller análisis sintácticoSantiago Andrade
 
Analisis Semantico Taller 1 Parcial 2
Analisis Semantico Taller 1 Parcial 2Analisis Semantico Taller 1 Parcial 2
Analisis Semantico Taller 1 Parcial 2GLORIABELEN3
 
Taller n15 compiladores_analis_semantico_15_junio_2021 (1)
Taller n15 compiladores_analis_semantico_15_junio_2021 (1)Taller n15 compiladores_analis_semantico_15_junio_2021 (1)
Taller n15 compiladores_analis_semantico_15_junio_2021 (1)Bryan Chasiguano
 
Analisis sintactico actividad 15
Analisis sintactico actividad 15Analisis sintactico actividad 15
Analisis sintactico actividad 15AndresDvila
 
Presentación 2014 profe gabriel
Presentación 2014 profe gabrielPresentación 2014 profe gabriel
Presentación 2014 profe gabrielEnrique Morales
 
Taller de actividades de compiladores 06 06 2019
Taller de actividades de compiladores 06 06 2019Taller de actividades de compiladores 06 06 2019
Taller de actividades de compiladores 06 06 2019DanielRosero23
 
Manual de Compiladores Léxico y Sintáctico.pdf
Manual de Compiladores Léxico y Sintáctico.pdfManual de Compiladores Léxico y Sintáctico.pdf
Manual de Compiladores Léxico y Sintáctico.pdfDavidErnestoT
 
Actividad 2 Programación de Sistemas.
Actividad 2 Programación de Sistemas.Actividad 2 Programación de Sistemas.
Actividad 2 Programación de Sistemas.Dispositivosmoviles
 
La programación informática o programación algorítmica, acortada
La programación informática o programación algorítmica, acortadaLa programación informática o programación algorítmica, acortada
La programación informática o programación algorítmica, acortadaAeChm-MgMs-NnNm-OpSe
 

Ähnlich wie Análisis semántico (20)

(gramatica atribuida)
(gramatica atribuida)(gramatica atribuida)
(gramatica atribuida)
 
Actividad 2 programacion de sistemas
Actividad 2 programacion de sistemasActividad 2 programacion de sistemas
Actividad 2 programacion de sistemas
 
Analisis semantico 06 06-2019 galarraga
Analisis semantico  06 06-2019 galarragaAnalisis semantico  06 06-2019 galarraga
Analisis semantico 06 06-2019 galarraga
 
Taller compiladores Análisis Semántico
Taller compiladores Análisis Semántico Taller compiladores Análisis Semántico
Taller compiladores Análisis Semántico
 
Taller análisis sintáctico
Taller análisis sintácticoTaller análisis sintáctico
Taller análisis sintáctico
 
Taller analisis semantico
Taller analisis semanticoTaller analisis semantico
Taller analisis semantico
 
Análisis semántico
Análisis semánticoAnálisis semántico
Análisis semántico
 
ANALIZADOR SINTACTICO: INTRODUCION, CONCEPTOS, CARACTERISTICAS
ANALIZADOR SINTACTICO: INTRODUCION, CONCEPTOS, CARACTERISTICAS ANALIZADOR SINTACTICO: INTRODUCION, CONCEPTOS, CARACTERISTICAS
ANALIZADOR SINTACTICO: INTRODUCION, CONCEPTOS, CARACTERISTICAS
 
Taller análisis sintáctico
Taller análisis sintácticoTaller análisis sintáctico
Taller análisis sintáctico
 
Analisis Semantico Taller 1 Parcial 2
Analisis Semantico Taller 1 Parcial 2Analisis Semantico Taller 1 Parcial 2
Analisis Semantico Taller 1 Parcial 2
 
Analisis semantico
Analisis semanticoAnalisis semantico
Analisis semantico
 
Taller n15 compiladores_analis_semantico_15_junio_2021 (1)
Taller n15 compiladores_analis_semantico_15_junio_2021 (1)Taller n15 compiladores_analis_semantico_15_junio_2021 (1)
Taller n15 compiladores_analis_semantico_15_junio_2021 (1)
 
Analisis sintactico actividad 15
Analisis sintactico actividad 15Analisis sintactico actividad 15
Analisis sintactico actividad 15
 
Presentación 2014 profe gabriel
Presentación 2014 profe gabrielPresentación 2014 profe gabriel
Presentación 2014 profe gabriel
 
Analisis semantico
Analisis semanticoAnalisis semantico
Analisis semantico
 
Taller de actividades de compiladores 06 06 2019
Taller de actividades de compiladores 06 06 2019Taller de actividades de compiladores 06 06 2019
Taller de actividades de compiladores 06 06 2019
 
Manual de Compiladores Léxico y Sintáctico.pdf
Manual de Compiladores Léxico y Sintáctico.pdfManual de Compiladores Léxico y Sintáctico.pdf
Manual de Compiladores Léxico y Sintáctico.pdf
 
Actividad 2 Programación de Sistemas.
Actividad 2 Programación de Sistemas.Actividad 2 Programación de Sistemas.
Actividad 2 Programación de Sistemas.
 
Compilacion parcial
Compilacion parcialCompilacion parcial
Compilacion parcial
 
La programación informática o programación algorítmica, acortada
La programación informática o programación algorítmica, acortadaLa programación informática o programación algorítmica, acortada
La programación informática o programación algorítmica, acortada
 

Análisis semántico

  • 1. Es una descripción de la fase de análisis semántico de la compilación. Es una fase intermedia que vincula la fase de análisis inicial de un compilador con la fase de síntesis final ANÁLISIS SEMÁNTICO AUTÓMATAS Y COMPILADORES CALDASDOMINGUEZ, ROQUE
  • 2. Contenido 1. INTRODUCCIÓN ------------------------------------------------------------------------------------2 2. ATRIBUTOS Y GRAMÁTICA CON ATRIBUTOS------------------------------------------------3 A. ATRIBUTOS: --------------------------------------------------------------------------------------- 3 B. GRAMATICA CON ATRIBUTOS------------------------------------------------------------------ 3 FORMA DE UNA SEMANTICA DIRIGIDA POR SINTAXIS-------------------------------------------------------------4 3. NOTACIONES PARA LA ESPECIFICACIÓN DE UN TRADUCTOR---------------------------5 A. Definición dirigida por sintaxis (DDS):--------------------------------------------------------- 5 B. ESQUEMA DE TRADUCCIÓN (ETDS) ------------------------------------------------------------ 6 4. TRADUCCIÓN A UNA REPRESENTACIÓN INTERMEDIA -----------------------------------7 A. ÁRBOL SINTÁCTICO ABSTRACTO --------------------------------------------------------------- 7 B. NOTACIÓN POSFIJA ------------------------------------------------------------------------------ 8 C. CÓDIGO DES TRES DIRECCIONES --------------------------------------------------------------- 8
  • 3. 1. INTRODUCCIÓN En el análisisléxicoysintáctico se handesarrolladolastécnicasadecuadasparacomprobarque una serie de palabrasy símbolosestánbienconstruidosrespectoalas reglasimpuestasporun lenguaje concreto. Pero el hecho de que estén bien construidos u ordenados no quiere decir que su significadoseael deseadoporel creadordel compilador,porloque hayque comprobar que lo que se quiere hacer tiene sentido. Esta fase de análisis trata de verificar que los tipos que intervienen en las expresionessean compatiblesentre sí,que losparámetrosque se lepasanalossubprogramasseanlosadecuados tanto en número como en tipo, que las funciones devuelven valores adecuados en cuanto al tipo, etc. El análisis semántico involucra tanto la descripción de los análisis a realizar como la implementaciónde losanálisisutilizandoalgoritmosapropiados.Eneste sentido,essemejante al análisis léxico y sintáctico. En el análisis sintáctico,por ejemplo, utilizamos gramáticas libres de contextoenlaformaBNFpara describirlasintaxisydiversosalgoritmosde análisissintáctico descendiente y ascendiente para implementar la sintaxis. En el análisis semántico la situación no es tan clara, en parte porque no hay un método estándar (como el BNF) que permita especificar la semántica estática de un lenguaje, y en parte porque la cantidad y categoría del análisissemánticovaríademasiadode unlenguaje aotro. Un métodopara describirel análisis semántico que los escritores de compiladores usan muy a menudo con buenos efectos es la identificaciónde atributos, o propiedades, de entidadesdel lenguaje que deben calcularse y escribir ecuaciones de atributos o reglas semánticas, que expresan cómo el cálculo de tales atributosestárelacionadoconlasreglasgramaticalesdel lenguaje.Unconjuntoasíde atributos y ecuacionesse denominagramáticacon atributos.Las gramáticas conatributossonmás útiles paraloslenguajesque obedecenelprincipiode lasemánticadirigidaporsintaxis,lacual asegura que el contenido semántico de un programa se encuentra estrechamente relacionado con su sintaxis.
  • 4. 2. ATRIBUTOSY GRAMÁTICACONATRIBUTOS A. ATRIBUTOS: Los atributos son información personalizada (semántica) de los símbolos (terminales y no terminales).Porloque cadatipode símbolo(terminalesynoterminales) puedeteneratributos diferentes.Estainformaciónviajaatravésdel árbol de análisissintácticoadjuntaacadasímbolo (terminalesynoterminales).Lasaccionessemánticasse encargande manipularel contenidode losatributosparaverificarque existe unsignificadocorrectoenlarelaciónde lossímbolosentre sí. Ejemplos típicos de atributos son:  El tipo de dato de una variable.  E l valor de una expresión.  La ubicación de una variable en la memoria.  E l código objeto de un procedimiento.  El número de dígitos significativos en un número. Los atributos se pueden establecer antes del proceso de compilación (o incluso en la construcciónde un compilador). Porejemplo,el númerode dígitossignificativosenunnúmero se puede establecer(oporlomenosdarunvalormínimo) medianteladefinicióndeunLenguaje. Además, los atributos solo se pueden determinar durante la ejecución del programa como el valorde unaexpresión(noconstante).olaubicaciónde unaestructura dedatosdinámicamente asignada.El procesode calcular un atributoy asociar su valorcalculadocon la construccióndel lenguaje encuestiónse definecornofijacióndel atributo.Losatributosque puedenfijarse antes de la ejecución se denominan estáticos mientras que los atributos que sólo se pueden fijar durante la ejecución son dinámicos. B. GRAMATICA CON ATRIBUTOS Una gramáticaconatributosesunagramáticade contextolibrecuyosterminalesynoterminales pueden tener asociados atributos y las producciones pueden tener asociadas reglas de evaluaciónde losatributos.Cadasímbolopuede tenerasociadounnúmerofinitode atributos. En lasemánticadirigidaporsintaxislosatributosestándirectamenteasociadosconlossímbolos gramaticalesdel lenguaje(losterminalesynoterminales).Elvalorde unatributoenunnodode un árbol de análisis sintáctico (terminales y no terminales) se define mediante una regla semántica asociadaa la producciónutilizadaendichonodo.El valor de un atributosintetizado en un nodo se calcula a partir de los valores de los atributos de los hijos de dicho nodo en el
  • 5. árbol de análisissintáctico;el valorde unatributoheredadose calculaapartir de losvaloresde los atributos en los hermanos y el padre de dicho nodo. Un árbol de análisis sintáctico que muestre los valores de los atributos en cada nodo se denominaunárbol de análisis sintáctico con anotaciones.El procesode calcular losvaloresde los atributos en los nodos se denomina anotar o decorar el árbol de análisis sintáctico.  FORMA DE UNA SEMANTICA DIRIGIDA POR SINTAXIS Cadaproducciónpuede tenerasociadaunnúmerofinitode reglasdeevaluacióndelosatributos. Los valores de los atributos deberán estar asociados con un dominio de valores. Sea G = (T, N, P, S) una gramática de contexto libre y 𝐶 = {𝑐1, 𝑐2,…, 𝑐𝑛} el conjunto de atributos asociados con los símbolos (terminales y no terminales) de la gramática G. Dada una regla de evaluación 𝑏 → 𝑓(𝑐1,… , 𝑐𝑘) asociado con la producción. b dependede losatributos 𝑐1,… , 𝑐𝑘 Unagramáticacon atributosesuna semánticadirigidapor la sintaxisenlaque lasfuncionesenlasreglassemánticasnopuedentenerefectoscolaterales. EJEMPLO: La definición dirigida por la sintaxis de la figura 2.1 es para un programa para una calculadora de escritorio. Esta definición asocia un atributo sintetizado con un valor entero llamado val a cada uno de los no terminales E, T y F. Para cada producción de E, T y E, la regla semántica calcula el valor del atributo val para el no terminal del lado izquierdo a partir de los valores de val de los no terminales del lado derecho. PRODUCCIÓN REGLA SEMÁNTICA 𝐿 −> 𝐸 𝑝𝑟𝑖𝑛𝑡(𝐸. 𝑣𝑎𝑙) 𝐸−> 𝐸 + 𝑇 𝐸. 𝑣𝑎𝑙−> 𝐸. 𝑣𝑎𝑙 + 𝑇. 𝑣𝑎𝑙 𝐸−> 𝑇 𝐸. 𝑣𝑎𝑙−> 𝑇. 𝑣𝑎𝑙 𝑇−> 𝑇 ∗ 𝐹 𝑇. 𝑣𝑎𝑙−> 𝑇. 𝑣𝑎𝑙 ∗ 𝐹. 𝑣𝑎𝑙 𝑇−> 𝐹 𝑇. 𝑣𝑎𝑙−> 𝐹. 𝑣𝑎𝑙 𝐹−> ( 𝐸 ) 𝐹. 𝑣𝑎𝑙−> ( 𝐸. 𝑣𝑎𝑙 ) 𝐹−> 𝑑𝑖𝑔𝑖𝑡𝑜 𝐹. 𝑣𝑎𝑙−> 𝑑𝑖𝑔𝑖𝑡𝑜. 𝑣𝑎𝑙 Figura 2.1|DEFINICIÓN DIRIGIDA PORSINTAXISDEUNA CALCULADORA SENCILLA
  • 6. 3. NOTACIONESPARALAESPECIFICACIÓNDEUN TRADUCTOR Existen dos formas de asociar acciones semánticas con reglas de producción. Las más significativas tenemos: A. Definición dirigida por sintaxis (DDS): Consiste enasociarunaacción semánticaa una regladeproducción, perosinindicarcuandose debe ejecutar dicha acción. En una DDS se hace lo mismo que en las gramáticas con atributos, pero además se puede manipularinformaciónexternaalagramática(estamanipulaciónesnecesariaparaimplementar compiladores reales). De todas formas, no se indicará el orden de ejecución de las acciones semánticas. Definidotambiéncomounformalismoparaespecificarlastraduccionesparalasconstrucciones en función de atributos asociados con sus componentes sintácticos. Se suele representarenunatablacon doscolumnasytantas fialascomoreglasde lagramática. En la primeracolumnase pone la reglade lagramática y en la segundalasaccionessemánticas asociadas a dicha regla. Ejemplo REGLASSEMANTICA 𝐿 −> 𝐸 “𝑛”𝑝𝑟𝑖𝑛𝑡(𝐸. 𝑣𝑎𝑙) 𝐸 −> 𝐸1 + 𝑇𝐸. 𝑣𝑎𝑙 = 𝐸1. 𝑣𝑎𝑙 + 𝑇. 𝑣𝑎𝑙 𝐸 −> 𝑇𝐸. 𝑣𝑎𝑙 = 𝑇. 𝑣𝑎𝑙 𝑇 −> 𝑇1 ∗ 𝐹𝑇. 𝑣𝑎𝑙 = 𝑇1. 𝑣𝑎𝑙 ∗ 𝐹. 𝑣𝑎𝑙 𝑇 −> 𝐹𝑇. 𝑣𝑎𝑙 = 𝐹. 𝑣𝑎𝑙 𝐹 −> ( 𝐸). 𝑣𝑎𝑙 = 𝐸. 𝑣𝑎𝑙 𝐹 −> 𝑐𝑡𝑒𝐹. 𝑣𝑎𝑙 = 𝑐𝑡𝑒. 𝑣𝑎𝑙 Ingresando la cadena 3+5*4 Su árbol sintáctico correspondiente sería:
  • 7. Figura 3.1|ARBOL SEMANTICO PARA EL EJEMPLO En una DDS especifica el valor de los atributos, pero no especifica la forma de evaluación. Existen 2 tipos o métodos para la evaluación:  Evaluación mediante Grafos: Es independiente del reconocimiento sintáctico. Durante el proceso de parsing se genera el grafo de dependencia de atributos. Posteriormente se computanlos valores de los atributos respetando el orden impuesto por el grafo de dependencias.  Evaluación durante el Parsing: La evaluación se produce durante el reconocimiento sintáctico. B. ESQUEMA DE TRADUCCIÓN (ETDS) Es una gramática atribuida en la que hay intercalados en el lado derecho de las reglas de producción, fragmentos de código de lenguaje de programación, que implementan acciones semánticas. Un ETDS es un DDS en que se da un orden de ejecución de acciones semánticas. Las acciones semánticasse situaránaladerechade lossímbolosalosque se refierenyentrellaves.Estaregla de situarlasaccionessemánticasdespuésde lossímbolosqueutilizandaunordende ejecución. La traducciónenlas ETDS solopuede realizarse de unasolapasada.Porlotanto, nopermitirála herencia de atributos desde la derecha hacia la izquierda.
  • 8. Los ETDS se utilizana menudopara convertirun formatode un lenguajeenel formatode otro lenguaje. 4. TRADUCCIÓNA UNAREPRESENTACIÓNINTERMEDIA Una estructurade datosque representael programafuentedurante latraducciónse denomina representaciónintermedia, o IR (por las siglas del término en inglés) para abreviar. A fin de realizaroptimizacionessobre unprogramay para generarcódigo,esconveniente produciruna representaciónintermedia más adecuada para estas tareas que la representación del árbol de análisis sintáctico. A. ÁRBOL SINTÁCTICO ABSTRACTO Aunque unárbol sintácticoabstractoesunarepresentaciónadecuadadelcódigofuente,incluso para lageneraciónde código,nose parecenni remotamenteal códigoobjetivo,enparticularen su representación de construcciones de flujo de control, donde el código objetivo, como el códigode máquinaocódigoensamblador,empleansaltosmásque construccionesde altonivel, como las sentencias if y while. Por lo tanto, un escritorde compiladorespuede deseargenerar unanuevaformade representaciónintermediadel árbolsintácticoque separezcamásal código objetivo o reemplace del todo al árbol sintáctico mediante una representación intermedia de esaclase,yentoncesgenere códigoobjetivode estanuevarepresentación.Unarepresentación intermediadeestanaturalezaque se parece al códigoobjetivose denominacódigointermedio. Un árbol abstracto de sintaxis es un árbol de análisis sintáctico de información innecesaria, tal como lasproduccionesúnicas.Cadano hojarepresentaunoperadorycada hojarepresentaun operando. Así 𝐴 + 𝐵 podría tener los siguientes árboles: de análisis sintáctico y abstracto de sintaxis
  • 9. Figura 4.1|ARBOL ABSTRACTOSINTACTICO B. NOTACIÓN POSFIJA La notación polaca posfija es una línea de código lineal que es más útil para la generación de código que para la fase de optimización, puesto que es difícil hacer las clasificacionesde las transformacionesenellaque se realizandurantelafase deoptimización.Enesencia,lanotación polaca posfija coloca primero los operandos seguidos por su operador. De este modo, 𝐴 + 𝐵 Se convierte en 𝐴𝐵 + Y 𝐴 + 𝐵 ∗ 𝐶 Se transforma 𝐴𝐵𝐶 ∗ + C. CÓDIGO DES TRES DIRECCIONES El códigode tres direccionesesunlenguaje intermediousadoporcompiladoresoptimizadores para ayudar en las transformaciones de mejora de código. La instrucción básica del código de
  • 10. tresdireccionesestádiseñadapararepresentarlaevaluaciónde expresionesaritméticasytiene la siguiente forma general: 𝑋 = 𝑌 𝑜𝑝 𝑍 Cada instrucciónde códigode tres direccionestiene alosumotres operandosyes típicamente una combinación de asignación y operador binario por ejemplo 𝑡1 = 𝑡2 + 𝑡3 . Ya que el códigode tresdireccionesesusadocomounlenguajeintermedioenloscompiladores, los operando normalmente no contendrán direccionesde memoria o registros concretos, sino que direccionessimbólicasque seránconvertidasendireccionesrealesdurantelaasignaciónde registros. El nombre "códigode tresdirecciones"vienede estaformade instrucción,yaque porlogeneral cada unode losnombresX,YyZrepresentanunadirecciónde lamemoria.Sinembargo,observe que el uso de la direcciónde x difiere del usode las direccionesde Y y Z, y que tanto Y como Z (peronox) puedenrepresentarconstantesovaloresde literales sin direcciones de ejecución. Obsérvese que no se permite ninguna expresión aritmética compuesta, pues solo hay un operadorenel ladoderechode unaproposición.Paravercómolassecuenciasde códigode tres direcciones de esta forma pueden representar el cálculo de una expresión, considere la expresión aritmética: 2 ∗ 𝑎 + (𝑏 − 3) Como árbol sintáctico Figura 4.2| ÁRBOLSINTÁCTICO El código de tres direcciones correspondiente es: 𝑡 1 = 2 ∗ 𝑎 𝑡 2 = 𝑏 − 3 𝑡 3 = 𝑡1 + 𝑡 2 Esta descomposición de expresiones aritméticas complejas y de preposiciones de flujo del control anidadashace el códigode tresdireccionesdeseable paralageneracióndecódigoobjeto
  • 11. y para la optimización. El uso de nombres para los valores intermedios calculados por un programa permite que el código de tres direcciones se reorganice fácilmente.