Está en la página 1de 10

LENGUAJES AUTMATAS I UNIDAD 1 INTRODUCCIN TEORA DE LENGUAJES FORMALES.

1.1 ALFABETO
Se llama alfabeto a un conjunto finito, no vaco, cuyos elementos se denominan letras o smbolos. Se denomina palabra a toda secuencia finita de letras formada con los smbolos de un alfabeto. Se definen los alfabetos por la enumeracin de los smbolos que contiene. Un "smbolo" es una entidad abstracta. Las letras y los dgitos son ejemplos de smbolos usados con frecuencia.

Se utilizan metasmbolos (tal como {, }, =, y la coma) para escribir sobre lo que hablamos. Desde el contexto siempre ser claro, si se trata de un smbolo del alfabeto o si se trata de un metasmbolo. Usamos subndices para distinguir diferentes alfabetos. Usamos normalmente las minsculas como alfabeto S = {a, . . . , z}, en los ejemplos normalmente letras desde el principio del alfabeto. Cardinalidad del alfabeto (nmero de elementos del alfabeto): |S| > 0, |S| < 8

1.1. CADENA
Una cadena (o palabra) es una secuencia finita de smbolos yuxtapuestos. Por ejemplo a, b y c son smbolos y casa es una cadena. La longitud de una cadena w que se denota como |w|, es el nmero de smbolos que componen la cadena. Por ejemplo casa tiene una longitud 4. Habitualmente, se emplean las letras minsculas del principio del alfabeto (o dgitos) para designar a los smbolos y las letras minsculas del final del alfabeto, normalmente w, x, y y z, para designar cadenas.

La cadena vaca, denotada por E es aquella que presenta cero apariciones de smbolos, es una cadena que puede construirse en cualquier alfabeto. La concatenacin de dos cadenas es la cadena que se forma al escribir la primera seguida de la segunda, sin que haya espacio entre ellas, Por ejemplo la concatenacin de padre y madre es padremadre. La yuxtaposicin se utiliza como el operador de concatenacin. Esto es si w y x son cadenas, entonces wx es la concatenacin de estas dos cadenas. La cadena vaca es la identidad para el operador de concatenacin, es decir Ew=wE para cada cadena de w.

1.3 LENGUAJES
Un lenguaje es un conjunto de cadenas, todas ellas seleccionadas de un subconjunto finito donde el conjunto es un determinado alfabeto. Es una forma de representar informacin basada en un conjunto finito de signos o smbolos.

El conjunto vaco y el conjunto formado por la cadena vaca { E } son lenguajes. El conjunto de palndromos (cadenas que se leen igual de izquierda a derecha y viceversa) sobre el alfabeto {0,1} es un lenguaje infinito. Algunos elementos de este lenguaje son E, 0, 1, 00, 01,010, y 1101011. Por consiguiente vemos que el conjunto de todos los palndromos sobre una coleccin finita de smbolos no es, tcnicamente hablando, un lenguaje, porque sus cadenas no se construyen colectivamente a partir de un alfabeto.

1.4 TIPOS DE LENGUAJES


Lenguajes de bajo nivel Son lenguajes totalmente dependientes de la mquina, es decir que el programa que se realiza con este tipo de lenguajes no se pueden migrar o utilizar en otras mquinas. Al estar prcticamente diseados a medida del hardware, aprovechan al mximo las caractersticas del mismo. Dentro de este grupo se encuentran: El lenguaje maquina: este lenguaje ordena a la mquina las operaciones fundamentales para su funcionamiento. Consiste en la combinacin de 0's y 1's para formar las ordenes entendibles por el hardware de la mquina. Este lenguaje es mucho ms rpido que los lenguajes de alto nivel.

La desventaja es que son bastantes difciles de manejar y usar, adems de tener cdigos fuente enormes donde encontrar un fallo es casi imposible. El lenguaje ensamblador es un derivado del lenguaje mquina y est formado por abreviaturas de letras y nmeros llamadas mnemotcnicos. Con la aparicin de este lenguaje se crearon los programas traductores para poder pasar los programas escritos en lenguaje ensamblador a lenguaje mquina. Como ventaja con respecto al cdigo mquina es que los cdigos fuentes eran ms cortos y los programas creados ocupaban menos memoria. Las desventajas de este lenguaje siguen siendo prcticamente las mismas que las del lenguaje ensamblador, adiendo la dificultad de tener que aprender un nuevo lenguaje difcil de probar y mantener.

Lenguajes de alto nivel Son aquellos que se encuentran ms cercanos al lenguaje natural que al lenguaje mquina. Estn dirigidos a solucionar problemas mediante el uso de EDD's. Nota: EDD's son las abreviaturas de Estructuras Dinamicas de Datos, algo muy utilizado en todos los lenguajes de programacin. Son estructuras que pueden cambiar de tamao durante la ejecucin del programa. Nos permiten crear estructuras de datos que se adapten a las necesidades reales de un programa. Se tratan de lenguajes independientes de la arquitectura del ordenador. Por lo que, en principio, un programa escrito en un lenguaje de alto nivel, lo puedes migrar de una mquina a otra sin ningn tipo de problema. Estos lenguajes permiten al programador olvidarse por completo del funcionamiento interno de la maquina/s para la que estn diseando el programa. Tan solo necesitan un traductor que entiendan el cdigo fuente como las caractersticas de la mquina. Suelen usar tipos de datos para la programacin y hay lenguajes de propsito general (cualquier tipo de aplicacin) y de propsito especfico (como FORTRAN para trabajos cientficos). Lenguajes de Medio nivel Estos lenguajes se encuentran en un punto medio entre los dos anteriores. Dentro de estos lenguajes podra situarse C ya que puede acceder a los registros del sistema, trabajar con direcciones de memoria, todas ellas caractersticas de lenguajes de bajo nivel y a la vez realizar operaciones de alto nivel. Generaciones La evolucin de los lenguajes de programacin se puede dividir en 5 etapas o

generaciones. Primera generacin: lenguaje mquina. Segunda generacin: se crearon los primeros lenguajes ensambladores. Tercera generacin: se crean los primeros lenguajes de alto nivel. Ej. C, Pascal, Cobol Cuarta generacin. Son los lenguajes capaces de generar cdigo por si solos, son los llamados RAD, con lo cuales se pueden realizar aplicaciones sin ser un experto en el lenguaje. Aqu tambin se encuentran los lenguajes orientados a objetos, haciendo posible la reutilizacin d partes del cdigo para otros programas. Ej. Visual, Natural Adabe. Quinta generacin: aqu se encuentran los lenguajes orientados a la inteligencia artificial. Estos lenguajes todava estn poco desarrollados. Ej. LISP

1.5 Herramientas Computacionales Ligadas Con Lenguajes.


Herramientas Desarrolladas En Programacin De Sistemas Editores de estructuras

Un editor de estructuras toma como entrada una secuencia de rdenes para construir un programa fuente. El editor de estructuras no solo realiza las fuentes de creacin y modificacin de textos de un editor de textos ordinarios, sino que tambin analiza el texto del programa, imponiendo al programa fuente una estructura jerrquica apropiada. De esa manera el editor de estructuras puede realizar tareas adicionales tiles para la preparacin de programas. Ejemplos: Editores de C, Pascal, Visual Studio (Fox Pro, Basic, etc.). Para desarrollar un programa en Fortran, el primer paso es obviamente, escribir el cdigo fuente, utilizando un editor de texto disponible en la computadora y guardndolo en archivos texto de extensin .f, .f90, .f95, .for o de extensin que soporte el compilador y el sistema operativo de la computadora. En computadoras que funcionan bajo una versin de LINUX, lo usual que se utiliza, como editor de texto, es emacs. El Cornell Program Synthesizer (CPS). Es quiz el ejemplo ms conocido y el ms referenciado en la literatura. Ha servido de ejemplo para

desarrollar otros. Permite programar en un subconjunto del lenguaje PL/I denominado PL/CS. Gandalf es un conjunto de varios subproyectos. Su objetivo principal fue crear un entorno completo de desarrollo de software, y no slo un entorno de programacin. Doxygen: Genera documentacin de cdigo C/C++ en forma de pginas web, incluyendo diversos ndices, el cdigo fuente coloreado e indexado, e incluso diagramas de dependencia entre mdulos. Javadoc: Para lenguaje Java. Usa un formato prefijado de comentario para las descripciones, incluyendo marcas HTML embebidas y palabras clave introducidas con el smbolo @. Se generan documentos en forma de pginas web. AdaBrowse/AdaDoc/Ada2html: Son herramientas similares a las anteriores para cdigo en lenguaje Ada. Igualmente generan pginas web. GVim es la versin para Windows del editor de Unix Vim, un editor para programadores altamente configurable. JEdit es un editor orientado a la programacin. Komodo Edit es un editor para lenguajes dinmicos (Perl, PHP, Python, Ruby y TCL) y de pginas web (JavaScript, CSS, HTML y XML). Este programa es la versin libre de un programa comercial. Minimum Profit es un editor de texto para programadores. Notepad++ es un editor de cdigo fuente para programadores basado en Scintilla para java y c. Impresoras estticas

Una impresora esttica analiza un programa y lo imprime de forma que la estructura del programa resulte claramente visible. Por ejemplo los comentarios pueden aparecer con un tipo de letra especial, y las proposiciones pueden aparecer con una indentacin proporcional a la profundidad de su anidamiento en la organizacin jerrquica de las proposiciones. EJEMPLOS: Word, Excel, Power Point, Photoshop, etc. Verificadores estticos

Un verificador esttico lee un programa, lo analiza e intenta descubrir errores potenciales sin ejecutar el programa. La parte del anlisis a menudo es similar a la que se encuentra en los compiladores de optimizacin as un verificador esttico puede detectar si hay partes de un programa que nunca se podrn

ejecutar o si cierta variable se usa antes de ser definida. Puede detectar errores de lgica, como intentar utilizar una variable real como apuntador, empleando las tcnicas de verificacin de tipos. Ejemplos: Editores de C y Pascal. Verificadores estticos de sintaxis (como lint) permiten detectar muchos errores antes de la compilacin. (Algo parecido a lo que se obtiene con la opcin -fsyntax- only del compilador de GNU gcc). Intrpretes: Un intrprete realiza las operaciones que implica el programa fuente. Para una proposicin de asignacin, por ejemplo, un intrprete podra construir un rbol y despus efectuar las operaciones de los nodos con forme recorre el rbol.

Muchas veces los intrpretes se usan para ejecutar lenguajes de rdenes, pues cada operador que se ejecuta en un lenguaje de rdenes suele ser una invocacin de una rutina compleja, como un editor o un compilado Ejemplos: Los intrpretes (para lenguajes como Lisp o Basic, o para programas con sus propios lenguajes interpretados como Derive o Mathematica) Shells de sistemas operativos o de alguna aplicacin como un SMBD. http://es.scribd.com/doc/159086023/Lenguajes-y-Automatas-i#download

1.6 Estructura De Un Traductor.


Un traductor es un mediador entre dos entidades: emisoras y receptoras, los mediadores enmascaran la complejidad y heterogeneidad de los lenguajes. Un traductor convierte un lenguaje de entrada (cdigo fuente) a una de salida (cdigo objeto). Un traductor se define como un programa que traduce o convierte desde un texto o programa escrito en un lenguaje fuente hasta un texto o programa equivalente escrito en un lenguaje destino produciendo, si cabe, mensajes de error. Los traductores engloban tanto a los compiladores (en los que el lenguaje destino suele ser cdigo mquina) como a los intrpretes (en los que el lenguaje destino est constituido por las acciones atmicas que puede ejecutar el intrprete). La figura 1.1 muestra el esquema bsico que compone a un compilador/intrprete.

Tipos de traductores. Compiladores Es aquel traductor que tiene como entrada una sentencia en lenguaje formal y como salida tiene un fichero ejecutable, es decir, realiza una traduccin de un cdigo de alto nivel a cdigo mquina (tambin se entiende por compilador aquel programa que proporciona un fichero objeto en lugar del ejecutable final). Intrpretes Es como un compilador, solo que la salida es una ejecucin. El programa de entrada se reconoce y ejecuta a la vez. No se produce un resultado fsico (cdigo mquina) sino lgico (una ejecucin). Su principal ventaja es que permiten una fcil depuracin. Entre los inconvenientes podemos citar, en primer lugar, la lentitud de ejecucin, ya que al ejecutar a la vez que se traduce no puede aplicarse un alto grado de optimizacin. Otro inconveniente es que durante la ejecucin, el intrprete debe residir en memoria, por lo que consumen ms recursos. La figura 1.2 muestra los pasos a seguir en estos lenguajes para obtener una ejecucin.

En el proceso de traduccin se identifican dos fases principales:

Fase de Anlisis

Fase de Sntesis

1.7 Fases De Un Compilador.


Definicin de Compilador. Un compilador es un programa informtico que traduce un programa escrito en un lenguaje de programacin a otro lenguaje de programacin, es decir programa que permite traducir el cdigo fuente de un programa en lenguaje de alto nivel, a otro lenguaje de nivel inferior (lenguaje mquina). Generando un programa equivalente a capaz de interpretar.

FASES DE UN COMPILADOR.

Anlisis Lxico. En esta fase se lee los caracteres del programa fuente y se agrupan en cadenas que representan los componentes lxicos. A la secuencia de caracteres que representa un componente lxico se le llama lexema (o con su nombre en ingls token). Anlisis Sintctico. Los componentes lxicos se agrupan gramaticales que el compilador utiliza para sintetizar la salida. en frases

Anlisis Semntico. Intenta detectar instrucciones que tengan la estructura sintctica correcta, pero que no tengan significado para la operacin implicada. Generacin de cdigo Intermedio. Se puede considerar esta operacin intermedia como un subprograma para una mquina abstracta, a esta

representacin debe tener dos propiedades importantes: debe ser fcil de producir y fcil de traducir al programa objeto. Optimizacin de Cdigo. Se trata de mejorar el cdigo intermedio, de modo que resulte un cdigo de mquina ms rpido de ejecutar. Generacin de Cdigo. Esta constituye la fase final de un compilador. Administrador de la tabla de smbolos. Se encarga de manejar los accesos a la tabla de smbolos, en cada una de las etapas de compilacin de un programa. Manejador de errores. Es posible encontrar errores. De esta forma podrn controlarse ms eficientemente los errores encontrados en cada una de las fases de la compilacin de un programa. Cada fase puede encontrar errores y debe tratarlo para continuar con la Compilacin, permitiendo detectar ms errores Las fases de Anlisis Sintctico y Semntico manejan la mayora de los errores En el Anlisis Semntico se detectan errores donde la estructura sintctica es correcta pero no tiene significado la operacin (Por. ej. sumar dos ID, donde uno es el nombre de una matriz y el otro un nombre de procedimiento). Programas Relacionados con un Compilador. Preprocesadores (producen la entrada para una computadora). Procesamiento de Macros Inclusin de archivos Preprocesadores racionales (estructura de control) Extensiones a lenguajes (bases de datos). Ensambladores Producen cdigo ensamblador que se pasa a un ensamblador para su procesamiento (versin mnemotcnica del cdigo de mquina: nombres de operaciones y nombres de direcciones de memoria).