Está en la página 1de 32

INTRODUCCIN A LOS COMPILADORES ANLISIS LXICO, SINTCTICO Y SEMNTICO

Universidad de Caldas Estructuras de Lenguajes

May 15, 2012

Ing. Rubn Daro Garca Guzmn

Agenda
Introduccin a los compiladores
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 y semntica


Sistemas de tipos Dominios semnticos y transformacin de estado Semntica operacional Semntica axiomtica Semntica denotativa

May 15, 2012

Ing. Rubn Daro Garca Guzmn

Introduccin a los compiladores


Definicin
Un 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.

May 15, 2012

Ing. Rubn Daro Garca Guzmn

Introduccin a los compiladores


Tipos 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 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.

May 15, 2012

Ing. Rubn Daro Garca Guzmn

Introduccin a los compiladores


Fases de un compilador
Modelo de anlisis y sntesis en la compilacin En 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:
May 15, 2012 Ing. Rubn Daro Garca Guzmn

Introduccin a los compiladores


El contexto de un compilador
Adems 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 proposiciones del 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.

May 15, 2012

Ing. Rubn Daro Garca Guzmn

Introduccin a los compiladores


Anlisis del programa fuente
En la compilacin el anlisis consta de tres fases Anlisis lxico: Tambin llamado Para la expresin de pascal vf := vi + v * 60 Anlisis lineal. En este se lee la cadena de caracteres que constituye se agruparan los componentes lxicos as: el programa de izquierda a derecha, y el identificador vf se agrupa en componentes lxicos, el smbolo de asignacin := que son secuencias de caracteres conel identificador vi el signo de suma + significado colectivo. En esta etapa el compilador revisa el identificador v el signo de multiplicacin * que los tokens contengan los smbolos adecuados del lenguaje. el nmero 60 Requiere por parte del diseador del Los espacios en blanco se eliminan lenguaje, una adecuada clasificacin durante el anlisis lxico. de componentes lxicos (tokens). Dentro de las categoras lxicas se tienen: identificadores, nmeros, separadores, operadores, comentarios, espacios en blanco.
May 15, 2012 Ing. Rubn Daro Garca Guzmn

Introduccin a los compiladores


Anlisis del programa fuente
Anlisis 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.
May 15, 2012

1. Cualquier identificador es una expresin. 2. Cualquier nmero es una expresin. 3. Si expresin1 y expresin2 son expresiones, entonces tambin lo son: expresin1 + expresin2 expresin1 * expresin2 (expresin1)

Ing. Rubn Daro Garca Guzmn

Introduccin a los compiladores


Anlisis del programa fuente
Anlisis 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.

May 15, 2012

Ing. Rubn Daro Garca Guzmn

Introduccin a los compiladores


Las 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 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.

May 15, 2012

Ing. Rubn Daro Garca Guzmn

Introduccin a los compiladores


Las fases de un compilador
Las 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.
May 15, 2012 Ing. Rubn Daro Garca Guzmn

Introduccin a los compiladores


Las fases de un compilador
Optimacin 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.

May 15, 2012

Ing. Rubn Daro Garca Guzmn

Introduccin a los compiladores


El agrupamiento de las fases
Las 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 pasada Reduccin 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.

May 15, 2012

Ing. Rubn Daro Garca Guzmn

Introduccin a los compiladores


Herramientas para la construccin
Existen 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.

May 15, 2012

Ing. Rubn Daro Garca Guzmn

Sintaxis
Definicin y generalidades

La 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.
May 15, 2012 Ing. Rubn Daro Garca Guzmn

Sintaxis
Procesamiento de lenguajes y mtodos formales
Un 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 Metalenguaje

May 15, 2012

Ing. Rubn Daro Garca Guzmn

Sintaxis
BNF y el anlisis lxico una sintaxis BNF sencilla es mostrada en la figura.

May 15, 2012

Ing. Rubn Daro Garca Guzmn

Sintaxis
El Anlisis Lxico y el proceso de compilacin
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. Las 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.

May 15, 2012

Ing. Rubn Daro Garca Guzmn

Sintaxis
Las expresiones regulares y el anlisis lxico
Las 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).
May 15, 2012 Ing. Rubn Daro Garca Guzmn

Sintaxis
El Anlisis sintctico
La 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 lxico La 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.

May 15, 2012

Ing. Rubn Daro Garca Guzmn

Sintaxis
Ambigedad
Una 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 AmbExp

Esta gramtica permite que una expresin tenga dos interpretaciones distintas en tiempo de ejecucin. Por ejemplo, consideremos el fragmento de programa 2 - 3 - 4.

May 15, 2012

Ing. Rubn Daro Garca Guzmn

Sintaxis
Variaciones de BNF para el anlisis sintctico
El 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 -Term Term Factor | Term * Factor | Term / 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.

Se puede representar como


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

Los diagramas sintcticos se usan para clarificar el significado de varias construcciones de lenguajes cuando se ensean a los programadores noveles.

May 15, 2012

Ing. Rubn Daro Garca Guzmn

Sistema de tipos y semntica


Introduccin
Los 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.

May 15, 2012

Ing. Rubn Daro Garca Guzmn

Sistema de tipos y semntica


Introduccin
Los tres mtodos de definicin semntica tienen ventajas e inconvenientes. La semntica operacional
Tiene 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 axiomtica
Es 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 denotativa
Es 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.

May 15, 2012

Ing. Rubn Daro Garca Guzmn

Sistema de tipos y semntica


Sistemas de tipos
Un 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.

May 15, 2012

Ing. Rubn Daro Garca Guzmn

Sistema de tipos y semntica


Sistemas de tipos
Un 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.

May 15, 2012

Ing. Rubn Daro Garca Guzmn

Sistema de tipos y semntica


Cmo 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} 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

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}
May 15, 2012

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:

Ing. Rubn Daro Garca Guzmn

Sistema de tipos y semntica


Dominios semnticos y transformacin de estado
Los 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.
May 15, 2012

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.

Ing. Rubn Daro Garca Guzmn

Sistema de tipos y semntica


Dominios 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 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.

May 15, 2012

Ing. Rubn Daro Garca Guzmn

Sistema de tipos y semntica


Semntica operacional
La 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 .
May 15, 2012

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.

Ing. Rubn Daro Garca Guzmn

Sistema de tipos y semntica


Semntica Axiomtica
Aunque 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.
May 15, 2012

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.

Ing. Rubn Daro Garca Guzmn

Sistema de tipos y semntica


Semntica Denotativa
La 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).
May 15, 2012

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.).

Ing. Rubn Daro Garca Guzmn