Intro Compiladores Sintaxis Semantica

Embed Size (px)

Citation preview

INTRODUCCIN A LOS COMPILADORES ANLISIS LXICO, SINTCTICO Y SEMNTICO

03 de febrero de 2012Ing. Rubn Daro Garca GuzmnINTRODUCCIN A LOS COMPILADORESANLISIS LXICO, SINTCTICO Y SEMNTICOUniversidad de CaldasEstructuras de Lenguajes03 de febrero de 2012Ing. Rubn Daro Garca GuzmnAgendaIntroduccin a los compiladoresDefinicin de compiladorTipos de compiladoresAnlisis del programa fuenteFases de un compiladorEl agrupamiento de fasesHerramientas para la construccin de compiladores

SintaxisProcesamiento de lenguajes naturales y mtodos formalesAnlisis sintcticoSistema de tipos y semnticaSistemas de tiposDominios semnticos y transformacin de estadoSemntica operacionalSemntica axiomticaSemntica denotativa03 de febrero de 2012Ing. Rubn Daro Garca GuzmnIntroduccin a los compiladoresDefinicinUn compilador es un programa que lee un programa escrito en un lenguaje (cdigo fuente) y lo traduce a un programa equivalente en otro lenguaje (cdigo objeto). En el proceso se informa al usuario sobre la presencia de errores en el cdigo fuente.

03 de febrero de 2012Ing. Rubn Daro Garca GuzmnIntroduccin a los compiladoresTipos de compiladoresCompiladores de una pasada: Generan el cdigomquina 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 cambios en el cdigo para mejorar su eficiencia, pero manteniendo la funcionalidad del programa original.Compiladores cruzados: Se ejecutan en una mquina pero el cdigo objeto que producen es para otra mquina.Compiladores JIT (Just-In-Time): Forman parte de un intrprete y compilan partes del cdigo segn se necesitan.03 de febrero de 2012Ing. Rubn Daro Garca GuzmnIntroduccin a los compiladoresFases de un compiladorModelo de anlisis y sntesis en la compilacinEn la compilacin hay 2 partes, anlisis y sntesis. El anlisis divide el programa fuente en sus elementos componentes y crea una representacin intermedia de este.De las dos partes, la sntesis requiere las tcnicas ms especializadas. La sntesis construye el programa objeto deseado a partir de la representacin intermedia.En el anlisis se determinan las operaciones que implica el programa fuente y se registran en una estructura de rbol, llamado rbol sintctico.Por ejemplo, para la expresin vf:=vi+v*60 el rbol sintctico podra ser:

03 de febrero de 2012Ing. Rubn Daro Garca GuzmnIntroduccin a los compiladoresEl contexto de un compiladorAdems del compilador, se pueden necesitar otros programas para crear un programa objeto ejecutable.El preprocesador: Programa encargado de reunir diferentes mdulos que conforman el programa fuente. Este puede tambin expandir abreviaturas llamadas macros a proposicionesdel lenguaje fuente. En la figura, el compilador crea cdigo en lenguaje ensamblador, el cual es traducido por un ensamblador a cdigo de mquina.Luego se enlaza a algunas rutinas de biblioteca para producir el cdigo ejecutable.

03 de febrero de 2012Ing. Rubn Daro Garca GuzmnIntroduccin a los compiladoresAnlisis del programa fuenteEn la compilacin el anlisis consta de tres fasesAnlisis lxico: Tambin llamado Anlisis lineal. En este se lee la cadena de caracteres que constituye el programa de izquierda a derecha, y se agrupa en componentes lxicos, que son secuencias de caracteres con significado colectivo.En esta etapa el compilador revisa que los tokens contengan los smbolos adecuados del lenguaje.Requiere por parte del diseador del lenguaje, una adecuada clasificacin de 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 identificador vf el smbolo de asignacin := el identificador vi el signo de suma +el identificador v el signo de multiplicacin *el nmero 60 Los espacios en blanco se eliminan durante el anlisis lxico. 03 de febrero de 2012Ing. Rubn Daro Garca GuzmnIntroduccin a los compiladoresAnlisis del programa fuenteAnlisis Sintctico: Conocido igualmente como Anlisis jerrquico, se encarga de agrupar los componentes lxicos jerrquicamente en colecciones anidadas con un significado colectivo. Se usan rboles sintcticos para representar esas agrupaciones.La estructura jerrquica de un programa normalmente se expresa utilizando reglas recursivas.De igual forma, muchos lenguajes definen recursivamente las proposiciones mediante reglas como:Si identificador1 es un identificador y expresin2 es una expresin, entonces: Identificador1 := expresin2 es una proposicin.

Cualquier identificador es una expresin. Cualquier nmero es una expresin. Si expresin1 y expresin2 son expresiones, entonces tambin lo son: expresin1 + expresin2expresin1 * expresin2 (expresin1)03 de febrero de 2012Ing. Rubn Daro Garca GuzmnIntroduccin a los compiladoresAnlisis del programa fuenteAnlisis semntico: Se realizan revisiones que aseguran que los componentes de un programa se ajustan de un modo significativo.La fase de anlisis semntico revisa el programa fuente para tratar de encontrar errores semnticos Rene la informacin sobre los tipos para la fase posterior de generacin de cdigo.Utiliza la estructura jerrquica determinada por la fase de anlisis sintctico para identificar los operadores y operandos de expresiones y proposiciones.Se encarga adems de la verificacin de tipos. El compilador verifica si cada operador tiene operandos permitidos por la especificacin del lenguaje fuente.

03 de febrero de 2012Ing. Rubn Daro Garca GuzmnIntroduccin a los compiladoresLas fases de un compiladorUn 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 el programa fuente y rene informacin sobre los distintos atributos de cada identificador.Una tabla de smbolos es una estructura de datos que contiene un registro por cada identificador, con los campos para los atributos del identificador.Deteccin e informacin de errores: Cada fase puede encontrar errores, despus de detectar un error, cada fase debe tratar de alguna manera ese error, para poder continuar con la compilacin, permitiendo la deteccin de ms errores en el programa fuente. Las fases de anlisis sintctico y semntico generalmente manejan la mayor cantidad de los errores detectables por el compilador.

03 de febrero de 2012Ing. Rubn Daro Garca GuzmnIntroduccin a los compiladoresLas fases de un compiladorLas fases de anlisis: Conforme avanza la traduccin, la representacin interna del programa fuente que tiene el compilador se modifica. Estas fases se refieren a las de anlisis lxico, sintctico y semntico ya definidas.Generacin de cdigo interno: Algunos compiladores generan una representacin intermedia explicita del programa fuente. Se puede considerar esta como un programa para una mquina abstracta.Debe ser fcil de producir y fcil de traducir al programa objeto.Por ejemplo el cdigo de tres direcciones, que traduce el cdigo en una secuencia de instrucciones, cada una de las cuales tiene como mximo tres operandos.

03 de febrero de 2012Ing. Rubn Daro Garca GuzmnIntroduccin a los compiladoresLas fases de un compiladorOptimacin de cdigo: Trata de mejorar el cdigo intermedio, de modo que resulte un cdigo de mquina rpido de ejecutar. Generacin de cdigo: Por lo general consiste en cdigo de mquina relocalizable o cdigo ensamblador. Las posiciones de memoria se seleccionan para cada una de las variables usadas por el programa. Cada instruccin intermedia se traduce en una secuencia de instrucciones de mquina que ejecuta la misma tarea.

03 de febrero de 2012Ing. Rubn Daro Garca GuzmnIntroduccin a los compiladoresEl agrupamiento de las fasesLas actividades de compilacin se agrupan normalmente en dos o mas fases.Etapa inicial: Recoge aquellas que dependen principalmente del lenguaje fuente.anlisis lxico y sintctico, creacin de tabla de smbolos, anlisis semntico y la generacin de cdigo intermedio, con su respectivo manejo de errores. Etapa final: Incluye las partes que dependen de la mquina objeto y del lenguaje intermedio.Fase de optimacin de cdigo, la generacin de cdigo, el manejo de errores y las operaciones que involucran la tabla de smbolos.Pasadas: Se acostumbra aplicar varias fases de un compilador en una sola pasada.Una pasada es la lectura de un archivo de entrada y en la escritura de un archivo de salida.Es mejor agrupar los proceso de compilacin por pasadas y no por fases.El anlisis lxico, el anlisis sintctico, el anlisis semntico y la generacin de cdigo intermedio pueden agruparse en una pasadaReduccin del nmero de pasadas: Es recomendable tener pocas pasadas.La lectura y escritura de archivos toma tiempo e implica la carga de todo el programa en memoria.03 de febrero de 2012Ing. Rubn Daro Garca GuzmnIntroduccin a los compiladoresHerramientas para la construccinExisten herramientas ya definidas que se pueden usar para el desarrollo de un compilador. Las mejores herramientas son las que ocultan los detalles del algoritmo de generacin y producen componentes que se pueden integrar fcilmente al resto 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. La organizacin del analizador lxico es en esencia un autmata finito. Dispositivos de traduccin dirigida por la sintaxis: Producen grupos de rutinas que recorren 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 mquina objeto. Dispositivos para anlisis de flujo de datos: Consiste en la recoleccin de informacin sobre la forma en que se transmiten valores de una parte del programa a cada una de las otras partes. 03 de febrero de 2012Ing. Rubn Daro Garca GuzmnSintaxisDefinicin y generalidadesLa sintaxis de un lenguaje de programacin es una definicin de lo que constituye un programa gramaticalmente vlido en dicho lenguaje.La sintaxis queda especificada por un conjunto de reglas.Una definicin de la sintaxis clara, concisa y formal es especialmente importante en los lenguajes de programacin.

03 de febrero de 2012Ing. Rubn Daro Garca GuzmnSintaxisProcesamiento de lenguajes y mtodos formalesUn Metalenguaje es un lenguaje usado para definir otros lenguajes.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 son programas legtimos y aislar todas las dems (las que tienen errores sintcticos de varios tipos) Las expresiones regulares tambin es un Metalenguaje03 de febrero de 2012Ing. Rubn Daro Garca GuzmnSintaxisBNF y el anlisis lxicouna sintaxis BNF sencilla es mostrada en la figura.

03 de febrero de 2012Ing. Rubn Daro Garca GuzmnSintaxisEl Anlisis Lxico y el proceso de compilacinLas etapas de anlisis semntico y de optimizacin analizan la consistencia semntica (comprobando, por ejemplo, la utilizacin consistente de operadores y tipos de datos) y transforman el texto de forma que pueda utilizar de forma eficiente la arquitectura en la que se ejecutar el programa.Para terminar, la etapa de generacin de cdigo utiliza la representacin abstracta resultante como base para la generacin de cdigo mquina ejecutable.

Todos los programas deben ser analizados para comprobar su correccin sintctica antes de ser interpretados o traducidos a cdigo mquina. Al nivel ms elemental, el proceso de anlisis lxico separa los caracteres individuales del programa en una cadena de tokens que se analiza sintcticamente, de uno en uno, hasta un nivel de anlisis superior.03 de febrero de 2012Ing. Rubn Daro Garca GuzmnSintaxisLas expresiones regulares y el anlisis lxicoLas Expresiones regulares son una herramienta muy utilizada en el diseo de lenguajes para especificar formalmente cada clase de token. Estas permiten conceptos como una o ms apariciones de un dgito. Es ms, se puede crear de forma similar una expresin regular para definir el significado de un ldentificador: [a-zA-Z] [a-zA-Z0-9]*lo que significa una letra seguida por una o ms apariciones de una letra o un dgito.Las expresiones regulares se han convertido en una herramienta muy popular del diseo de lenguajes, porque admiten la generacin automtica de analizadores lxicos sin problemas.Dos generadores bastante utilizados son el Lex (que genera cdigo de C) y el JLex (que genera cdigo de Java).

03 de febrero de 2012Ing. Rubn Daro Garca GuzmnSintaxisEl Anlisis sintcticoLa sintaxis completa de un lenguaje de programacin utiliza el resultado del anlisis lxico como base para la definicin de la estructura de todas las partes diferentes de programa que aparecen por encima del nivel lxicoLa sintaxis de un lenguaje utiliza BNF como herramienta principal para proporcionar una definicin precisa y una gua estricta para que la fase de anlisis sintctico detecte errores sintcticos y desarrolle una interpretacin abstracta a partir de un flujo de tokens.Consideremos las categoras sintcticas Asignacin y Expresin, que definen todas las secuencias de Pasos de testigo que describen los clculos aritmticos y asignaciones de resultados a una variable. la Figura 2.8 muestra una derivacin de la Expresin x+2*y.

03 de febrero de 2012Ing. Rubn Daro Garca GuzmnSintaxisAmbigedadUna gramtica es ambigua si permite que una cadena se convierta en uno o ms rboles sintcticos diferentes. Por ejemplo, la gramtica ambigua, AmbExp, para expresiones con enteros y sustracciones.AmbEx Integer | AmbExp AmbExpEsta gramtica permite que una expresin tenga dos interpretaciones distintas en tiempo de ejecucin.Por ejemplo, consideremos el fragmento de programa 2 - 3 - 4.

03 de febrero de 2012Ing. Rubn Daro Garca GuzmnSintaxisVariaciones de BNF para el anlisis sintcticoEl BNF extendido (EBNF) fue introducido para simplificar la especificacin de la recursividad en las reglas de gramtica y para introducir la idea de una parte opcional en la parte derecha de una regla. Expression Term | Expression + Term | Expression -TermTerm Factor | Term * Factor | Term / Factor Se puede representar comoExpression Term{[+| ] Term}*Term Factor{ ['*' | /] Factor} *(*) significa cero o ms apariciones de los smbolos que estn entre llaves { } inmediatamente antes de l.Los corchetes [ y ] encierran una serie de alternativas, de las que debemos elegir una.Para terminar, el asterisco (*) indica que la multiplicacin est entre comillas ('), para distinguirla de la utilizacin metalingstica del asterisco como un operador EBNF.Los diagramas sintcticos se usan para clarificar el significado de varias construcciones de lenguajes cuando se ensean a los programadores noveles.

03 de febrero de 2012Ing. Rubn Daro Garca GuzmnSistema de tipos y semnticaIntroduccinLos sistemas de tipos se usan en el diseo de lenguajes para formalizar la definicin de los tipos de datos de un lenguaje y su utilizacin correcta en los programas.La definicin de un lenguaje de programacin est completa slo cuando estn completamente definidos su semntica, su sintaxis y su sistema de tipos. La semntica de un lenguaje de programacin es una definicin del significado de cualquier programa que sea sintcticamente vlido desde los puntos de vista de la sintaxis concreta y de la revisin de tipos esttica.Una idea intuitiva sencilla del significado de un programa es: lo que sucede en un computador cuando se ejecuta el programa. semntica operacional.Otro modo de ver el significado de un programa es: empezar con una especificacin formal de lo que tiene que hacer el programa y despus demostrar que lo hace, utilizando una serie sistemtica de pasos lgicos. semntica axiomtica.Un tercer modo de ver la semntica de un lenguaje de programacin es: definir el significado de cada tipo de instruccin que se produce en la sintaxis (abstracta) como una funcin matemtica de transformacin de estado. semntica denotativa. 03 de febrero de 2012Ing. Rubn Daro Garca GuzmnSistema de tipos y semnticaIntroduccinLos tres mtodos de definicin semntica tienen ventajas e inconvenientes.La semntica operacionalTiene la ventaja de representar el significado del programa directamente en el cdigo de una mquina real (o simulada). Esto es tambin una debilidad, debido a que la definicin de la semntica de un lenguaje de programacin con base a una arquitectura en particular, restringe la utilidad de esa definicin a los escritores-compiladores y programadores que trabajen con arquitecturas diferentes. Adems, el equipo virtual en el que se ejecutan las instrucciones tambin necesita una descripcin semntica, lo que aade complejidad y puede lleva a definiciones viciadas. La semntica axiomticaEs particularmente til en la exploracin de las propiedades formales de los programas. A los programadores que deben escribir programas correctos a partir de un conjunto de especificaciones preciso, les resulta particularmente til este estilo semntico.La semntica denotativaEs valiosa porque su estilo funcional lleva la definicin semntica de un lenguaje a un nivel alto de precisin matemtica.A travs de ella, los diseadores de lenguajes obtienen una definicin funcional del significado de la elaboracin de cada lenguaje que es independiente de cualquier arquitectura de equipo en particular.

03 de febrero de 2012Ing. Rubn Daro Garca GuzmnSistema de tipos y semnticaSistemas de tiposUn tipo es un conjunto bien definido de valores y de operaciones en esos valores. Un sistema de tipos es un sistema bien definido para asociar tipos con variables y otros objetos definidos en un programa. Los lenguajes que permiten asociar slo un tipo a una variable se llaman lenguajes de tipos estticos, los que permiten asociar una variable a varios tipos se llaman de tipos dinmicos. Un lenguaje de tipos estticos permite que las reglas de su tipo se definan completamente con base a su sintaxis abstracta. Se llama a esta definicin semntica esttica. Un error de tipo es un error en tiempo de ejecucin que se produce cuando se intenta una operacin en un valor para el que no est bien definida.Un lenguaje de programacin es de tipos estrictos si su sistema de tipos permite la deteccin de todos los errores de tipo de los programas, ya sea en tiempo de compilacin como en tiempo de ejecucin, antes de que la instruccin en la que se pueden producir se ejecute. (El hecho de que un lenguaje tenga tipos estticos o dinmicos no evita que tenga tipos estrictos.). Java es un lenguaje con tipos estrictos, mientras que C no lo es. Generalmente, los tipos estrictos fomentan programas ms fiables y se consideran como una virtud en el diseo de lenguajes de programacin. Un programa es de tipo seguro si sabemos que no tiene errores de tipo. Por definicin, todos los programas de un lenguaje con tipos estrictos son de tipo seguro.Un lenguaje es de tipo seguro si todos sus programas lo son.

03 de febrero de 2012Ing. Rubn Daro Garca GuzmnSistema de tipos y semnticaSistemas de tiposUn tipo es un conjunto bien definido de valores y de operaciones en esos valores. Un sistema de tipos es un sistema bien definido para asociar tipos con variables y otros objetos definidos en un programa. Los lenguajes que permiten asociar slo un tipo a una variable se llaman lenguajes de tipos estticos, los que permiten asociar una variable a varios tipos se llaman de tipos dinmicos. Un lenguaje de tipos estticos permite que las reglas de su tipo se definan completamente con base a su sintaxis abstracta. Se llama a esta definicin semntica esttica. Un error de tipo es un error en tiempo de ejecucin que se produce cuando se intenta una operacin en un valor para el que no est bien definida.Un lenguaje de programacin es de tipos estrictos si su sistema de tipos permite la deteccin de todos los errores de tipo de los programas, ya sea en tiempo de compilacin como en tiempo de ejecucin, antes de que la instruccin en la que se pueden producir se ejecute. (El hecho de que un lenguaje tenga tipos estticos o dinmicos no evita que tenga tipos estrictos.). Java es un lenguaje con tipos estrictos, mientras que C no lo es. Generalmente, los tipos estrictos fomentan programas ms fiables y se consideran como una virtud en el diseo de lenguajes de programacin. Un programa es de tipo seguro si sabemos que no tiene errores de tipo. Por definicin, todos los programas de un lenguaje con tipos estrictos son de tipo seguro.Un lenguaje es de tipo seguro si todos sus programas lo son.

03 de febrero de 2012Ing. Rubn Daro Garca GuzmnSistema de tipos y semnticaCmo formalizar un sistema de tipos?Una manera de definir el sistema de tipos de un lenguaje es escribir un conjunto de especificaciones de funciones que defina lo que significa para un programa ser de tipo seguro.Se pueden escribir estas reglas como funciones de valor booleano y se pueden expresar ideas como todas las variables declaradas tienen nombres nicos o todas las variables utilizadas en el programa deben declararse. La base de esta definicin funcional es un mapa de tipos, que es un conjunto de parejas que representa las variables declaradas y sus tipos.tm = {v1, t1, v2, t2, ... , vn, tn} Donde cada vi indica una Variable y cada ti indica su Tipo declarado.Un ejemplo de mapa de tipos para un programa que tiene tres variables declaradas; i y j con tipo int y p con tipo boolean: tm = {i, int, j, int, ... , p, boolean} Un trato formal de comprobacin de tipos estticos de un programa se basa en la existencia de un mapa de tipos que se haya extrado de las Declaraciones que aparecen en la parte superior del programa. Se puede expresar la comprobacin de tipos estticos de un lenguaje en notacin funcional, en la que cada regla que ayuda a definir el sistema de tipos es una funcin con valor booleano V.V devuelve true o false dependiendo de si un miembro en particular de una clase sintctica abstracta es vlido o no, en relacin a estas reglas. Es decir, V: Class B Por ejemplo, supongamos que queremos definir la idea de que una lista de declaraciones es vlida si todas sus variables tienen identificadores nicos entre s. Podemos expresar esta idea de manera precisa del siguiente modo:

03 de febrero de 2012Ing. Rubn Daro Garca GuzmnSistema de tipos y semnticaDominios semnticos y transformacin de estadoLos nmeros naturales, enteros, nmeros reales y los booleanos y sus propiedades matemticas proporcionan un contexto fundamental para el diseo de lenguajes de programacin. Estos conjuntos son ejemplos de dominios semnticos de lenguajes de programacin. Un dominio semntico es cualquier conjunto cuyas propiedades y operaciones son bien entendidas independientemente y sobre el que se basan, en ltima instancia, las funciones que definen la semntica de un lenguaje. Tres dominios semnticos tiles de los lenguajes de programacin son el entorno, la memoria y las ubicaciones.El entorno es un conjunto de pares que une variables especficas con ubicaciones de memoria.La memoria, es un conjunto de pares que une ubicaciones especficas con valores.Las ubicaciones, en cada caso, son los nmeros naturales N. Por ejemplo, supongamos que tenemos variables i y j con valores 13 y -1. Supongamos que las ubicaciones de memoria estn numeradas en serie comenzando por el 0 y que, las variables i y j estn asociadas con las ubicaciones de memoria 154 y 155.

03 de febrero de 2012Ing. Rubn Daro Garca GuzmnSistema de tipos y semnticaDominios semnticos y transformacin de estadoEl 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 asignados actualmente en alguna etapa durante la ejecucin del programa.

Aqu, cada vi indica una variable y cada vali indica su valor asignado actualmente. Antes de que el programa comience su ejecucin, = {v1, undef, v2, undef, ..., vm, undef}. Tambin utilizamos la expresin (v) para indicar la funcin que recupera el valor de la variable v del estado actual.

03 de febrero de 2012Ing. Rubn Daro Garca GuzmnSistema de tipos y semnticaSemntica operacionalLa semntica operacional de un programa proporciona una definicin del significado del programa simulando el comportamiento del mismo en un modelo de equipo que tenga una organizacin de memoria y un conjunto de instrucciones muy sencillos (aunque no necesariamente realistas).Uno de los primeros modelos de semntica operacional fue el equipo SECD, que ofreca una base para definir formalmente la semntica de Lisp. Los modelos de semntica operacional estructurados utilizan un mtodo basado en reglas y unas cuantas suposiciones sencillas sobre la capacidad lgica y aritmtica del equipo subyacente.Un modelo de semntica operacional puede utilizar la notacin (e) => v para representar la computacin de un valor v de la expresin e en estado .

Si e es una constante, (e) es sencillamente el valor de esa constante en el dominio semntico subyacente.Si e es una variable, (e) es el valor de esa variable en el estado actual . La segunda convencin de notacin de la semntica operacional es una regla de ejecucin.Una regla de ejecucin tiene la forma

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

03 de febrero de 2012Ing. Rubn Daro Garca GuzmnSistema de tipos y semnticaSemntica AxiomticaAunque es importante que los programadores y los escritores de compiladores comprendan lo que hace un programa en todas las circunstancias, tambin es importante que los programadores puedan confirmar, o probar, que hace lo que se supone 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 dichas pruebas. La semntica axiomtica nos ofrece un medio para razonar sobre los programas y sus clculos.Esto permite a los programadores predecir el comportamiento de un programa de un modo ms convincente y circunspecto que ejecutando el programa varias veces.La semntica axiomtica se basa en la nocin de asertos, que es un predicado que describe el estado de un programa en cualquier momento de su ejecucin.El aserto Qm max(a,b) define el significado de la funcin max(a,b).Para demostrar que la el programa calcula realmente la funcin max, hay que demostrar que la expresin lgica Q es equivalente al significado de ese programa. Q es la poscondicin del programa max.La semntica axiomtica permite derivar lgicamente una serie de predicados razonando sobre el comportamiento de cada instruccin individual en el programa. Comenzando por la postcondicin Q y trabajando hacia atrs.

03 de febrero de 2012Ing. Rubn Daro Garca GuzmnSistema de tipos y semnticaSemntica DenotativaLa semntica denotativa de un lenguaje define los significados de los elementos abstractos de dicho lenguaje como un grupo de funciones de transformacin del entorno y del estado.El entorno de un programa es el conjunto de objetos y tipos que estn activos en cada paso de su ejecucin.El estado de un programa es el conjunto de todos los objetos activos y sus valores actuales.Estas funciones de transformacin de estado dependen de la suposicin de algunos tipos y transformaciones primitivas. Mientras que la semntica axiomtica es valiosa para la claridad del significado de un programa como un texto abstracto, la semntica operacional (o denotativa) se centra en el significado de un programa como un objeto activo dentro de un entorno computacional (o funcional).

La utilizacin de la semntica denotativa para la definicin del significado tiene ventajas y desventajas.Una ventaja es que podemos utilizar las denotaciones funcionales del significado de un programa como base para especificar un intrprete para el lenguaje.la semntica denotativa es muy utilizada y permite definir el significado de un programa abstracto como una serie de transformaciones de estado resultante de la aplicacin de una serie de funciones M.Estas funciones definen individualmente el significado de cada clase de elementos que nos podemos encontrar en el rbol de sintaxis abstracta de un programa (Program, Block, Conditional, Loop, Assignment, etc.).