Intro ores Sintaxis Semantica

Embed Size (px)

Citation preview

  • 7/31/2019 Intro ores Sintaxis Semantica

    1/32

    May 15, 2012 Ing. Rubn Daro Garca Guzmn

    INTRODUCCIN A LOSCOMPILADORES

    ANLISIS LXICO,SINTCTICO Y SEMNTICO

    Universidad de Caldas

    Estructuras de Lenguajes

  • 7/31/2019 Intro ores Sintaxis Semantica

    2/32

    May 15, 2012 Ing. Rubn Daro Garca Guzmn

    Agenda

    Introduccin a loscompiladores Definicin de compilador

    Tipos de compiladores

    Anlisis del programa fuente

    Fases de un compilador

    El agrupamiento de fases

    Herramientas para la

    construccin de compiladores

    Sintaxis Procesamiento de lenguajes

    naturales y mtodos formales

    Anlisis sintctico

    Sistema de tipos ysemntica Sistemas de tipos

    Dominios semnticos y

    transformacin de estado Semntica operacional

    Semntica axiomtica

    Semntica denotativa

  • 7/31/2019 Intro ores Sintaxis Semantica

    3/32

    May 15, 2012 Ing. Rubn Daro Garca Guzmn

    Introduccin a los compiladoresDefinicin

    Un compilador es unprograma que lee unprograma escrito en unlenguaje (cdigo fuente) y

    lo traduce a un programaequivalente en otrolenguaje (cdigo objeto).En el proceso se informa al

    usuario sobre la presenciade errores en el cdigofuente.

  • 7/31/2019 Intro ores Sintaxis Semantica

    4/32

    May 15, 2012 Ing. Rubn Daro Garca Guzmn

    Introduccin a los compiladoresTipos de compiladores

    Compiladores de una pasada: Generan el cdigo mquina a partir de una nica lectura del cdigo fuente. Compiladores de mltiples pasadas: Necesitan leer el cdigo

    fuente varias veces antes de poder producir el cdigo de mquina. Compiladores de carga y ejecucin: Permiten enlazar varios

    mdulos, cargarlos a la memoria y ejecutarlos directamente. Compiladores de depuracin o de optimacin: Realizan cambiosen el cdigo para mejorar su eficiencia, pero manteniendo lafuncionalidad del programa original.

    Compiladores cruzados: Se ejecutan en una mquina pero elcdigo objeto que producen es para otra mquina.

    Compiladores JIT(Just-In-Time): Forman parte de un intrprete ycompilan partes del cdigo segn se necesitan.

  • 7/31/2019 Intro ores Sintaxis Semantica

    5/32

    May 15, 2012 Ing. Rubn Daro Garca Guzmn

    Introduccin a los compiladoresFases de un compilador

    Modelo de anlisis y sntesis en lacompilacin

    En la compilacin hay 2 partes, anlisisy sntesis.

    El anlisis divide el programa fuente ensus elementos componentes y crea una

    representacin intermedia de este. De las dos partes, la sntesis requierelas tcnicas ms especializadas.

    La sntesis construye el programa objetodeseado a partir de la representacinintermedia.

    En el anlisis se determinan lasoperaciones que implica el programafuente y se registran en una estructurade rbol, llamado rbol sintctico.

    Por ejemplo, para la expresinvf:=vi+v*60el rbol sintctico podraser:

  • 7/31/2019 Intro ores Sintaxis Semantica

    6/32

    May 15, 2012 Ing. Rubn Daro Garca Guzmn

    Introduccin a los compiladoresEl contexto de un compilador

    Adems del compilador, se puedennecesitar otros programas para crearun programa objeto ejecutable.

    El preprocesador: Programaencargado de reunir diferentesmdulos que conforman el programa

    fuente. Este puede tambin expandirabreviaturas llamadas macros aproposiciones del lenguaje fuente.

    En la figura, el compilador creacdigo en lenguaje ensamblador, elcual es traducido por un ensambladora cdigo de mquina.

    Luego se enlaza a algunas rutinas debiblioteca para producir el cdigoejecutable.

  • 7/31/2019 Intro ores Sintaxis Semantica

    7/32May 15, 2012 Ing. Rubn Daro Garca Guzmn

    Introduccin a los compiladoresAnlisis del programa fuente

    En la compilacin el anlisis consta detres fases

    Anlisis lxico: Tambin llamadoAnlisis lineal. En este se lee lacadena de caracteres que constituyeel programa de izquierda a derecha, y

    se agrupa en componentes lxicos,que son secuencias de caracteres consignificado colectivo.

    En esta etapa el compilador revisaque los tokens contengan lossmbolos adecuados del lenguaje.

    Requiere por parte del diseador del

    lenguaje, una adecuada clasificacinde componentes lxicos (tokens). Dentro de las categoras lxicas se

    tienen: identificadores, nmeros,separadores, operadores,comentarios, espacios en blanco.

    Para la expresin de pascal vf := vi + v * 60se agruparan los componentes lxicos as:el identificadorvfel smbolo de asignacin:=el identificadorviel signo de suma+el identificadorvel signo de multiplicacin*el nmero60Los espacios en blanco se eliminandurante el anlisis lxico.

  • 7/31/2019 Intro ores Sintaxis Semantica

    8/32May 15, 2012 Ing. Rubn Daro Garca Guzmn

    Introduccin a los compiladoresAnlisis del programa fuente

    Anlisis Sintctico: Conocidoigualmente comoAnlisis

    jerrquico, se encarga de agruparlos componentes lxicosjerrquicamente en coleccionesanidadas con un significadocolectivo.

    Se usan rboles sintcticos pararepresentar esas agrupaciones.

    La estructura jerrquica de unprograma normalmente se expresautilizando reglas recursivas.

    De igual forma, muchos lenguajes

    definen recursivamente lasproposiciones mediante reglascomo:Si identificador1 es un

    identificador y expresin2 esuna expresin, entonces:

    Identificador1 := expresin2 esuna proposicin.

    1. Cualquieridentificadores una expresin.

    2. Cualquiernmero es una expresin.3. Si expresin1 y expresin2son

    expresiones,entonces tambin lo son:

    expresin1 + expresin2

    expresin1 * expresin2(expresin1)

  • 7/31/2019 Intro ores Sintaxis Semantica

    9/32May 15, 2012 Ing. Rubn Daro Garca Guzmn

    Introduccin a los compiladoresAnlisis del programa fuente

    Anlisis semntico: Se realizanrevisiones que aseguran que loscomponentes de un programa seajustan de un modo significativo.

    La fase de anlisis semntico revisa elprograma fuente para tratar deencontrar errores semnticos

    Rene la informacin sobre los tipospara la fase posterior de generacin decdigo.

    Utiliza la estructura jerrquicadeterminada por la fase de anlisissintctico para identificar los operadoresy operandos de expresiones yproposiciones.

    Se encarga adems de la verificacinde tipos. El compilador verifica si cada operador

    tiene operandos permitidos por laespecificacin del lenguaje fuente.

  • 7/31/2019 Intro ores Sintaxis Semantica

    10/32May 15, 2012 Ing. Rubn Daro Garca Guzmn

    Introduccin a los compiladoresLas fases de un compilador

    Un compilador opera en fases. Cada una transforma el programa fuente de una

    representacin en otra. En la prctica se pueden agrupar algunas fases. Administracin de la tabla de smbolos:

    Registra los identificadores utilizados en elprograma fuente y rene informacin sobre los

    distintos atributos de cada identificador. Una tabla de smbolos es una estructura dedatos que contiene un registro por cadaidentificador, con los campos para los atributosdel identificador.

    Deteccin e informacin de errores: Cadafase puede encontrar errores, despus dedetectar un error, cada fase debe tratar dealguna manera ese error, para poder continuarcon la compilacin, permitiendo la deteccin dems errores en el programa fuente.

    Las fases de anlisis sintctico y semnticogeneralmente manejan la mayor cantidad de loserrores detectables por el compilador.

  • 7/31/2019 Intro ores Sintaxis Semantica

    11/32May 15, 2012 Ing. Rubn Daro Garca Guzmn

    Introduccin a los compiladoresLas fases de un compilador

    Las fases de anlisis: Conforme avanzala traduccin, la representacin internadel programa fuente que tiene elcompilador se modifica. Estas fases serefieren a las de anlisis lxico, sintcticoy semntico ya definidas.

    Generacin de cdigo interno: Algunoscompiladores generan unarepresentacin intermedia explicita delprograma fuente.

    Se puede considerar esta como unprograma para una mquina abstracta.

    Debe ser fcil de producir y fcil de

    traducir al programa objeto. Por ejemplo el cdigo de tresdirecciones, que traduce el cdigo enuna secuencia de instrucciones, cadauna de las cuales tiene como mximotres operandos.

  • 7/31/2019 Intro ores Sintaxis Semantica

    12/32May 15, 2012 Ing. Rubn Daro Garca Guzmn

    Introduccin a los compiladoresLas fases de un compilador

    Optimacin de cdigo: Trata demejorar el cdigo intermedio, de modoque resulte un cdigo de mquinarpido de ejecutar.

    Generacin de cdigo: Por lo generalconsiste en cdigo de mquina

    relocalizable o cdigo ensamblador. Las posiciones de memoria seseleccionan para cada una de lasvariables usadas por el programa.

    Cada instruccin intermedia se traduceen una secuencia de instrucciones demquina que ejecuta la misma tarea.

  • 7/31/2019 Intro ores Sintaxis Semantica

    13/32

    May 15, 2012 Ing. Rubn Daro Garca Guzmn

    Introduccin a los compiladoresEl agrupamiento de las fases

    Las actividades de compilacin seagrupan normalmente en dos omas fases.

    Etapa inicial: Recoge aquellas quedependen principalmente dellenguaje fuente.

    anlisis lxico y sintctico, creacinde tabla de smbolos, anlisissemntico y la generacin decdigo intermedio, con surespectivo manejo de errores.

    Etapa final: Incluye las partes quedependen de la mquina objeto y

    del lenguaje intermedio. Fase de optimacin de cdigo, lageneracin de cdigo, el manejo deerrores y las operaciones queinvolucran la tabla de smbolos.

    Pasadas: Se acostumbra aplicarvarias fases de un compilador enuna sola pasada.

    Una pasada es la lectura de unarchivo de entrada y en la escriturade un archivo de salida.

    Es mejor agrupar los proceso decompilacin por pasadas y no porfases.

    El anlisis lxico, el anlisissintctico, el anlisis semntico y lageneracin de cdigo intermediopueden agruparse en una pasada

    Reduccin del nmero de pasadas:Es recomendable tener pocaspasadas.

    La lectura y escritura de archivostoma tiempo e implica la carga detodo el programa en memoria.

  • 7/31/2019 Intro ores Sintaxis Semantica

    14/32

    May 15, 2012 Ing. Rubn Daro Garca Guzmn

    Introduccin a los compiladoresHerramientas para la construccin

    Existen herramientas ya definidas que se pueden usar para el desarrollo deun compilador.

    Las mejores herramientas son las que ocultan los detalles del algoritmo degeneracin y producen componentes que se pueden integrar fcilmente alresto del compilador. Generadores de analizadores sintcticos: Producen analizadores sintcticos a partir

    de una entrada fundamental en una gramtica independiente del contexto. Generadores de analizadores lxicos: Generan automticamente analizadores

    lxicos a partir de una especificacin basada en expresiones regulares. Laorganizacin del analizador lxico es en esencia un autmata finito.

    Dispositivos de traduccin dirigida por la sintaxis: Producen grupos de rutinas querecorren el rbol de anlisis sintctico, generando cdigo intermedio.

    Generadores automticos de cdigo: Toman un conjunto de reglas que definen la

    traduccin de cada operacin del lenguaje intermedio al lenguaje de mquinaobjeto.

    Dispositivos para anlisis de flujo de datos: Consiste en la recoleccin deinformacin sobre la forma en que se transmiten valores de una parte del programaa cada una de las otras partes.

  • 7/31/2019 Intro ores Sintaxis Semantica

    15/32

    May 15, 2012 Ing. Rubn Daro Garca Guzmn

    SintaxisDefinicin y generalidades

    La sintaxis de un lenguaje de programacines una definicin de lo que constituye unprograma gramaticalmente vlido en dicho

    lenguaje. La sintaxis queda especificada por un

    conjunto de reglas.

    Una definicin de la sintaxis clara, concisa yformal es especialmente importante en loslenguajes de programacin.

  • 7/31/2019 Intro ores Sintaxis Semantica

    16/32

    May 15, 2012 Ing. Rubn Daro Garca Guzmn

    SintaxisProcesamiento de lenguajes y mtodos formales

    Un Metalenguaje es un lenguaje usado para definir otroslenguajes.

    Backus-Naur Form o BNF es uno de ellos. BNF desarrollado por Noam Chomsky, es altamente usada

    en la definicin de lenguajes de programacin. Es til para describir de forma precisa las cadenas que sonprogramas legtimos y aislar todas las dems (las quetienen errores sintcticos de varios tipos)

    Las expresiones regulares tambin es un Metalenguaje

  • 7/31/2019 Intro ores Sintaxis Semantica

    17/32

    May 15, 2012 Ing. Rubn Daro Garca Guzmn

    SintaxisBNF y el anlisis lxico

    una sintaxis BNF sencilla es mostrada en lafigura.

  • 7/31/2019 Intro ores Sintaxis Semantica

    18/32

    May 15, 2012 Ing. Rubn Daro Garca Guzmn

    SintaxisEl Anlisis Lxico y el proceso de compilacin

    Las etapas de anlisis semntico y de optimizacin analizan la consistencia semntica

    (comprobando, por ejemplo, la utilizacin consistente de operadores y tipos de datos) ytransforman el texto de forma que pueda utilizar de forma eficiente la arquitectura en laque se ejecutar el programa.

    Para terminar, la etapa de generacin de cdigo utiliza la representacin abstractaresultante como base para la generacin de cdigo mquina ejecutable.

    Todos los programas deben seranalizados para comprobar sucorreccin sintctica antes de serinterpretados o traducidos acdigo mquina.

    Al nivel ms elemental, el procesode anlisis lxico separa los

    caracteres individuales delprograma en una cadena detokens que se analizasintcticamente, de uno en uno,hasta un nivel de anlisissuperior.

  • 7/31/2019 Intro ores Sintaxis Semantica

    19/32

    May 15, 2012 Ing. Rubn Daro Garca Guzmn

    SintaxisLas expresiones regulares y el anlisis lxico

    Las Expresiones regulares son unaherramienta muy utilizada en el diseode lenguajes para especificarformalmente cada clase de token.

    Estas permiten conceptos como una oms apariciones de un dgito. Es ms,se puede crear de forma similar una

    expresin regular para definir elsignificado de un ldentificador:[a-zA-Z] [a-zA-Z0-9]*

    lo que significa una letra seguida poruna o ms apariciones de una letra o undgito.

    Las expresiones regulares se hanconvertido en una herramienta muy

    popular del diseo de lenguajes, porqueadmiten la generacin automtica deanalizadores lxicos sin problemas.

    Dos generadores bastante utilizadosson el Lex (que genera cdigo de C)y el JLex (que genera cdigo deJava).

  • 7/31/2019 Intro ores Sintaxis Semantica

    20/32

    May 15, 2012 Ing. Rubn Daro Garca Guzmn

    SintaxisEl Anlisis sintctico

    La sintaxis completa de un lenguaje de programacin utiliza el resultado del anlisislxico como base para la definicin de la estructura de todas las partes diferentes deprograma que aparecen por encima del nivel lxico

    La sintaxis de un lenguaje utiliza BNF como herramienta principal para proporcionar unadefinicin precisa y una gua estricta para que la fase de anlisis sintctico detecteerrores sintcticos y desarrolle una interpretacin abstracta a partir de un flujo de

    tokens. Consideremos las categoras sintcticasAsignacin y Expresin, que definen todas las

    secuencias de Pasos de testigo que describen los clculos aritmticos y asignacionesde resultados a una variable.

    la Figura 2.8 muestra una derivacin de la Expresin x+2*y.

  • 7/31/2019 Intro ores Sintaxis Semantica

    21/32

    May 15, 2012 Ing. Rubn Daro Garca Guzmn

    SintaxisAmbigedad

    Una gramtica es ambigua sipermite que una cadena seconvierta en uno o ms rbolessintcticos diferentes.

    Por ejemplo, la gramtica ambigua,

    AmbExp, para expresiones conenteros y sustracciones.AmbExInteger | AmbExp AmbExp

    Esta gramtica permite que unaexpresin tenga dosinterpretaciones distintas en tiempode ejecucin.

    Por ejemplo, consideremos elfragmento de programa 2 - 3 - 4.

  • 7/31/2019 Intro ores Sintaxis Semantica

    22/32

    May 15, 2012 Ing. Rubn Daro Garca Guzmn

    SintaxisVariaciones de BNF para el anlisis sintctico

    El BNF extendido (EBNF) fueintroducido para simplificar laespecificacin de la recursividad enlas reglas de gramtica y paraintroducir la idea de una parte

    opcional en la parte derecha de unaregla.Expression Term | Expression + Term |

    Expression -Term

    Term Factor | Term * Factor | Term / Factor

    Se puede representar como

    Expression Term{[+| ] Term}* Term Factor{ ['*' | /] Factor} *

    (*) significa cero o ms apariciones delos smbolos que estn entre llaves { }inmediatamente antes de l.

    Los corchetes [ y ] encierran una seriede alternativas, de las que debemoselegir una.

    Para terminar, el asterisco (*) indica que

    la multiplicacin est entre comillas ('),para distinguirla de la utilizacinmetalingstica del asterisco como unoperador EBNF.

    Los diagramas sintcticos se usanpara clarificar el significado devarias construcciones de lenguajescuando se ensean a losprogramadores noveles.

  • 7/31/2019 Intro ores Sintaxis Semantica

    23/32

    May 15, 2012 Ing. Rubn Daro Garca Guzmn

    Sistema de tipos y semnticaIntroduccin

    Los sistemas de tipos se usan en eldiseo de lenguajes para formalizarla definicin de los tipos de datosde un lenguaje y su utilizacincorrecta en los programas.

    La definicin de un lenguaje de

    programacin est completa slocuando estn completamentedefinidos su semntica, su sintaxisy su sistema de tipos.

    La semntica de un lenguaje deprogramacin es una definicin delsignificado de cualquier programa

    que sea sintcticamente vlidodesde los puntos de vista de lasintaxis concreta y de la revisin detipos esttica.

    Una idea intuitiva sencilla delsignificado de un programa es: loque sucede en un computadorcuando se ejecuta el programa.semntica operacional.

    Otro modo de ver el significado de

    un programa es: empezar con unaespecificacin formal de lo quetiene que hacer el programa ydespus demostrar que lo hace,utilizando una serie sistemtica depasos lgicos. semnticaaxiomtica.

    Un tercer modo de ver la semnticade un lenguaje de programacin es:definir el significado de cada tipo deinstruccin que se produce en lasintaxis (abstracta) como unafuncin matemtica detransformacin de estado.semntica denotativa.

  • 7/31/2019 Intro ores Sintaxis Semantica

    24/32

    May 15, 2012 Ing. Rubn Daro Garca Guzmn

    Sistema de tipos y semnticaIntroduccin

    Los tres mtodos de definicinsemntica tienen ventajas einconvenientes.

    La semntica operacional Tiene la ventaja de representar el

    significado del programa directamenteen el cdigo de una mquina real (osimulada).

    Esto es tambin una debilidad, debido aque la definicin de la semntica de unlenguaje de programacin con base auna arquitectura en particular, restringela utilidad de esa definicin a losescritores-compiladores yprogramadores que trabajen conarquitecturas diferentes.

    Adems, el equipo virtual en el que seejecutan las instrucciones tambinnecesita una descripcin semntica, loque aade complejidad y puede lleva adefiniciones viciadas.

    La semntica axiomtica Es particularmente til en la exploracin

    de las propiedades formales de losprogramas.

    A los programadores que deben escribirprogramas correctos a partir de unconjunto de especificaciones preciso, les

    resulta particularmente til este estilosemntico.

    La semntica denotativa Es valiosa porque su estilo funcional

    lleva la definicin semntica de unlenguaje a un nivel alto de precisinmatemtica.

    A travs de ella, los diseadores delenguajes obtienen una definicinfuncional del significado de laelaboracin de cada lenguaje que esindependiente de cualquier arquitecturade equipo en particular.

  • 7/31/2019 Intro ores Sintaxis Semantica

    25/32

    May 15, 2012 Ing. Rubn Daro Garca Guzmn

    Sistema de tipos y semnticaSistemas de tipos

    Un tipo es un conjunto bien definido devalores y de operaciones en esosvalores.

    Un sistema de tipos es un sistemabien definido para asociar tipos convariables y otros objetos definidos en unprograma.

    Los lenguajes que permiten asociar sloun tipo a una variable se llamanlenguajes de tipos estticos, los quepermiten asociar una variable a variostipos se llaman de tipos dinmicos.

    Un lenguaje de tipos estticospermite que las reglas de su tipo sedefinan completamente con base a su

    sintaxis abstracta. Se llama a estadefinicin semntica esttica. Un error de tipo es un error en tiempo

    de ejecucin que se produce cuando seintenta una operacin en un valor parael que no est bien definida.

    Un lenguaje de programacin es detipos estrictos si su sistema de tipospermite la deteccin de todos loserrores de tipo de los programas, ya seaen tiempo de compilacin como entiempo de ejecucin, antes de que lainstruccin en la que se puedenproducir se ejecute. (El hecho de queun lenguaje tenga tipos estticos odinmicos no evita que tenga tiposestrictos.). Java es un lenguaje contipos estrictos, mientras que C no lo es.

    Generalmente, los tipos estrictosfomentan programas ms fiables y seconsideran como una virtud en el diseode lenguajes de programacin.

    Un programa es de tipo seguro sisabemos que no tiene errores de tipo.

    Por definicin, todos los programas deun lenguaje con tipos estrictos son detipo seguro.

    Un lenguaje es de tipo seguro si todossus programas lo son.

  • 7/31/2019 Intro ores Sintaxis Semantica

    26/32

    May 15, 2012 Ing. Rubn Daro Garca Guzmn

    Sistema de tipos y semnticaSistemas de tipos

    Un tipo es un conjunto bien definido devalores y de operaciones en esosvalores.

    Un sistema de tipos es un sistemabien definido para asociar tipos convariables y otros objetos definidos en unprograma.

    Los lenguajes que permiten asociar sloun tipo a una variable se llamanlenguajes de tipos estticos, los quepermiten asociar una variable a variostipos se llaman de tipos dinmicos.

    Un lenguaje de tipos estticospermite que las reglas de su tipo sedefinan completamente con base a su

    sintaxis abstracta. Se llama a estadefinicin semntica esttica. Un error de tipo es un error en tiempo

    de ejecucin que se produce cuando seintenta una operacin en un valor parael que no est bien definida.

    Un lenguaje de programacin es detipos estrictos si su sistema de tipospermite la deteccin de todos loserrores de tipo de los programas, ya seaen tiempo de compilacin como entiempo de ejecucin, antes de que lainstruccin en la que se puedenproducir se ejecute. (El hecho de queun lenguaje tenga tipos estticos odinmicos no evita que tenga tiposestrictos.). Java es un lenguaje contipos estrictos, mientras que C no lo es.

    Generalmente, los tipos estrictosfomentan programas ms fiables y seconsideran como una virtud en el diseode lenguajes de programacin.

    Un programa es de tipo seguro sisabemos que no tiene errores de tipo.

    Por definicin, todos los programas deun lenguaje con tipos estrictos son detipo seguro.

    Un lenguaje es de tipo seguro si todossus programas lo son.

  • 7/31/2019 Intro ores Sintaxis Semantica

    27/32

    May 15, 2012 Ing. Rubn Daro Garca Guzmn

    Sistema de tipos y semnticaCmo formalizar un sistema de tipos?

    Una manera de definir el sistema detipos de un lenguaje es escribir unconjunto de especificaciones defunciones que defina lo que significapara un programa ser de tipo seguro.

    Se pueden escribir estas reglas comofunciones de valor booleano y sepueden expresar ideas como todas lasvariables declaradas tienen nombresnicos o todas las variables utilizadasen el programa deben declararse.

    La base de esta definicin funcional esun mapa de tipos, que es un conjuntode parejas que representa las variablesdeclaradas y sus tipos.

    tm = {v1, t1, v2, t2, ... , vn, tn} Donde cada viindica una Variable ycada tiindica su Tipo declarado.

    Un ejemplo de mapa de tipos para unprograma que tiene tres variablesdeclaradas; i y j con tipo int y p con tipoboolean: tm = {i, int, j, int, ... , p, boolean}

    Un trato formal de comprobacin de tiposestticos de un programa se basa en laexistencia de un mapa de tipos que se hayaextrado de las Declaraciones que aparecen enla parte superior del programa.

    Se puede expresar la comprobacin de tiposestticos de un lenguaje en notacin funcional,en la que cada regla que ayuda a definir elsistema de tipos es una funcin con valorbooleano V.

    V devuelve true o false dependiendo de si unmiembro en particular de una clase sintcticaabstracta es vlido o no, en relacin a estasreglas. Es decir, V: Class B

    Por ejemplo, supongamos que queremosdefinir la idea de que una lista dedeclaraciones es vlida si todas sus variablestienen identificadores nicos entre s.Podemos expresar esta idea de maneraprecisa del siguiente modo:

  • 7/31/2019 Intro ores Sintaxis Semantica

    28/32

    May 15, 2012 Ing. Rubn Daro Garca Guzmn

    Sistema de tipos y semnticaDominios semnticos y transformacin de estado

    Los nmeros naturales, enteros,nmeros reales y los booleanos ysus propiedades matemticasproporcionan un contextofundamental para el diseo delenguajes de programacin.

    Estos conjuntos son ejemplos dedominios semnticos delenguajes de programacin.

    Un dominio semntico escualquier conjunto cuyaspropiedades y operaciones sonbien entendidasindependientemente y sobre el quese basan, en ltima instancia, lasfunciones que definen la semnticade un lenguaje.

    Tres dominios semnticos tiles delos lenguajes de programacin sonel entorno, la memoria y lasubicaciones.

    El entorno es un conjunto depares que une variables especficascon ubicaciones de memoria.

    La memoria, es un conjunto depares que une ubicacionesespecficas con valores.

    Las ubicaciones, en cada caso, sonlos nmeros naturales N. Por ejemplo, supongamos que

    tenemos variables i y j con valores13 y -1.

    Supongamos que las ubicacionesde memoria estn numeradas en

    serie comenzando por el 0 y que,las variables i y j estn asociadascon las ubicaciones de memoria154 y 155.

  • 7/31/2019 Intro ores Sintaxis Semantica

    29/32

    May 15, 2012 Ing. Rubn Daro Garca Guzmn

    Sistema de tipos y semnticaDominios semnticos y transformacin de estado

    El estado de un programa es el producto de su entorno y su memoria. Define sencillamente el estado de un programa como un conjunto de pares

    (v, val) que representa todas las variables activas y sus valores asignadosactualmente en alguna etapa durante la ejecucin del programa.

    Aqu, cada viindica una variable y cada valiindica su valor asignadoactualmente.

    Antes de que el programa comience su ejecucin, = { v1, undef , v2, undef , ..., vm, undef}.

    Tambin utilizamos la expresin (v) para indicar la funcin que recuperael valor de la variable v del estado actual.

  • 7/31/2019 Intro ores Sintaxis Semantica

    30/32

    May 15, 2012 Ing. Rubn Daro Garca Guzmn

    Sistema de tipos y semnticaSemntica operacional

    La semntica operacional de unprograma proporciona una definicin delsignificado del programa simulando elcomportamiento del mismo en unmodelo de equipo que tenga unaorganizacin de memoria y un conjuntode instrucciones muy sencillos (aunqueno necesariamente realistas).

    Uno de los primeros modelos desemntica operacional fue el equipoSECD, que ofreca una base paradefinir formalmente la semntica deLisp.

    Los modelos de semntica operacionalestructurados utilizan un mtodo

    basado en reglas y unas cuantassuposiciones sencillas sobre lacapacidad lgica y aritmtica del equiposubyacente.

    Un modelo de semntica operacionalpuede utilizar la notacin (e) => v pararepresentar la computacin de un valorv de la expresin e en estado .

    Si e es una constante, (e) es sencillamente elvalor de esa constante en el dominiosemntico subyacente.

    Si e es una variable, (e) es el valor de esavariable en el estado actual .

    La segunda convencin de notacin de lasemntica operacional es una regla deejecucin.

    Una regla de ejecucin tiene la forma

    Se lee: si la premisa es verdadera, entoncesla conclusin es verdadera.

  • 7/31/2019 Intro ores Sintaxis Semantica

    31/32

    May 15, 2012 Ing. Rubn Daro Garca Guzmn

    Sistema de tipos y semnticaSemntica Axiomtica

    Aunque es importante que losprogramadores y los escritores decompiladores comprendan lo que haceun programa en todas lascircunstancias, tambin es importanteque los programadores puedanconfirmar, o probar, que hace lo que sesupone que tiene que hacer bajo todas

    las circunstancias. Es decir, que el programa es correcto

    de una manera convincente. La semntica axiomtica nos ofrece

    un medio para desarrollar dichaspruebas.

    La semntica axiomtica nos ofrece un

    medio para razonar sobre losprogramas y sus clculos. Esto permite a los programadores

    predecir el comportamiento de unprograma de un modo ms convincentey circunspecto que ejecutando elprograma varias veces.

    La semntica axiomtica se basa en lanocin de asertos, que es un predicadoque describe el estado de un programaen cualquier momento de su ejecucin.

    El aserto Qm max(a,b) define elsignificado de la funcin max(a,b).

    Para demostrar que la el programa

    calcula realmente la funcin max, hayque demostrar que la expresin lgica Qes equivalente al significado de eseprograma. Q es la poscondicin delprograma max.

    La semntica axiomtica permite derivarlgicamente una serie de predicadosrazonando sobre el comportamiento de

    cada instruccin individual en elprograma. Comenzando por lapostcondicin Q y trabajando haciaatrs.

  • 7/31/2019 Intro ores Sintaxis Semantica

    32/32

    Sistema de tipos y semnticaSemntica Denotativa

    La semntica denotativa de unlenguaje define los significados de loselementos abstractos de dicho lenguajecomo un grupo de funciones detransformacin del entorno y del estado.

    El entorno de un programa es elconjunto de objetos y tipos que estn

    activos en cada paso de su ejecucin. El estado de un programa es elconjunto de todos los objetos activos ysus valores actuales.

    Estas funciones de transformacin deestado dependen de la suposicin dealgunos tipos y transformacionesprimitivas.

    Mientras que la semntica axiomticaes valiosa para la claridad delsignificado de un programa como untexto abstracto, la semnticaoperacional (o denotativa) se centra enel significado de un programa como unobjeto activo dentro de un entornocomputacional (o funcional).

    La utilizacin de la semntica denotativapara la definicin del significado tieneventajas y desventajas.

    Una ventaja es que podemos utilizar lasdenotaciones funcionales del significadode un programa como base paraespecificar un intrprete para el lenguaje.

    la semntica denotativa es muy utilizaday permite definir el significado de unprograma abstracto como una serie detransformaciones de estado resultantede la aplicacin de una serie defunciones M.

    Estas funciones definen individualmenteel significado de cada clase de

    elementos que nos podemos encontraren el rbol de sintaxis abstracta de unprograma (Program, Block, Conditional,Loop, Assignment, etc.).