2. El análisis léxico.

Tamaño: px
Comenzar la demostración a partir de la página:

Download "2. El análisis léxico."

Transcripción

1 Compiladores. Análisis léxico El análisis léxico. Esta fase del compilador es la única que esta en contacto con el programa fuente. Su función es leer las instrucciones del programa y generar una serie de elementos básicos ( componentes léxicos ) utilizados para su construcción. Para el analizador léxico, la instrucción leída es una simple cadena de caracteres sin una estructura en particular. Mediante el uso de técnicas adecuadas descompondrá esta cadena en una serie de elementos fundamentales del lenguaje utilizado para su escritura. Estos elementos básicos, en el contexto de los lenguajes de programación, serán nombres de variables, palabras reservadas del lenguaje ( while, for, switch, etc. ), constantes literales, diversos operadores aritméticos, relacionales y lógicos, etc. Por ejemplo, la construcción siguiente puede descomponerse en los elementos indicados: TotalImpuesto = SubTotal * Taza / 100 Variable Número entero Operador aritmético Variable Operador aritmético Variable Operador de asignación El analizador léxico trabaja en cooperación con el analizador sintáctico, según se muestra en la Fig Fig.2.1. Interacción de un analizador léxico con el analizador sintáctico.

2 Compiladores. Análisis léxico 2-2 Como puede verse, al analizador léxico trabaja a solicitud del analizador sintáctico. Este último se encarga de verificar que las diferentes instrucciones estén bien escritas verificando un conjunto de reglas de escrituras dictadas por una gramática. Estas diferentes reglas se enuncian de manera general haciendo uso de diferentes componentes elementales conocidos como componentes léxicos. Por ejemplo, una regla de escritura sería algo similar a: exp-aritm := variable const-numérica exp-aritm op-aritm exp-aritm que se lee una expresión aritmética es una variable o una constante numérica o una expresión aritmética seguida por un operador aritmético y otra expresión aritmética. Independientemente de la complejidad de la regla anterior, nótese como se hace alusión a elementos como variable, const-numérica, etc. y no a cosas como x, suma, 34, etc. Cuando el analizador sintáctico encuentra el elemento denominado variable, llamará al analizador léxico para comprobar que efectivamente el programador escribió una cadena que se identifique como ejemplo de variable. El analizador léxico realiza su trabajo procesando la cadena leída ( cadena de entrada ) de izquierda a derecha y carácter por carácter. Cuando anuncie un reconocimiento dejará un indicador en la cadena de entrada para reiniciar el proceso cuando sea solicitado de nuevo por el analizador sintáctico. El analizador léxico, al estar en contacto con la cadena de entrada puede realizar algunas tareas adicionales como: Compactar la cadena eliminando espacios, tabuladores, etc. Ignorar los comentarios. Expandir macros. Estas funciones pudieran requerir que el analizador léxico procese dos veces la cadena de entrada. En una primera pasada se pueden ignorar espacios y expandir macros, y en la segunda realizar el trabajo de reconocimiento de los componentes léxicos. Otra función importante del analizador léxico esta relacionada con los mensajes de error que generan tanto el analizador sintáctico como el semántico. El analizador léxico conoce cuantas líneas y cuantos caracteres se han procesado. Por lo tanto, un mensaje de error sintáctico puede señalar la línea y la posición dentro de la línea donde se detectó el error. Hay varias razones para separar el analizador léxico del sintáctico:

3 Compiladores. Análisis léxico Un diseño sencillo es quizá la consideración más importante. La separación de las fases puede simplificar la labor de análisis sintáctico al no incluirse la comprobación de comentarios o de separadores durante esta fase, por ejemplo. 2. Se mejora la eficiencia del compilador. Gran parte de la labor del compilador consiste en el reconocimiento de los componentes léxicos. Esta labor se puede optimizar con técnicas especializadas para el manejo de los buffers de entrada así como de las formulas para el reconocimiento de los componentes léxicos. 3. Se mejora la transportabilidad del compilador. Las peculiaridades de los caracteres de entrada y otras anomalías de los dispositivos de entrada pueden limitarse al análisis léxico. Por ejemplo, el uso de o de ** para representar la exponenciación. 2.1 Componentes léxicos, tokens, patrones y lexemas. En el contexto del análisis léxico, los términos componente léxico, patrón y lexema se utilizan con significados específicos. En general, hay un conjunto de cadenas en la cadena de entrada para las cuales se produce como salida el mismo componente léxico ( por ejemplo, en la cadena x = y + 3, las cadenas x, y genera como salida el componente léxico variable ). Este conjunto de cadenas se describe mediante una regla llamada patrón asociado al componente léxico. Se dice que el patrón concuerda con cada cadena del conjunto. Un lexema es una secuencia de caracteres en el cadena de entrada con la que concuerda el patrón para un componente léxico. Los lexemas para el componente léxico que concuerdan con el patrón representan cadenas de caracteres en el programa fuente que se pueden tratar juntos como una unidad léxica. En la mayoría de los lenguajes de programación, se consideran componentes léxicos los siguientes: palabras reservadas, operadores, identificadores, constantes, cadenas literales y signos de puntuación como paréntesis, coma y punto. Un patrón es una regla que describe el conjunto de lexemas que pueden representar a un determinado componente léxico en los programas fuente. Por ejemplo, el patrón para operador relacional es el conjunto de las cadenas <, >, <=, >=,== <>. En algunos casos, el patrón es más complejo como es el caso para el componente léxico identificador ( describa el procedimiento para nombres de variables en C ). Un token es la representación interna de una instancia del componente léxico. Consta de dos partes, un identificador de componente léxico, que distingue un componente de otro y es un número entero asignado a cada componente, por ejemplo:

4 Compiladores. Análisis léxico 2-4 Componente léxico Identificador Identificador 1 Palabra reservada 2 Número entero 3 Operador aritmético 4 Y el segundo elemento es un apuntador a la tabla de símbolos asociada al componente léxico donde se ha almacenado o se encuentra la cadena que permitió el reconocimiento del componente. En Fig se analiza la cadena de entrada total = subtotal + impuesto y se generan los tokens correspondientes al componente léxico identificador ( 1,1 ), ( 1,2 ), y ( 1,3 ). Cadena de entrada total = subtotal + impuesto ( 1, 1 ) ( 1, 2 ) ( 1, 3 ) Tabla de sìmbolos del componente léxico identificador total subtotal impuesto Fig Tokens correspondientes a los componentes léxicos. Hay que recordar que el compilador mantiene un conjunto de tabla de símbolos ( elementos básicos ) donde almacena las instancias diferentes de cada componente que encuentra en su análisis de las instrucciones, junto con algunos atributos adicionales que apoyan a las fases del compilador. El analizador léxico es el encargado de crear las tablas y definir algunos valores de los atributos de los elementos; por ejemplo, los lexemas encontrados, tipos de identificadores, ubicación dentro del archivo de salida, etc. 2.2 Errores léxicos. Son pocos los errores que se pueden detectar durante el análisis léxico dado que tiene una visión muy restringida del lenguaje que se compila. Por ejemplo, si el programador escribe la instrucción: fir ( x=0 ; x<20; ++x )..

5 Compiladores. Análisis léxico 2-5 El analizador léxico no podría determinar si fir es en realidad for y se concreta a reconocer la cadena fir como un identificador. Supóngase que el analizador léxico no puede continuar porque ningún patrón asociado con algún componente léxico concuerda con un prefijo de la cadena que resta por analizar. Una estrategia a seguir para continuar el análisis sería ignorar algunos caracteres de la cadena de entrada hasta lograr una concordancia. Esto pudiera confundir al analizador sintáctico pero en un ambiente de cómputo interactivo sería una estrategia adecuada. Otras posibles acciones tendientes a recuperarse del error serían: 1. borrar un carácter extraño 2. insertar un carácter que falta 3. reemplazar un carácter incorrecto por otro correcto 4. intercambiar dos caracteres adyacentes. Estas acciones se llaman transformaciones de error y una estrategia alterna a la anterior sería observar si un prefijo de la entrada restante se puede transformar en un lexema válido mediante una sola transformación de error. Esta estrategia da por supuesto que la mayoría de los errores léxicos se deben a una sola transformación de error, suposición que normalmente, pero no siempre, se cumple en la práctica. 2.3 Especificación de los componentes léxicos. En las secciones anteriores se ha dicho que con cada componente léxico hay un patrón de concordancia asociado. Este patrón define un conjunto de cadenas que se reconocen como instancias del componente léxico. Como el análisis léxico trata con cadenas, comenzaremos esta sección precisando algunos conceptos elementales. Alfabeto, cadenas y lenguajes. El término alfabeto o clase de carácter denota cualquier conjunto finito de símbolos. Ejemplos típicos de símbolos son las letras y los dígitos. El alfabeto binario esta compuesto por los símbolos 0 y 1. Los códigos ASCII y EBCDIC son ejemplos del alfabeto de una computadora. Una cadena sobre algún alfabeto es una secuencia finita de símbolos tomados de ese alfabeto. A menudo se utilizan los términos frase y palabra como sinónimos de cadena. La longitud de una cadena s, representado como s, es el número de apariciones de símbolos en s. Por ejemplo camino es 6. La cadena vacía, representada por ε, es una

6 Compiladores. Análisis léxico 2-6 cadena que tiene longitud 0 ( esta formada por 0 símbolos ). La tabla 2.1 recoge algunos términos asociados con partes de una cadena. Término Prefijo de s Sufijo de s Subcadena de s Prefijo, sufijo o subcadena propios de s Subsecuencia de s Definición Una cadena que se obtiene eliminando cero o más símbolos desde la derecha de la cadena s; por ejemplo, ban es un prefijo de bandera. Una cadena que se forma suprimiendo cero o más símbolos desde la izquierda de una cadena s; por ejemplo, era es un sufijo de bandera. Una cadena que se obtiene suprimiendo un prefijo y un sufijo de s; por ejemplo, ande es una subcadena de bandera. Todo prefijo y sufijo de s es una subcadena de s, pero no toda subcadena de s es un prefijo o un sufijo de s. Para toda cadena s, tanto s como ε son prefijos, sufijos y subcadenas de s. Cualquier cadena no vacía x que sea, respectivamente, un prefijo, sufijo o subcadena de s tal que x s. Cualquier cadena formada mediante la eliminación de cero o más símbolos no necesariamente contiguos a s; por ejemplo, bada es una subsecuencia de bandera. Tabla 2.1. Términos de parte de una cadena. Un lenguaje se refiere a cualquier conjunto de cadenas de un alfabeto fijo. Esta definición es muy extensa y abarca lenguajes abstractos como, el conjunto vacío, o el conjunto { ε } que sólo tiene a la cadena vacía, o inclusive el conjunto de todas las instrucciones del lenguaje PASCAL. Si x e y son cadenas, entonces la concatenación de x e y, que se escribe xy, es la cadena que resulta de agregar y a x. Por ejemplo, si x = caza e y = fortunas, entonces xy = cazafortunas. La cadena vacía ε es el elemento identidad que se concatena, Es decir xε = x, y εx = x. Cuando se considera la concatenación como un producto, cabe definir la exponenciación de cadenas de la siguiente manera: Se define s 0 = ε, y para i > 0 se define s i como s i-1 s. Dado que εs = s, s 1 = s. Entonces s 2 = ss, s 3 = sss, etcétera. Ejercicio 2.1. Dada las cadenas x=perro y y=bravo, realice las operaciones siguientes:

7 Compiladores. Análisis léxico xy 2. xyx 3. x 3 4. ( xy ) 2 Operaciones aplicadas a lenguajes. Hay varias operaciones aplicadas a lenguajes, para el análisis léxico son importantes la unión, la concatenación y la cerradura definidas en la Tabla 2.2. para los lenguajes L y M. Operación Definición unión de L y M; L U M L U M= { s s está en L o s está en M } concatenación de L y M, que se escribe LM LM = { st s está en L y t esta en M } cerradura de Kleene de L, que se escribe L* = U L i L* i = 0 cerradura positiva de L, que se escribe L + L + = U i = 1 L* denota cero o más concatenaciones de L L + denota una o más concatenaciones de L Tabla 2.2. Definiciones de operaciones sobre lenguajes. También se puede extender el operador de exponenciación a los lenguajes definiendo L 0 como { ε }, y L i como L i-1 L. Por tanto L i es L concatenado consigo mismo i-1 veces. Ejercicio 2.2 Sea L el conjunto { A, B, C,, Z, a, b, c,, z } y D el conjunto { 0, 1, 2,, 9 }. Aunque los elementos tanto de L como de D son símbolos, un símbolo puede ser considerado como una cadena de longitud 1. Por lo tanto, L es el conjunto de cadenas formadas por una letra mayúscula o minúscula, y D es el conjunto de las cadenas formadas por un dígito del 0 al 9. Defina el contenido de los conjuntos siguientes: 1. L U D 2. LD 3. L 4 4. L* 5. L ( L U D )* 6. D + L i

8 Compiladores. Análisis léxico 2-8 Expresiones regulares. El patrón asociado a un componente léxico permite reconocer un conjunto de cadenas como instancias de ese componente léxico. Por ejemplo, el conjunto de todos los identificadores utilizados en un programa. Al escribir una instrucción se utilizan una secuencia de cadenas que son instancias de diferentes componentes léxicos, formando la cadena de entrada que procesa el analizador léxico. El conjunto de cadenas que permite la identificación de un componente léxico ( instancias válidas de ese componente ) puede ser conocido con anticipación al proceso de compilación, por ejemplo, el conjunto formado por cadenas que permiten reconocer un operador relacional ( OR= { <, <=, >, >=, ==, <> } ). Otros conjuntos no se conocerán sino hasta que se haya procesado todo el programa, por ejemplo el de los identificadores utilizados. Independientemente de que dichos conjuntos sean conocidos o no con anticipación, el analizador léxico necesita una descripción del conjunto de forma tal que pueda reconocer si una cadena pertenece o no al conjunto. La notación de las expresiones regulares se ha utilizado para tal efecto. Una expresión regular se construye a partir de expresiones regulares más simples utilizando un conjunto de reglas definitorias. Cada expresión regular r representa un lenguaje L(r). Las reglas de definición especifican como se forma L(r) combinando de varias maneras los lenguajes representados por las subexpresiones de r. Las siguientes son las reglas que definen las expresiones regulares del alfabeto. Asociada a cada regla hay una especificación del lenguaje representado por la expresión regular que se está definiendo. 1. ε es una expresión regular designada por { ε }; es decir, el conjunto que contiene la cadena vacía. 2. si a es un símbolo de, entonces a es una expresión regular designada por { a }; por ejemplo, el conjunto que contiene la cadena a. Aunque se usa la misma notación para las tres, técnicamente, la expresión regular a es distinta a la cadena a o del símbolo a. El contexto aclarará si se habla de a como expresión regular, cadena o símbolo. 3. Suponiendo que r y s sean expresiones regulares representadas por los lenguajes L(r) y L(s), entonces, a. (r) (s) es una expresión regular representada por L(r) U L(s). b. (r) (s) es una expresión regular representada por L(r)L(s). c. (r)* es una expresión regular representada por ( L(r) )*.

9 Compiladores. Análisis léxico 2-9 d. (r) es una expresión regular representada por L(r). Esta regla establece que, si se desea, se pueden poner pares de paréntesis adicionales en torno a las expresiones regulares. Se dice que un lenguaje designado por una expresión regular es un conjunto regular. La especificación de una expresión regular es un ejemplo de definición recursiva. Las reglas 1 y 2 son la base de la definición; se usa el término símbolo básico para referirse a ε o a un símbolo de que aparezcan en una expresión regular. La regla 3 proporciona el paso inductivo. Se pueden evitar los paréntesis innecesarios en las expresiones regulares si se adoptan las convenciones: 1. el operador unario * tiene la mayor precedencia y es asociativo por la izquierda, 2. la concatenación tiene la segunda mayor precedencia y es asociativa por la izquierda, 3. tiene la menor precedencia y es asociativo por la izquierda. Según estas convenciones (a) ((b)*(c)) es equivalente a a b*c. Las dos expresiones representan el conjunto de cadenas que tienen una sola a, o cero o más b seguidas por una c. La Tabla 2.3 describe las propiedades algebraicas de las expresiones regulares. Axioma Descripción r s = s r es conmutativo r (s t) = ( r s) t es asociativo (rs)t = r(st) La concatenación es asociativa r(s t) = rs rt La concatenación distribuye sobre (s t)r = sr tr ε r = r ε es el elemento identidad para la concatenación. r ε = r r* = ( r ε)* La relación entre * y ε r** = r* * es idempotente Tabla 2.3. Propiedades algebraicas de las expresiones regulares. Si dos expresiones regulares r y s representan al mismo lenguaje, se dice que r y s son equivalentes y se escribe r s. Por ejemplo a b b a.

10 Compiladores. Análisis léxico 2-10 Se pueden encontrar expresiones regulares equivalentes aplicando las propiedades algebraicas de las expresiones. Definiciones regulares. Por conveniencia de notación, puede ser deseable dar nombres a las expresiones regulares y definir expresiones regulares utilizando dichos nombres como si fueran símbolos. Si es un alfabeto de símbolos básicos, entonces una definición regular es una secuencia de definiciones de la forma: d 1 r 1 d 2 r 2.. d n r n donde cada d i es un nombre distinto, y cada r i es una expresión regular sobre los símbolos de U { d 1, d 2,, d n }, es decir, los símbolos básicos y los nombres previamente definidos. Ejemplo 2.1. La expresión regular que define las cadenas formadas por un solo dígito es: d En lugar de utilizar la letra d para designar la expresión puede crearse la definición regular dígito. De la misma manera, la definición regular letra sería letra A B C Z a c. z. Si los identificadores son un conjunto de cadenas de letras y dígitos que empiezan con una letra, entonces una definición regular para identificadores sería: Ejercicio 2.3. ids letra ( letra digito )* 1. Forme la expresión regular para los números enteros con signo sin importar cuantos dígitos integran la cadena numérica. 2. Defina una expresión regular para las cadenas numéricas que represente números en punto flotante con la parte fraccional obligatoria. 3. Modifique la expresión anterior para que la parte fraccional sea opcional. Abreviaturas en la notación. Ciertas construcciones aparecen con tanta frecuencia en una expresión regular, que es conveniente introducir algunas abreviaturas.

11 Compiladores. Análisis léxico Uno o más casos. El operador unitario postfijo + significa uno o más casos de. Si r es una expresión regular que designa al lenguaje L(r), entonces (r) + es una expresión regular que designa al lenguaje ( L(r) ) +. Así, la expresión regular a + representa al conjunto de las cadenas con al menos una a, El operador + tiene la misma precedencia y asociatividad que el operador *. Las dos identidades algebraicas r* = r + ε y r + = rr* relacionan los operadores de la cerradura de Kleene y la cerradura positiva. 2. Cero o un caso. El operador unario postfijo? significa cero o un caso de. La notación r? es una abreviatura de r ε. Si r es una expresión regular, entonces (r)? es una expresión regular que designa el lenguaje L(r) U {ε}. 3. Clases de caracteres. La notación [ abc ], donde a,b,c son símbolos del alfabeto, designa la expresión regular a b c. Una clase abreviada de caracteres como [a-z] designa la expresión regular a b c z. Ejercicio 2.4. Utilizando las abreviaturas anteriores, diseñe expresiones regulares para los lenguajes siguientes: 1. Números enteros y/o flotantes con o sin signo. 2. Número en notación científica con o sin signo. Conjuntos no regulares. No todos los lenguajes se pueden describir con expresiones regulares. Por ejemplo, no se pueden utilizar las expresiones regulares para describir construcciones equilibradas o anidadas ( paréntesis equilibrados ). 2.3 Reconocimiento de los componentes léxicos. En esta sección se verá como reconocer los componentes léxicos una vez que se cuenta con una forma de describirlos. Se introduce el mecanismo de los diagramas de transición de estados tomados de la teoría de autómatas para representar el proceso de reconocimiento. Diagrama de transiciones. Los diagramas de transiciones representan las acciones que tienen lugar cuando el analizador léxico es llamado por el analizador sintáctico para obtener el siguiente componente léxico. Utilizaremos los diagramas de transiciones para reescribir las

12 Compiladores. Análisis léxico 2-12 expresiones regulares de forma tal que permitan el reconocimiento de los componentes léxicos. Como se ha visto, con expresiones regulares denotamos los lenguajes asociados a los componentes léxicos. Una expresión define un procedimiento para obtener una cadena perteneciente al lenguaje que representa. Por ejemplo, la expresión regular siguiente: letra ( letra dígito )* Indica que una cadena que pertenece al lenguaje que representa, debe comenzar con una letra y ser seguida por cualquier cantidad de letras o dígitos. Si seguimos las instrucciones obtendremos cadenas como: casa, x23, b23456x, d, etc. El analizador léxico no genera las cadenas sino que las reconoce como pertenecientes a un lenguaje en base al patrón de concordancia asociado al componente léxico que tipifica las cadenas del lenguaje. El analizador léxico procesa la cadena de entrada símbolo ( carácter ) por símbolo y de izquierda a derecha y anuncia un éxito cuando logra una concordancia. Con un diagrama de transiciones se señala los estados por los que pasa el analizador conforme va procesando los caracteres ( acciones ) de la cadena de entrada. Cada componente léxico tiene asociado un patrón de concordancia ( diagrama de transiciones ) que permitirá al analizador léxico reconocer una cadena como perteneciente a su clase. Los diagramas de transiciones se construyen a partir de las expresiones regulares y utilizando los símbolos gráficos siguientes: 4 estado 4 símbolo transición al observar el símbolo en la cadena de entrada 7 estado terminal 7 inicio Fig Notación gráfica para los diagramas de transición. 0 inicio del diagrama de transición Una transición de un estado a otro se representa según la sección de diagrama siguiente: x 4 5 Fig Transición en el diagrama de transición. transición del estado 4 al estado 5 al reconocer x en la cadena de entrada

13 Compiladores. Análisis léxico 2-13 Cuando una transición conduce a un estado terminal se anuncia un reconocimiento. El estado inicial no es producido por ninguna transición. Una transición etiquetada con la palabra otro indica que puede ser cualquier símbolo no contemplado en las transiciones que salen del estado. Por ejemplo, el diagrama siguiente permite reconocer los operadores relacionales > y >=. inicio 0 > 1 = 4 otro 8 * Fig Diagrama de transición para el operador relacional >= La interpretación del diagrama es la siguiente: El analizador comienza en el estado 0 y observa el próximo símbolo de la cadena de entrada, si es > avanza al estado 1 y observa el siguiente símbolo, si este es = entonces avanza al estado terminal 4 anunciando el reconocimiento de >=, si el símbolo es diferente de = estando en el estado 1, entonces se avanza al estado terminal 8 anunciando el reconocimiento de > ( el * colocado sobre el estado terminal 8 tiene un significado especial que más delante se define). Si se esta en el estado 0 y el próximo símbolo no es > entonces se señala un error de reconocimiento. Las transiciones de error no se señalan en el diagrama sino que se asumen al no poder realizar transición alguna estando en algún estado. Los diagramas de transición con los que trabajaremos son deterministas en el sentido de que de un estado no es posible que se tomen dos o más transiciones al observar el mismo símbolo en la cadena de entrada. Es decir, si observamos en algún diagrama una situación como la señalada en la Fig. 2.6, entonces el diagrama es no determinista. letra 8 5 = 9 = 10 Fig Diagrama de transición no determinista.

14 Compiladores. Análisis léxico 2-14 Se observa como estando en el estado 5 y observando un = en la cadena de estado no es posible determinar si pasar al estado 9 o al 10. Al reescribir las expresiones regulares como diagramas de transición las expresiones que señalan repetición ( cerraduras ) o expresiones opcionales se diagramarán de la forma siguiente: Cerradura de Kleene. Implica el observar 0 o más símbolos o subcadenas. Por ejemplo, la expresión letra digito* letra, Se diagramará como sigue: dígito inicio 0 letra 1 dígito 2 letra 3 letra Fig Diagrama de transición para la expresión letra digito* letra Observe como la transición del estado 1 al 3 representa el caso de 0 dígitos después de la primer letra. Cerradura positiva. Implica observar 1 o más símbolos o subcadenas. En el caso de la expresión letra digito + letra, el diagrama sería similar al de la Fig. 2.7 solo que se elimina la transición que va del estado 1 al estado 3. 0 o un caso. Cuando un símbolo o subcadena es opcional se representa como en la expresión letra digito? letra: inicio 0 letra 1 dígito 2 letra 3 letra Fig Representación de una parte opcional. Cuando en un diagrama de transición se llegue a un estado terminal mediante una transición etiquetada con otro se señalará este hecho anexando un * al estado terminal lo que indicará que el símbolo que disparo la transición que permitió llegar al estado terminal no forma parte del lexema ( cadena para la que se logra la concordancia ). Esto implica que cuando se vuelva a llamar al analizador léxico, el primer símbolo a observar será el

15 Compiladores. Análisis léxico 2-15 que permitió arribar al estado terminal del diagrama procesado. Por ejemplo, si la cadena de entrada es como sigue: suma > ( costo1 + El diagrama de la Fig. 2.5 permite reconocer el operador > al arribar al estado terminal 8, después de observar el símbolo (, pero como en el estado se encuentra el * entonces el símbolo ( no forma parte del lexema y es con el que comenzará el próximo llamado. Ejercicio 2.5. Transforme en diagrama de transición las expresiones del Ejercicio 2.4. Resumiendo, las expresiones regulares permiten la especificación de un lenguaje. Cada componente léxico tiene asociado un patrón que concuerda con cada cadena que sea una instancia ( ejemplo ) del componente léxico. Para cada componente léxico hay un conjunto de cadenas para las cuales concuerda el patrón asociado al componente. Este conjunto de cadenas ( lenguaje ) puede ser especificado por una expresión regular. La función del analizador léxico es el reconocimiento de componentes léxicos, por tanto, el patrón asociado al componente léxico debe definirse como un procedimiento que al ejecutarse identifique o no la presencia del componente. El analizador léxico procesa la cadena de entrada de izquierda a derecha y símbolo por símbolo lo cual indica que el procedimiento definido por el patrón debe procesar la cadena de entrada símbolo a símbolo formando una subcadena y, en el caso de lograr la concordancia ( terminar su seguimiento con éxito ) habrá identificado al componente. Los diagramas de transición pueden ser ejecutados y al hacerlo, reconocen una secuencia de símbolos que forman una cadena, y en el caso de que durante la ejecución se llegue a un estado terminal, se habrá reconocido la cadena completa. Si se asocia un diagrama de transición a cada componente léxico, el ejecutar el diagrama y llegar a un estado terminal permitirá reconocer una instancia de dicho componente léxico Implementación del analizador léxico. Como recordará, el analizador léxico brinda el servicio de identificación de componentes léxicos para el análisis sintáctico. Al mismo tiempo, alimenta la información que permite el reconocimiento en las tablas de símbolos que mantiene el compilador. El análisis léxico es la única parte del compilador que tiene acceso al programa fuente ( archivo a compilar ) y lo visualiza como un archivo secuencial que procesa de principio a fin. Cada registro del archivo puede corresponder a una instrucción del programa, a un pedazo de una instrucción, o varias instrucciones. Esto es irrelevante para el analizador léxico ya que cada registro leído es simplemente una cadena de caracteres.

16 Compiladores. Análisis léxico 2-16 Cada vez que el analizador sintáctico llama al analizador léxico, éste comienza a analizar la cadena a partir del lugar en que terminó la anterior vez que fue llamado tratando de identificar el próximo componente léxico. Si lo logra regresará al analizador sintáctico el token que representa al componente léxico identificado, si no lo logra señalará un error léxico mediante mecanismos como los siguientes: Una excepción que debe atrapar el analizador sintáctico. Un token especial que señale al analizador sintáctico la presencia del error, o Una condición que permita el aborto del programa. Dependiendo de los mecanismos disponibles en el lenguaje de programación a utilizar pueden utilizarse los dos primeros mecanismos para que el analizador sintáctico tome las medidas pertinentes ( recuperarse del error y continuar el análisis de la misma línea, o simplemente desecharla y proceder con la siguiente ). Los dos primeros mecanismos pueden también utilizarse para que el analizador léxico le indique al sintáctico el hecho de haber terminado de procesar completamente el programa fuente ( condición de EOF al leer el archivo ). Se sugiere la siguiente estructura general para el analizador léxico. FUNCIÓN Analex(): token ES fin_de_cadena? SI: LEER registro; ES condición_eof? SI: REGRESAR token_eof; BUSCAR_CONCORDANCIA: ES condición_exito? SI: REGRESAR token; NO: REGRESAR token_error. FIN_FUNCION Donde BUSCAR_CONCORDANCIA es una función que identificará el próximo lexema y regresará CIERTO si lo logra encontrar y FALSO en otro caso. Esta es la función que buscará que algunos de los patrones definidos concuerde con un prefijo de la cadena que falta por analizar.

17 Compiladores. Análisis léxico 2-17 Procesamiento de la cadena de entrada. La cadena de entrada será vista como una secuencia de símbolos que serán procesados uno por uno de izquierda a derecha. Se asume que la cadena tiene al final uno o más símbolos que la delimitan ( carácter NULL o la secuencia CR, LF ). Cuando el analizador detecte la presencia de esto símbolos procederá a leer el próximo registro del archivo fuente. El archivo fuente tiene al final el carácter EOF. Cuando el analizador lo detecte procederá a señalar al analizador sintáctico que ya se terminó de procesar completamente el programa para que éste resuma su trabajo. Cuando el analizador léxico ha sido llamado en varias ocasiones por el analizador sintáctico, la cadena de entrada puede verse formado por dos subcadenas: la subcadena que comienza al inicio de la cadena de entrada y termina con el último símbolo del último lexema identificado, conocida como la subcadena ya procesada, y la parte que no ha sido procesada todavía, conocida como la cadena que resta por analizar ( ver Fig. 2.8 ). Cadena de entrada S 1 S 2 S 3...Si Sj Sj+1...S n NULL Cadena ya Cadena que resta procesada por analizar Fig Procesamiento de la cadena de entrada. El analizador mantiene un apuntador al inicio de la cadena que resta por analizar ya que desde ahí comenzara a buscar la próxima concordancia cuando vuelva a ser requerido por el analizador sintáctico. Puesto que no es posible precisar al comenzar a procesar la cadena de entrada cuál de los patrones va a concordar puede ser necesario probar varios antes de lograr la concordancia. Esto implica que una porción de la cadena tenga que procesarse repetidamente. Para implementar este tipo de proceso, el analizador debe mantener dos apuntadores ( señaladores ) a la cadena de entrada. El apuntador fijo que señala el inicio de la cadena que resta por analizar, y el apuntador móvil que se moverá hacia adelante símbolo por símbolo y llegará al final del lexema identificado ( ver Fig. 2.9 ). Este apuntador móvil tendrá que igualarse al apuntador fijo cada vez que comience un nuevo intento por lograr la concordancia. Una vez que se logre la concordancia, el lexema estará entre el apuntador fijo y el apuntador móvil -1

18 Compiladores. Análisis léxico 2-18 Dado que la cadena de entrada puede representarse de diversas maneras ( como arreglo de símbolos, como cadena, etc. ), se debe implementar una función llamada SigteCar() que regrese el próximo símbolo de la cadena de entrada y ajuste el apuntador móvil. S 1 S 2 S 3...S i S j S j+1.s j+2...s n NULL Apuntador fijo Apuntador móvil Fig Apuntadores fijo y móvil a la cadena de entrada. En esta función se oculta la identificación del final de la cadena y del final del archivo en el regreso de dos símbolos especiales ( uno que señale fin de cadena y otro el fin del archivo ) que serán seleccionados de manera tal que no permita su aparición como símbolos normales de la cadena de entrada. Implementación de los diagramas de transición. Previendo que se tenga un diagrama de transición para cada componte léxico a identificar se procederá a codificar cada uno como una función que regresa un valor booleano. CIERTO indica que se llegó a un estado terminal, y FALSO indicara un estado de error. La misma lógica de ejecución de un diagrama de transición deberá representarse en la función programada. La estructura de la función para cada diagrama será esencialmente la misma, variando en el número de estados y de transiciones contemplados. Por ejemplo, el diagrama de transición siguiente deberá codificarse como lo indica enseguida: inicio 0 letra 1 dígito 2 letra 3 letra FUNCION Identificador: Booleana Estado = 0 Error = FALSO EstadoFinal = FALSO MIENTRAS No ( EstadoFinal OR Error )

19 Compiladores. Análisis léxico 2-19 Símbolo = SigteCar() CASO ( Estado ) CASO 0: ES Símbolo = letra? SI: Estado = 1 NO: Error = CIERTO CASO 1: ES Símbolo = digito? SI: Estado = 2 NO: ES Símbolo = letra? SI: Estado = 3 NO: Error = CIERTO CASO 2: ES Símbolo = letra? SI: Estado = 3 NO: Error = CIERTO CASO 3: EstadoFinal = CIERTO FIN_CASO FIN_MIENTRAS ES Error = FALSO? SI: REGRESA CIERTO NO: REGRESA FALSO FIN_FUNCION En relación a la función BUSCAR_CONCORDANCIA deberá llamar una a una a las funciones asociadas a los patrones hasta lograr que una de ellas regrese CIERTO. Si así sucede, se habrá logrado una concordancia y la función que tuvo el éxito señalará el componente identificado. En el caso de que se hayan probado todas y ninguna regrese el valor CIERTO, entonces se concluye en un error de tipo léxico y así se señala al analizador sintáctico para que tomen las previsiones adecuadas. El lexema para el que se logró la concordancia estará delimitado por los apuntadores fijo y móvil-1 y se puede extraer de la cadena de entrada mediante una función del tipo SUBSTR() o STRCOPY().

20 Compiladores. Análisis léxico 2-20 Identificación del token. Con el tipo de componente léxico se tiene el primer elemento del token, y se selecciona la tabla de símbolos donde se buscará una entrada que contenga al lexema. Si se localiza, el número de entrada será el segundo elemento del token. Si no se localiza, se ha identificado un nuevo lexema que deberá alimentarse a la tabla de símbolos y la entrada que le corresponda será el segundo elemento del token. Componentes léxicos con el mismo patrón de concordancia. En los lenguajes de programación el uso de cadenas para indicar nombres de variables, palabras reservadas, nombres para procedimientos, funciones, etc., operadores aritméticos ( como MOD y EXP ), operadores lógicos ( AND, OR, XOR, NOT ) es muy común. En este caso, un solo patrón concuerda con todas estas cadenas haciendo difícil la identificación del token adecuado. La forma en que se ataca este problema es permitiendo la concordancia con un solo patrón ( Identificador, por ejemplo ) y luego procediendo a buscar el lexema en cada una de las tablas de los componentes léxicos: Variables, Op_aritméticos, Op_lógicos, Pal_reservadas, etc. Algunas de estas tablas fueron creadas al tiempo de iniciar la ejecución del compilador ( tablas estáticas, como la de Pal_reservadas, Op_aritméticos, Op_logicos donde se conoce de antemano cuales son las cadenas válidas ) mientras que la de Variables se crea dinámicamente. El lexema se procederá a buscar en las tablas estáticas, la primera que lo contenga señalará el componente léxico identificado. Si no sucede así, entonces se habrá identificado el componente léxico Variable y se procederá a buscar el lexema en la tabla de Variables como se señaló en el apartado anterior.

El proceso del Análisis Léxico

El proceso del Análisis Léxico El proceso del Análisis Léxico El proceso de análisis léxico se refiere al trabajo que realiza el scanner con relación al proceso de compilación. El scanner representa una interfaz entre el programa fuente

Más detalles

16 Análisis sintáctico I

16 Análisis sintáctico I 2 Contenido Recordando la estructura de un compilador Recordando el análisis léxico l análisis sintáctico Comparación con el análisis léxico l Rol del Parser Lenguajes de programación Gramáticas structura

Más detalles

LEX. Las definiciones y subrutinas son opcionales. El segundo %% es opcional pero el primer %% indica el comienzo de las reglas.

LEX. Las definiciones y subrutinas son opcionales. El segundo %% es opcional pero el primer %% indica el comienzo de las reglas. LEX Estructura de un programa en LEX { definiciones { reglas { subrutinas del usuario Las definiciones y subrutinas son opcionales. El segundo es opcional pero el primer indica el comienzo de las reglas.

Más detalles

Tema 3: Gramáticas regulares. Teoría de autómatas y lenguajes formales I

Tema 3: Gramáticas regulares. Teoría de autómatas y lenguajes formales I Tema 3: Gramáticas regulares Teoría de autómatas y lenguajes formales I Bibliografía Hopcroft, J. E., Motwani, R., y Ullman, J. D. Introducción a la Teoría de Autómatas, Lenguajes y Computación. Addison

Más detalles

Teoría de Autómatas y Lenguajes Formales, IS17 Ingeniería Técnica en Informática de Sistemas. Práctica 1: Introducción al Analizador Léxico FLEX

Teoría de Autómatas y Lenguajes Formales, IS17 Ingeniería Técnica en Informática de Sistemas. Práctica 1: Introducción al Analizador Léxico FLEX Teoría de Autómatas y Lenguajes Formales, IS17 Ingeniería Técnica en Informática de Sistemas Práctica 1: Introducción al Analizador Léxico FLEX Enunciado: El objetivo de esta práctica consiste en aprender

Más detalles

Elementos de un programa en C

Elementos de un programa en C Elementos de un programa en C Un programa en C consta de uno o más archivos. Un archivo es traducido en diferentes fases. La primera fase es el preprocesado, que realiza la inclusión de archivos y la sustitución

Más detalles

Algoritmos. Medios de expresión de un algoritmo. Diagrama de flujo

Algoritmos. Medios de expresión de un algoritmo. Diagrama de flujo Algoritmos En general, no hay una definición formal de algoritmo. Muchos autores los señalan como listas de instrucciones para resolver un problema abstracto, es decir, que un número finito de pasos convierten

Más detalles

SSL Guia de Ejercicios

SSL Guia de Ejercicios 1 SSL Guia de Ejercicios INTRODUCCIÓN A LENGUAJES FORMALES 1. Dado el alfabeto = {a, b, c}, escriba las palabras del lenguaje L = {x / x }. 2. Cuál es la cardinalidad del lenguaje L = {, a, aa, aaa}? 3.

Más detalles

Conceptos básicos sobre gramáticas

Conceptos básicos sobre gramáticas Procesamiento de Lenguajes (PL) Curso 2014/2015 Conceptos básicos sobre gramáticas Gramáticas y lenguajes Gramáticas Dado un alfabeto Σ, un lenguaje es un conjunto (finito o infinito) de cadenas de símbolos

Más detalles

No todos los LRs finitos se representan mejor con ERs. Observe el siguiente ejemplo:

No todos los LRs finitos se representan mejor con ERs. Observe el siguiente ejemplo: 1 Clase 3 SSL EXPRESIONES REGULARES Para REPRESENTAR a los Lenguajes Regulares. Se construyen utilizando los caracteres del alfabeto sobre el cual se define el lenguaje, el símbolo y operadores especiales.

Más detalles

Seminario de introducción a Flex

Seminario de introducción a Flex Seminario de introducción a Flex David Portolés Rodríguez dporto@unizar.es Lenguajes y Sistemas Informáticos Dpto. de Informática e Ing. de Sistemas Universidad de Zaragoza Qué es Flex? Flex es un una

Más detalles

SISTEMAS INFORMÁTICOS PROGRAMACION I - Contenidos Analíticos Ing. Alejandro Guzmán M. TEMA 2. Diseño de Algoritmos

SISTEMAS INFORMÁTICOS PROGRAMACION I - Contenidos Analíticos Ing. Alejandro Guzmán M. TEMA 2. Diseño de Algoritmos TEMA 2 Diseño de Algoritmos 7 2. DISEÑO DE ALGORITMOS 2.1. Concepto de Algoritmo En matemáticas, ciencias de la computación y disciplinas relacionadas, un algoritmo (del griego y latín, dixit algorithmus

Más detalles

El lenguaje C. 1. Identificadores, constantes y variables

El lenguaje C. 1. Identificadores, constantes y variables Principios de Programación El lenguaje C 1. Identificadores, constantes y variables 1.1. Conceptos de memoria Los nombres de variable como x, y, suma corresponden a localizaciones o posiciones en la memoria

Más detalles

Lenguajes, Gramáticas y Autómatas Conceptos

Lenguajes, Gramáticas y Autómatas Conceptos Lenguajes, Gramáticas y Autómatas Conceptos Departamento de Informática e Ingeniería de Sistemas C.P.S. Universidad de Zaragoza Última revisión: Febrero. 2004 11/02/2004 1 Índice Alfabetos, palabras y

Más detalles

Principios de Computadoras II

Principios de Computadoras II Departamento de Ingeniería Electrónica y Computadoras Operadores y Expresiones rcoppo@uns.edu.ar Primer programa en Java 2 Comentarios en Java Comentario tradicional (multi-línea) Comentario de línea Comentario

Más detalles

Teoría de la Computación

Teoría de la Computación Teoría de la Computación Grado en Ingeniería Informática Prácticas de Laboratorio Profesor: Gregorio de Miguel Casado * email: gmiguel@unizar.es Dpto. de Informática e Ingeniería de Sistemas Escuela de

Más detalles

Generación de Código Intermedio

Generación de Código Intermedio Generación de Código Intermedio Programación II Margarita Álvarez Generación de código intermedio Con la generación de código intermedio se inicia la tarea de síntesis. Aunque un programa fuente se puede

Más detalles

Unidad II: Análisis semántico

Unidad II: Análisis semántico Unidad II: Análisis semántico Se compone de un conjunto de rutinas independientes, llamadas por los analizadores morfológico y sintáctico. El análisis semántico utiliza como entrada el árbol sintáctico

Más detalles

Tipos De Datos. Numéricos. Alfanuméricos (string) Arreglos (Vectores, Matrices) Estructurados Registros (Def. Por el Archivos Usuario) Apuntadores

Tipos De Datos. Numéricos. Alfanuméricos (string) Arreglos (Vectores, Matrices) Estructurados Registros (Def. Por el Archivos Usuario) Apuntadores Tipos De Datos Todos los datos tienen un tipo asociado con ellos. Un dato puede ser un simple carácter, tal como b, un valor entero tal como 35. El tipo de dato determina la naturaleza del conjunto de

Más detalles

Capítulo 9. Introducción a los lenguajes formales. Continuar

Capítulo 9. Introducción a los lenguajes formales. Continuar Capítulo 9. Introducción a los lenguajes formales Continuar Introducción Un lenguaje es un conjunto de símbolos y métodos para estructurar y combinar dichos símbolos. Un lenguaje también recibe el nombre

Más detalles

Programación en java. Estructuras algorítmicas

Programación en java. Estructuras algorítmicas Programación en java Estructuras algorítmicas Estructuras algoritmicas 1. Conceptos basicos 1. Dato 2. Tipos de datos 3. Operadores 2. dsd Conceptos Basicos DATO: se considera una representación simbólica

Más detalles

Datos y tipos de datos

Datos y tipos de datos Datos y tipos de datos Dato Representación formal de hechos, conceptos o instrucciones adecuada para su comunicación, interpretación y procesamiento por seres humanos o medios automáticos. Tipo de dato

Más detalles

Lenguajes y Gramáticas

Lenguajes y Gramáticas Lenguajes y Gramáticas Teoría de Lenguajes Fernando Naranjo Introduccion Se desarrollan lenguajes de programación basados en el principio de gramática formal. Se crean maquinas cada vez mas sofisticadas

Más detalles

Tema 4: Gramáticas independientes del contexto. Teoría de autómatas y lenguajes formales I

Tema 4: Gramáticas independientes del contexto. Teoría de autómatas y lenguajes formales I Tema 4: Gramáticas independientes del contexto Teoría de autómatas y lenguajes formales I Bibliografía Hopcroft, J. E., Motwani, R., y Ullman, J. D. Introducción a la Teoría de Autómatas, Lenguajes y Computación.

Más detalles

Compiladores e intérpretes Análisis Léxico I. Análisis Léxico I

Compiladores e intérpretes Análisis Léxico I. Análisis Léxico I Análisis Léxico I Profesor: Eridan Otto Análisis Léxico I Introducción Funciones Tokens,Patrones y Lexemas Reconocimiento de tokens Implementación de un AL 1 Análisis léxico: Introducción En esta unidad

Más detalles

Tema 2: Desarrollo de Algoritmos. E.E. de Algorítmica

Tema 2: Desarrollo de Algoritmos. E.E. de Algorítmica Tema 2: Desarrollo de Algoritmos E.E. de Algorítmica Temas a tratar Identificadores Variables Constantes Tipos de Datos Separadores Operadores Aritméticos Unarios Relacionales y Condicionales Nivel de

Más detalles

2. EXPRESIONES 3. OPERADORES Y OPERANDOS 4. INDENTIFICADORES COMO LOCALIDADES DE MEMORIA

2. EXPRESIONES 3. OPERADORES Y OPERANDOS 4. INDENTIFICADORES COMO LOCALIDADES DE MEMORIA CONTENIDOS: 1. TIPOS DE DATOS 2. EXPRESIONES 3. OPERADORES Y OPERANDOS 4. INDENTIICADORES COMO LOCALIDADES DE MEMORIA OBJETIO EDUCACIONAL: El alumno conocerá las reglas para cambiar fórmulas matemáticas

Más detalles

Desde los programas más simples escritos en un lenguaje de programación suelen realizar tres tareas en forma secuencial.

Desde los programas más simples escritos en un lenguaje de programación suelen realizar tres tareas en forma secuencial. Tipos de Datos Desde los programas más simples escritos en un lenguaje de programación suelen realizar tres tareas en forma secuencial. Entrada de datos Procesamientos de datos Salida de resultados Los

Más detalles

GRAMATICAS LIBRES DEL CONTEXTO

GRAMATICAS LIBRES DEL CONTEXTO GRMTICS LIBRES DEL CONTEXTO Estas gramáticas, conocidas también como gramáticas de tipo 2 o gramáticas independientes del contexto, son las que generan los lenguajes libres o independientes del contexto.

Más detalles

Tema: Autómatas de Estado Finitos

Tema: Autómatas de Estado Finitos Compiladores. Guía 2 1 Facultad: Ingeniería Escuela: Computación Asignatura: Compiladores Tema: Autómatas de Estado Finitos Contenido En esta guía se aborda la aplicación de los autómatas en el campo de

Más detalles

Programación en C. Algoritmo y Estructura de Datos. Ing. M. Laura López. Programación en C

Programación en C. Algoritmo y Estructura de Datos. Ing. M. Laura López. Programación en C Algoritmo y Estructura de Datos Ing. M. Laura López 1 Estructura de un programa en C 2 Estructura de un programa en C #include Archivos de cabecera # define Definición de constantes Declaraciones Globales

Más detalles

INSTITUTO POLITECNICO NACIONAL UNIDAD PROFESIONAL INTERDISCIPLINARIA DE BIOTECNOLOGIA DEPARTAMENTO DE CIENCIAS BASICAS

INSTITUTO POLITECNICO NACIONAL UNIDAD PROFESIONAL INTERDISCIPLINARIA DE BIOTECNOLOGIA DEPARTAMENTO DE CIENCIAS BASICAS MANUAL DE PRÁCTICAS DEL TALLER DE PROGRAMACIÒN PRACTICA NO.4 NOMBRE DE LA PRÁCTICA Operaciones con Escalares y Conceptos Básicos de Programación 4.1 OBJETIVO GENERAL El alumno conocerá el funcionamiento

Más detalles

Expresiones Lógicas y Operadores sobre Bits

Expresiones Lógicas y Operadores sobre Bits Expresiones Lógicas y Operadores sobre Bits Andrés Arcia Departamento de Computación Escuela de Ingeniería de Sistemas Facultad de Ingeniería Universidad de Los Andes Programación Digital I 1 Expresión

Más detalles

1. Cadenas EJERCICIO 1

1. Cadenas EJERCICIO 1 LENGUAJES FORMALES Y AUTÓMATAS CURSO 2006/2007 - BOLETÍN DE EJERCICIOS Víctor J. Díaz Madrigal y José Miguel Cañete Departamento de Lenguajes y Sistemas Informáticos 1. Cadenas La operación reversa aplicada

Más detalles

Algoritmos y programas. Algoritmos y Estructuras de Datos I

Algoritmos y programas. Algoritmos y Estructuras de Datos I Algoritmos y programas Algoritmos y Estructuras de Datos I Primer cuatrimestre de 2012 Departamento de Computación - FCEyN - UBA Programación funcional - clase 1 Funciones Simples - Recursión - Tipos de

Más detalles

PROGRAMACIÓN. UNIDAD II. ALGORITMO PROFA : HAU MOY

PROGRAMACIÓN. UNIDAD II. ALGORITMO PROFA : HAU MOY PROGRAMACIÓN. UNIDAD II. ALGORITMO PROFA : HAU MOY ALGORITMO DEFINICIÓN: CONSISTE EN LA DESCRIPCIÓN CLARA Y DETALLADA DEL PROCEDIMIENTO A SEGUIR PARA ALCANZAR LA SOLUCIÓN A UN PROBLEMA EN DONDE SE ESTABLECE

Más detalles

PROCESADORES DE LENGUAJE. Hoja de ejercicios de FLEX

PROCESADORES DE LENGUAJE. Hoja de ejercicios de FLEX PROCESADORES DE LENGUAJE Ingeniería Informática Especialidad de Computación Tercer curso Segundo cuatrimestre Departamento de Informática y Análisis Numérico Escuela Politécnica Superior de Córdoba Universidad

Más detalles

Introducción. Las gramáticas definen las reglas que definen a los lenguajes Las reglas pueden tener una diversa variedad de esquemas

Introducción. Las gramáticas definen las reglas que definen a los lenguajes Las reglas pueden tener una diversa variedad de esquemas Gramáticas Introducción Las gramáticas definen las reglas que definen a los lenguajes Las reglas pueden tener una diversa variedad de esquemas En algunos lenguajes, una sucesión de símbolos depende del

Más detalles

Métodos para escribir algoritmos: Diagramas de Flujo y pseudocódigo

Métodos para escribir algoritmos: Diagramas de Flujo y pseudocódigo TEMA 2: CONCEPTOS BÁSICOS DE ALGORÍTMICA 1. Definición de Algoritmo 1.1. Propiedades de los Algoritmos 2. Qué es un Programa? 2.1. Cómo se construye un Programa 3. Definición y uso de herramientas para

Más detalles

$0 Representa al parámetro cero o nombre del programa $1 Representa al parámetro uno $2 Representa al parámetro dos

$0 Representa al parámetro cero o nombre del programa $1 Representa al parámetro uno $2 Representa al parámetro dos PROGRAMACIÓN DE SHELL SCRIPTS EN LINUX El shell es un intérprete de órdenes, pero el shell no es solamente eso; los intérpretes de órdenes de Linux son auténticos lenguajes de programación. Como tales,

Más detalles

MODELOS DE COMPUTACION I Preguntas Tipo Test. 1. El lema de bombeo puede usarse para demostrar que un lenguaje determinado es regular.

MODELOS DE COMPUTACION I Preguntas Tipo Test. 1. El lema de bombeo puede usarse para demostrar que un lenguaje determinado es regular. MODELOS DE COMPUTACION I Preguntas Tipo Test Indicar si son verdaderas o falsas las siguientes afirmaciones: 1. El lema de bombeo puede usarse para demostrar que un lenguaje determinado es regular. 2.

Más detalles

Todo programa en 'C' consta de una o más funciones, una de las cuales se llama main.

Todo programa en 'C' consta de una o más funciones, una de las cuales se llama main. LENGUAJE C CARACTERISTICAS DEL LENGUAJE 'C' El lenguaje 'C' se conoce como un lenguaje compilado. Existen dos tipos de lenguaje: interpretados y compilados. Los interpretados son aquellos que necesitan

Más detalles

GRAMÁTICAS LIBRES DE CONTEXTO

GRAMÁTICAS LIBRES DE CONTEXTO GRAMÁTICAS LIBRES DE CONTEXTO Definición Una gramática libre de contexto (GLC) es una descripción estructural precisa de un lenguaje. Formalmente es una tupla G=, donde Vn es el conjunto

Más detalles

12 La herramienta LEX

12 La herramienta LEX 2 Contenido La herramienta Lex Esquema de un fuente en Lex Zona de definiciones Zona de reglas Zona de rutinas del usuario Archivo de salida (lex.yy.c) Copilar un fuente de Lex Opciones estándar Depuración

Más detalles

Procesadores de lenguaje Tema 2 Análisis léxico

Procesadores de lenguaje Tema 2 Análisis léxico Procesadores de lenguaje Tema 2 Análisis léxico Departamento de Ciencias de la Computación Universidad de Alcalá de Henares Resumen del tema Objetivo: comprender la estructura, organización y funcionamiento

Más detalles

Constante: Una constante es un dato numérico o alfanumérico que no cambia durante la ejecución del programa.

Constante: Una constante es un dato numérico o alfanumérico que no cambia durante la ejecución del programa. Constantes y variables Constante: Una constante es un dato numérico o alfanumérico que no cambia durante la ejecución del programa. pi = 3.1416 Variable: Es un espacio en la memoria de la computadora que

Más detalles

ALGORÍTMICA. Dpto. Ingeniería de Sistemas y Automática Facultad de Ciencias Universidad de Valladolid.

ALGORÍTMICA. Dpto. Ingeniería de Sistemas y Automática Facultad de Ciencias Universidad de Valladolid. ALGORÍTMICA Dpto. Ingeniería de Sistemas y Automática Facultad de Ciencias Universidad de Valladolid. Indíce Algoritmo Elementos de un algoritmo: Variables, Constantes, Expresiones Datos: Definición y

Más detalles

Curso de Programación Avanzada en C

Curso de Programación Avanzada en C Curso de Programación Avanzada en C Copyright, 1996 Universidad Sim on Bol ivar 1 Prof. Mariela J. Curiel Contenido del Curso Conceptos BásicosB Estructuras de Control Arreglos Otros tipos de datos derivados

Más detalles

Expresiones y sentencias

Expresiones y sentencias Expresiones y sentencias Expresión Construcción (combinación de tokens) que se evalúa para devolver un valor. Sentencia Representación de una acción o una secuencia de acciones. En C, todas las sentencias

Más detalles

INTRODUCCIóN A LA PROGRAMACIóN APUNTES DE JAVA APUNTES DE JAVA

INTRODUCCIóN A LA PROGRAMACIóN APUNTES DE JAVA APUNTES DE JAVA APUNTES DE JAVA FUNCIONAMIENTO DE UN PROGRAMA Assembler Ensamblador Ejecuta Programador Programa fuente BASIC Interprete Ejecuta C, C++, Pascal Compilador Compila Ejecuta Programa fuente Programa Objeto

Más detalles

UNIVERSIDAD NACIONAL DE EDUCACIÓN A DISTANCIA Escuela Técnica Superior de Ingeniería Informática Procesadores de Lenguajes. Tema 3.

UNIVERSIDAD NACIONAL DE EDUCACIÓN A DISTANCIA Escuela Técnica Superior de Ingeniería Informática Procesadores de Lenguajes. Tema 3. UNIVRSIDAD NACIONAL D DUCACIÓN A DISTANCIA scuela Técnica Superior de Ingeniería Informática Procesadores de Lenguajes Tema 3 Parte I Análisis Sintáctico Javier Vélez Reyes jvelez@lsi.uned.es Objetivos

Más detalles

Área: INFORMÁTICA. Saber- Saber: Identificar DFD como herramienta para escribir los algoritmos de forma lógica.

Área: INFORMÁTICA. Saber- Saber: Identificar DFD como herramienta para escribir los algoritmos de forma lógica. Guía No: 2 Subdirección de Educación Departamento de Educación Contratada Colegio CAFAM Bellavista CED GUIA DE APRENDIZAJE Docente: Luz del Carmen Barrera Área: INFORMÁTICA Fecha: II BIMESTRE 2014 Grado:

Más detalles

Tema 2 Conceptos básicos de programación. Fundamentos de Informática

Tema 2 Conceptos básicos de programación. Fundamentos de Informática Tema 2 Conceptos básicos de programación Fundamentos de Informática Índice Metodología de la programación Programación estructurada 2 Pasos a seguir para el desarrollo de un programa (fases): Análisis

Más detalles

Operadores y Expresiones

Operadores y Expresiones Operadores y Expresiones Los programas Java constan de datos, sentencias de programas y expresiones. Una expresión es normalmente, una ecuación matemática, tal como 3 * x + 5 * z. En esta expresión, los

Más detalles

Informática General 2016 Cátedra: Valeria Drelichman, Pedro Paleo, Leonardo Nadel, Norma Morales

Informática General 2016 Cátedra: Valeria Drelichman, Pedro Paleo, Leonardo Nadel, Norma Morales UNA / AREA TRANSDEPARTAMENTAL DE ARTES MULTIMEDIALES Licenciatura en Artes Multimediales Informática General 2016 Cátedra: Valeria Drelichman, Pedro Paleo, Leonardo Nadel, Norma Morales JavaScript Algoritmo

Más detalles

Recopilación de ejercicios sobre expresiones regulares en exámenes de Compiladores e intérpretes

Recopilación de ejercicios sobre expresiones regulares en exámenes de Compiladores e intérpretes Recopilación de ejercicios sobre expresiones regulares en exámenes de Compiladores e intérpretes IG29: Compiladores e intérpretes Segunda sesión de teoría Bloque 1: Modelado Ejercicio 1 Modela mediante

Más detalles

Programación en Lenguaje C

Programación en Lenguaje C Lenguaje de programación C Programación en Lenguaje C Introducción El Lenguaje de programación C fue implantado por primera vez en los años 70 por Dennis Ritchie para una computadora DEC PDP-11 corriendo

Más detalles

Unidad Didáctica 2. Elementos básicos del lenguaje Java Tipos, declaraciones, expresiones y asignaciones

Unidad Didáctica 2. Elementos básicos del lenguaje Java Tipos, declaraciones, expresiones y asignaciones Unidad Didáctica 2 Elementos básicos del lenguaje Java Tipos, declaraciones, expresiones y asignaciones Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Versión 1.0.3 Índice

Más detalles

Desarrollo de Programas. Prof. Lisbeth C. Pérez Rivas

Desarrollo de Programas. Prof. Lisbeth C. Pérez Rivas Desarrollo de Programas Prof. Lisbeth C. Pérez Rivas lisbethpe@ula.ve Desarrollo de Programas Ejercicio: Calcular el sueldo neto de un trabajador conociendo el número de horas trabajadas, la tarifa horaria

Más detalles

LABORATORIO DE PROCESADORES DE LENGUAJE Curso: Práctica 2: Analizador léxico/sintáctico/semántico con Flex y Bison

LABORATORIO DE PROCESADORES DE LENGUAJE Curso: Práctica 2: Analizador léxico/sintáctico/semántico con Flex y Bison LABORATORIO DE PROCESADORES DE LENGUAJE Curso: 2008-2009 Práctica 2: Analizador léxico/sintáctico/semántico con Flex y Bison Planteamiento del problema En esta práctica se trata de realizar, mediante el

Más detalles

Tabla de Símbolos. Programación II Margarita Álvarez

Tabla de Símbolos. Programación II Margarita Álvarez Programación II Margarita Álvarez La tabla de símbolos es una estructura global utilizada por distintos módulos del compilador. Es el principal atributo heredado. Almacena todos los nombres declarados

Más detalles

Constantes. Las constantes no cambian durante la ejecucion de un programa en C++, en C++ existen 4 tipos de constantes:

Constantes. Las constantes no cambian durante la ejecucion de un programa en C++, en C++ existen 4 tipos de constantes: Constantes Las constantes se pueden declarar con la palabra reservada const y se le asigna un valor en el momento de la declaracion, este valor no se puede modificar durante el programa y cualquier intento

Más detalles

Tabla de Símbolos. Programación II Margarita Álvarez

Tabla de Símbolos. Programación II Margarita Álvarez Programación II Margarita Álvarez La tabla de símbolos es una estructura global utilizada por distintos módulos del compilador. Es el principal atributo heredado. Almacena todos los nombres declarados

Más detalles

Generador de analizadores léxicos FLEX

Generador de analizadores léxicos FLEX Generador de analizadores léxicos FLEX Procesadores de Lenguajes 4 o Informática PL curso 2008-2009 (CCIA) CCIA Octubre 2008 PL 0809 (CCIA) Introducción a FLEX Octubre-2008 1 / 12 Uso de FLEX FLEX: traduce

Más detalles

Programación. Test Autoevaluación Tema 3

Programación. Test Autoevaluación Tema 3 Programación Test Autoevaluación Tema 3 Autores: M. Paz Sesmero Lorente Paula de Toledo Heras Fco. Javier Ordoñez Morales Juan Gómez Romero José A. Iglesias Martínez José Luis Mira Peidro SOLUCIONES 1.

Más detalles

TEMA V SISTEMAS DE NUMERACIÓN

TEMA V SISTEMAS DE NUMERACIÓN TEMA V SISTEMAS DE NUMERACIÓN En la vida diaria el hombre se expresa, se comunica, almacena y maneja información desde el punto de vista alfabético con un determinado idioma y desde el punto de vista numérico

Más detalles

Tema: Entorno a C# y Estructuras Secuenciales.

Tema: Entorno a C# y Estructuras Secuenciales. Tema: Entorno a C# y Estructuras Secuenciales. Programación I, Guía 3 1 Facultad: Ingeniería Escuela: Ingeniería en Computación Asignatura: Programación I Objetivos Utilizar el entorno de programación

Más detalles

Tipos algebraicos y abstractos. Algoritmos y Estructuras de Datos I. Tipos algebraicos

Tipos algebraicos y abstractos. Algoritmos y Estructuras de Datos I. Tipos algebraicos Algoritmos y Estructuras de Datos I 1 cuatrimestre de 009 Departamento de Computación - FCEyN - UBA Programación funcional - clase Tipos algebraicos Tipos algebraicos y abstractos ya vimos los tipos básicos

Más detalles

La resolución de un problema

La resolución de un problema CAP. 2. ALGORITMOS Y PROGRAMAS 2.1. Solución de problemas por computadora La resolución de problemas por computadora, es importante para que las personas o usuarios aprendan a programar de manera general,

Más detalles

PROGRAMACIÓN II AÑO 2009 TALLER 3: TEORÍA DE LENGUAJES Y AUTÓMATAS

PROGRAMACIÓN II AÑO 2009 TALLER 3: TEORÍA DE LENGUAJES Y AUTÓMATAS Licenciatura en Sistemas de Información PROGRAMACIÓN II AÑO 2009 TALLER 3: TEORÍA DE LENGUAJES Y AUTÓMATAS UNSE FCEyT 1. DESCRIPCIÓN Este taller consta de tres partes. En cada una de ellas se especifican

Más detalles

TEMA 3 ÁLGEBRA DE CONMUTACIÓN

TEMA 3 ÁLGEBRA DE CONMUTACIÓN TEMA 3 ÁLGEBRA DE CONMUTACIÓN TEMA 3: Álgebra de Boole ÍNDICE. POSTULADOS DEL ÁLGEBRA DE CONMUTACIÓN 2. ÁLGEBRA DE BOOLE BIVALENTE O ÁLGEBRA DE CONMUTACIÓN 2. Teoremas del álgebra de conmutación 3. VARIABLES

Más detalles

Álgebra Booleana. Suma Booleana. El término suma es 1 si al menos uno de sus literales son 1. El término suma es 0 solamente si cada literal es 0.

Álgebra Booleana. Suma Booleana. El término suma es 1 si al menos uno de sus literales son 1. El término suma es 0 solamente si cada literal es 0. Álgebra Booleana El álgebra de Boole son las matemáticas de los sistemas digitales. En el nivel de lógica digital de una computadora, lo que comúnmente se llama hardware y que está formado por los componentes

Más detalles

Expresiones y sentencias

Expresiones y sentencias Expresiones y sentencias Expresión Construcción (combinación de tokens) que se evalúa para devolver un valor. Sentencia Representación de una acción o una secuencia de acciones. En Java, todas las sentencias

Más detalles

Práctica 1 de Excel (Curso )

Práctica 1 de Excel (Curso ) Práctica 1 de Excel (Curso 2009-2010) Definición: Excel es una aplicación del tipo hoja de cálculo, integrada en el entorno Windows y desarrollada por Microsoft, en la cual se combinan las capacidades

Más detalles

UNIDAD 8: SUCESIONES Y SERIES

UNIDAD 8: SUCESIONES Y SERIES UNIDAD 8: SUCESIONES Y SERIES Llegamos a la última unidad de la asignatura correspondiente a Sucesiones y Series, recuerde mantener la motivación hasta el final, el tema que vamos a tratar aquí es de especial

Más detalles

Las Etapas de la Compilación

Las Etapas de la Compilación Las de la Compilación El en la Compilación Universidad de Cantabria Outline 1 El Problema 2 Las y el Qué pasos son necesarios dar para hallar la estructura de un programa? En qué pasos podemos dividirlos

Más detalles

A l g o r i t m o y E s t r u c t u r a d e D a t o s Ing. en Sistemas de Información - 1º año -

A l g o r i t m o y E s t r u c t u r a d e D a t o s Ing. en Sistemas de Información - 1º año - Trabajo práctico Nº 7 (Resolución de problemas Estructura: pila y cola). Realiza el programa de cada situación problemática. 1- Cargar en una pila n letras del abecedario.(n debe ser menor a 30) 2- En

Más detalles

Elementos léxicos del lenguaje de programación C

Elementos léxicos del lenguaje de programación C Elementos léxicos del lenguaje de programación C Elementos léxicos de los lenguajes de programación (tokens) Palabras reservadas Identificadores Literales Operadores Delimitadores Comentarios Apéndices

Más detalles

Fundamentos de Ciencias de la Computación Trabajo Práctico N 2 Lenguajes Libres del Contexto y Sensibles al Contexto Segundo Cuatrimestre de 2002

Fundamentos de Ciencias de la Computación Trabajo Práctico N 2 Lenguajes Libres del Contexto y Sensibles al Contexto Segundo Cuatrimestre de 2002 Departamento de Cs. e Ingeniería de la Computación Universidad Nacional del Sur Ejercicios Fundamentos de Ciencias de la Computación Trabajo Práctico N 2 Lenguajes Libres del Contexto y Sensibles al Contexto

Más detalles

Enteros. Son los números que no contienen componentes fraccionarios y, por tanto, no contienen punto decimal.

Enteros. Son los números que no contienen componentes fraccionarios y, por tanto, no contienen punto decimal. LENGUAJE DE PROGRAMACIÓN TURBO PASCAL El lenguaje de programación de alto nivel Pascal fue diseñado el 1968 por Niklaus Wirth con una finalidad eminentemente pedagógica El 1983, el Pascal fue estandarizado

Más detalles

Números enteros (cortos, largos y sin signo) Números reales (precisión simple y doble) Carácter y cadenas de caracteres. Lógicos.

Números enteros (cortos, largos y sin signo) Números reales (precisión simple y doble) Carácter y cadenas de caracteres. Lógicos. Universidad Rafael Urdaneta Escuela de Ingeniería de Computación Números enteros (cortos, largos y sin signo) Números reales (precisión simple y doble) Carácter y cadenas de caracteres. Lógicos. Asignación

Más detalles

TEMA 3. OPERADORES Y EXPRESIONES.

TEMA 3. OPERADORES Y EXPRESIONES. TEMA 3. OPERADORES Y EXPRESIONES. Los programas de computadoras se apoyan esencialmente en la realización de numerosas operaciones aritméticas y matemáticas de diferente complejidad. Este capítulo muestra

Más detalles

Manual de turbo pascal

Manual de turbo pascal Universidad Nacional Experimental De Los Llanos Occidentales Ezequiel Zamora UNELLEZ-Barinas Manual de turbo pascal Bachilleres: Martinez Ninibeth C.I:20.867.002 Mora Yaco C.I:17.205.073 Estructura de

Más detalles

06 Análisis léxico II

06 Análisis léxico II 2 Contenido Alfabetos, símbolos y cadenas Operaciones con cadenas Concatenación de dos cadenas Prefijos y sufijos de una cadena Subcadena y subsecuencia Inversión de una cadena Potencia de una cadena Ejercicios

Más detalles

FUNDAMENTOS DE PROGRAMACIÓN ESTRUCTURADA

FUNDAMENTOS DE PROGRAMACIÓN ESTRUCTURADA FUNDAMENTOS DE PROGRAMACIÓN ESTRUCTURADA Estructura de contenidos INTRODUCCIÓN...3 1. MI PRIMER PROGRAMA...4 1.1 La Codificación...4 1.2 La Compilación...4 1.3 La Depuración...5 1.4 La Ejecución...5 2.

Más detalles

PHP 7 Desarrollar un sitio web dinámico e interactivo

PHP 7 Desarrollar un sitio web dinámico e interactivo Preámbulo 1. Objetivo del libro 11 2. Breve historia de PHP 12 3. Dónde conseguir PHP? 13 4. Convenciones de escritura 14 Introducción a PHP 1. Qué es PHP? 15 2. Estructura básica de una página PHP 17

Más detalles

Lenguajes y Compiladores Análisis Sintáctico Parte I. Teoría Lenguajes 1

Lenguajes y Compiladores Análisis Sintáctico Parte I. Teoría Lenguajes 1 Facultad de Ingeniería de Sistemas Lenguajes y Compiladores Análisis Sintáctico Parte I 1 Introducción El analizador sintáctico recibe una secuencia de tokens y decide si la secuencia está correcta o no.

Más detalles

LENGUAJE. Tema 2 Elementos de un programa

LENGUAJE. Tema 2 Elementos de un programa LENGUAJE Tema 2 Elementos de un programa ELEMENTOS DE UN PROGRAMA Comentarios. Identificadores. Constantes. Variables. Operadores. Sentencias o instrucciones. COMENTARIOS Los comentarios en C pueden ocupar

Más detalles

Guía práctica de estudio 03: Algoritmos

Guía práctica de estudio 03: Algoritmos Guía práctica de estudio 03: Algoritmos Elaborado por: M.C. Edgar E. García Cano Ing. Jorge A. Solano Gálvez Revisado por: Ing. Laura Sandoval Montaño Guía práctica de estudio 03: Algoritmos Objetivo:

Más detalles

ALGORITMOS DIGITALES II. Ing. Hugo Fdo. Velasco Peña Universidad Nacional 2006

ALGORITMOS DIGITALES II. Ing. Hugo Fdo. Velasco Peña Universidad Nacional 2006 ALGORITMOS DIGITALES II Ing. Hugo Fdo. Velasco Peña Universidad Nacional 2006 OBJETIVOS Conocer los principios básicos de los algoritmos. Establecer paralelos entre los algoritmos, los programas y las

Más detalles

DEFINICIONES BÁSICAS E INTRODUCCIÓN A LENGUAJES FORMALES

DEFINICIONES BÁSICAS E INTRODUCCIÓN A LENGUAJES FORMALES 1 DEFINICIONES BÁSICAS E INTRODUCCIÓN A LENGUAJES FORMALES Los LENGUAJES FORMALES están formados por PALABRAS, las palabras son CADENAS y las cadenas están constituidas por SÍMBOLOS de un ALFABETO. SÍMBOLOS

Más detalles

2.5.1. Procesamiento de documentos XML.

2.5.1. Procesamiento de documentos XML. 2.5.1. Procesamiento de documentos XML. Un analizador o parser XML es una herramienta encargada de leer documentos XML [17], poder acceder a sus elementos y comprobar si el documento es sintácticamente

Más detalles

Unidad V Análisis Semántico. M.C. Juan Carlos Olivares Rojas

Unidad V Análisis Semántico. M.C. Juan Carlos Olivares Rojas Unidad V Análisis Semántico M.C. Juan Carlos Olivares Rojas Agenda 5.1 Analizador semántico 5.2 Verificación de tipos en expresiones. 5.3 Conversión de tipos. 5.4 Acciones agregadas en un analizador sintáctico

Más detalles

Conjuntos Los conjuntos se emplean en muchas áreas de las matemáticas, de modo que es importante una comprensión de los conjuntos y de su notación.

Conjuntos Los conjuntos se emplean en muchas áreas de las matemáticas, de modo que es importante una comprensión de los conjuntos y de su notación. NÚMEROS REALES Conjuntos Los conjuntos se emplean en muchas áreas de las matemáticas, de modo que es importante una comprensión de los conjuntos y de su notación. Un conjunto es una colección bien definida

Más detalles

Universidad Autónoma del Estado de México Facultad de Medicina

Universidad Autónoma del Estado de México Facultad de Medicina Universidad Autónoma del Estado de México Facultad de Medicina Licenciatura en Bioingeniería Médica Unidad de Aprendizaje: Algoritmos y programación básica Unidad 3: Estructuras de control de flujo en

Más detalles

Maquina de Turing. 5. Fundamentos de algoritmos. Turing TURING TURING 10/08/2010. MI Elizabeth Fonseca Chávez

Maquina de Turing. 5. Fundamentos de algoritmos. Turing TURING TURING 10/08/2010. MI Elizabeth Fonseca Chávez Maquina de Turing 5. Fundamentos de algoritmos MI Elizabeth Fonseca Chávez matemático inglés Alan Turing Turing Definición de algoritmo: conjunto ordenado de operaciones que permite hallar la solución

Más detalles

Es toda la información que utiliza el computador. Según sea la información que guardemos en los datos, se clasifican en los siguientes tipos:

Es toda la información que utiliza el computador. Según sea la información que guardemos en los datos, se clasifican en los siguientes tipos: Tipos de datos. Dato: Es toda la información que utiliza el computador. Según sea la información que guardemos en los datos, se clasifican en los siguientes tipos: I Numéricos: Almacenan números y con

Más detalles

Lección 2 Introducción al lenguaje C

Lección 2 Introducción al lenguaje C Lección Introducción al lenguaje C Decimal Binario Hexadecimal A B C D E F Octal Equivalencia entre decimal, binario, hexadecimal y octal. Código ASCII (American Standard Code for Information Interchange)

Más detalles

TECNICO SUPERIOR EN INFORMÁTICA EMPRESARIAL MÓDULO INTRUCCIONAL

TECNICO SUPERIOR EN INFORMÁTICA EMPRESARIAL MÓDULO INTRUCCIONAL 1 TECNICO SUPERIOR EN INFORMÁTICA EMPRESARIAL MÓDULO INTRUCCIONAL TECNOLOGÍA DE LA COMPUTADORA FACILITADOR: PARTICIPANTE: DAVID, CHIRIQUÍ 2015 2 Qué es un programa? Un programa informático es un conjunto

Más detalles

OPTIMIZACIÓN DE CÓDIGO

OPTIMIZACIÓN DE CÓDIGO OPTIMIZACIÓN DE CÓDIGO INTRODUCCION La finalidad de la optimización de código es producir un código objeto lo más eficiente posible. En algunos casos también se realiza una optimización del código intermedio.

Más detalles