Procesadores de Lenguajes Diseño de un lenguaje y de un traductor asociado. Curso Objetivo: Documentación a entregar:

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

Download "Procesadores de Lenguajes Diseño de un lenguaje y de un traductor asociado. Curso Objetivo: Documentación a entregar:"

Transcripción

1 Universidad de Castilla-La Mancha Escuela Superior de Informática Ciudad Real Procesadores de Lenguajes Diseño de un lenguaje y de un traductor asociado. Curso Objetivo: El objetivo de las prácticas es el desarrollo de un lenguaje sencillo y elemental y de un traductor asociado a él. Puesto que la realización de un traductor es un tema complejo y la complejidad depende de la estructura gramatical del lenguaje, el lenguaje que se debe diseñar es descrito en el Anexo I. El traductor debe obtener como salida la que se detalla en el Anexo II. Se admiten prácticas propuestas por los alumnos, siempre y cuando estas impliquen el diseño de un lenguaje con unos requerimientos mínimos y de un traductor para analizarlos y realizar alguna acción. Los alumnos interesados deberán ponerse en contacto con el profesor para discutir la práctica que proponen. La realización de la práctica estándar se hará en grupos de desarrollo de 2 personas, excepcionalmente 1 o 3. El número de personas permitidas en los grupos de las prácticas propuestas dependerá de su complejidad y deberá ser discutido con el profesor. Documentación a entregar: Cada grupo deberá entregar al finalizar el periodo de prácticas un documento y un disquete con implementaciones. A continuación se detalla los contenidos que deben aparecer en el documento y las implementaciones que se deben realizar: Sesiones dedicadas al lenguaje: 1. Introducción, describiendo el lenguaje diseñado. 2. Descripción de la sintaxis del lenguaje usando notación BNF o EBNF (ver Anexo III) o los diagramas de Conway (ver Anexo IV). 3. Definición de la semántica en lenguaje natural. Consiste en una descripción sencilla pero exacta de cómo se ejecuta cada instrucción del lenguaje y restricciones semánticas que puede tener cada instrucción. Toda esta información debe aparecer en la Documentación del las prácticas realizadas.

2 Sesiones dedicadas al analizador léxico: 4. Identificación de los tokens del lenguaje diseñado. En la documentación debe aparecer una tabla de tokens, en la que para cada token debe registrarse la siguiente información: Nombre del token. Valores posibles del token. Expresión regular asociada al token. Su regla de construcción. Identificativo numérico del tipo de token. A partir de este momento éste será el código por el cual se identificará el token. 5. Diseñar e implementar el programa analizador léxico desarrollado, que leerá el fichero fuente a analizar y como salida producirá: Los tokens encontrados en el fichero fuente, y cuando sea necesario su atributo asociado. Eliminar los comentarios y espacios en blanco, caracteres final de línea,... La información solicitada en el punto 5, debe presentarse en un disquete. Crear un directorio y llamarlo Analizador Léxico. Copiar en él, el fichero en lenguaje lex (*.l), y los ficheros necesarios para ejecutar el analizador léxico (fuentes y ejecutables). Si hay algún aspecto sobre el diseño del analizador léxico que creas que debe ser resaltado debes introducirla en documentación. Para la implementación del analizador léxico se debe usar una herramienta de generación automática de analizadores léxicos. La selección de esta herramienta dependerá del lenguaje de implementación seleccionado en la Práctica 1. De este modo, se utilizará Flex si el lenguaje de implementación es C y Jflex si este es Java. En el Anexo V, se introducen brevemente este tipo de herramientas, para profundizar en ellas se recomienda la lectura de la documentación de la herramienta. Sesiones dedicadas al análisis sintáctico: 6. Conversión de la descripción del lenguaje empleando notación BNF o EBNF, realizada en el punto 2, a producciones de una gramática libre de contexto. 7. Diseño e implementación del programa que realiza el análisis sintáctico. Este programa debe leer un fichero fuente cuyo contenido será un programa escrito según las reglas del lenguaje desarrollado en la sesión dedicada al lenguaje y como salida informará de la corrección o no de ese fichero. En caso de presencia de errores, el programa analizador sintáctico debe resolver los errores que se produzcan y no detenerse cada vez que encuentre un error sintáctico, como salida debe informar de los errores encontrados en ese fichero. La información solicitada en el punto 6, debe aparecer en la documentación de la práctica. La información solicitada en el punto 7, debe presentarse en el disquete. Crear un directorio y llamarlo Analizador Sintáctico. Copiar en él, el fichero en lenguaje yacc (*.y), y los ficheros necesarios para ejecutar el analizador sintáctico (fuentes y ejecutables). Introducir también el fichero en lenguaje lex (*.l) que interactúa con el analizador sintáctico. Crear además un fichero que contenga un programa escrito según las especificaciones del lenguaje desarrollado con el objeto de verificar su Página 2

3 funcionamiento. Incluir también un programa erróneo para comprobar como se comporta ante los errores. Para la implementación del analizador sintáctico se debe usar una herramienta de generación automática de analizadores sintácticos. La selección de esta herramienta dependerá del lenguaje de implementación seleccionado en la Práctica 1. De este modo, se utilizará Bisón si el lenguaje de implementación es C y JCup si este es Java. En el Anexo VI, se introducen brevemente este tipo de herramientas, para profundizar en ellas se recomienda la lectura de la documentación de la herramienta. Sesiones dedicadas al análisis semántico y tabla de símbolos: 8. Dar una especificación natural de la semántica del lenguaje desarrollado, es decir describir mediante un lenguaje natural las características semánticas, que no sean deducibles de la gramática BNF que describe sintácticamente el lenguaje. 9. Diseñar una estructura de datos para implementar la Tabla de Símbolos o emplear una de las que se ha estudiado en la clase de teoría, en ambos casos explicar porque se ha seleccionado. Estudiar que información es necesaria almacenar en ella. 10. Diseñar e implementar rutinas para el manejo de la tabla de símbolos. Escribir las acciones para crear y manejar la Tabla de símbolos (y donde sea necesario creación y eliminación de subtabla). Escribir una rutina para mostrar por pantalla o a un fichero (*.log) la tabla de símbolos en momentos concretos de la compilación. 11. Diseñar e implementar rutinas para la realización del análisis semántico. La información solicitada en el punto 8 y 9, debe ser incluida en la documentación. La información solicitada en los puntos 9, 10 y 11 debe ser almacenada en el disquete. Crear un directorio y llamarlo Análisis Semántico. Copiar en él, el fichero en lenguaje yacc (*.y) en su ultima versión y añadirle reglas semánticas para la realización de la comprobación semántica. Introducir los ficheros necesarios para ejecutar el analizador sintáctico (fuentes y ejecutables) y el fichero en lenguaje lex (*.l) que interactúa con el analizador sintáctico (y que utiliza atributos para pasarle información al analizador semántico). Crear además un fichero que contenga un programa escrito según las especificaciones del lenguaje desarrollado con el objeto de verificar el correcto funcionamiento del analizador semántico. Para la implementación del analizador semántico se debe usar la herramienta de generación automática de analizadores sintácticos utilizada en la práctica anterior añadiéndole atributos. En el Anexo VII, se describe brevemente como hacer esto en este tipo de herramientas, para profundizar en el tema se recomienda la lectura de la documentación de la herramienta. Sesiones dedicadas a la generación de código: 12. Establecer que tipo de atributos y acciones semánticas son necesarias para obtener la salida que se especifica en el Anexo II. 13. Incluir los atributos y acciones semánticas antes determinadas en el código del analizador semántico de manera que se obtenga la salida que se espera. La información solicitada en el punto 12 debe ser incluida en el documento. La información solicitada en los puntos 13 debe ser almacenada en el disquete. Crear un directorio y llamarlo Generación de Código. Copiar en él, el fichero en lenguaje yacc (*.y) en su ultima versión, con Página 3

4 las reglas semánticas que permiten la generación de código. Introducir los ficheros necesarios para ejecutar el analizador sintáctico (fuentes y ejecutables) y el fichero en lenguaje lex (*.l) que interactúa con el analizador sintáctico (y que utiliza atributos para pasarle información al analizador semántico). Crear además varios ficheros que contengan programas correctos e incorrectos según las especificaciones del lenguaje desarrollado con el objeto de verificar el correcto funcionamiento del traductor desarrollado. Página 4

5 Sobre el lenguaje de implementación empleado en las prácticas: Para la realización de las prácticas se puede utilizar cualquier lenguaje de programación y herramientas de utilidad de libre uso que se considere oportuno (por ejemplo Flex, Jflex para el análisis léxico y Jcup, Bison para el análisis sintáctico). Cuando se utilice otra herramienta se debe justificar su elección y explicar brevemente su funcionamiento en la documentación de la práctica. Se valorará positivamente la realización de una práctica novedosa, así como en la implementación final del traductor, la realización de un buen interfaz de usuario. Fechas de entrega y evaluación: La entrega de la primera práctica es obligatoria puesto que las demás prácticas dependerán del lenguaje diseñado. Se deberán tener en cuenta los comentarios y correcciones realizadas por el profesor para el desarrollo del resto de prácticas. Fecha de entrega de la primera práctica: 9 de Diciembre. Convocatoria de Junio: Fecha de entrega de las prácticas: 2 de Junio. Listas con los alumnos que han superado el examen de prácticas: 16 de Junio. Convocatoria de Septiembre: Fecha de entrega de las prácticas: 1 de Septiembre. Listas con los alumnos que han superado el examen de prácticas: 6 de Septiembre. Nota: El profesor podrá citar, cuando considere oportuno, a algún grupo para realizar una defensa de las prácticas en el laboratorio. Fdo. José Jesús Castro Sánchez Página 5

6 ANEXO I Se va diseñar un lenguaje para escribir gramáticas y establecer el tipo de análisis que se desea realizar sobre ella. El lenguaje diseñado debe tener las siguientes características: 1. Las gramáticas deben ser de tipo 2 o libres de contexto. 2. Permita expresar una o varias gramáticas en un mismo fichero de entrada. 3. El tipo de análisis que se desea realizar puede ser uno o varios de los siguientes tipos: LL(1) o SLR(1) o LR(1). 4. El tipo de análisis puede establecerse de una manera global, para todas las gramáticas o particular, para cada gramática. 5. Para una misma gramática pueden hacerse varios tipos de análisis. 6. Los símbolos terminales y no terminales pueden ser cualquier secuencia de letras, tanto en mayúsculas como en minúsculas o combinación de ambas. 7. Los símbolos terminales y no terminales pueden declararse de manera global, son válidos para todas las gramáticas del fichero, o de una manera particular, sólo tienen validez para la gramática en la que han sido declarados. 8. Permitir la declaración de conjuntos de producciones que puedan ser incluidos en la declaración de una gramática. Página 6

7 ANEXO II Como salida el traductor diseñado debe dar para cada gramática la tabla de análisis que se haya indicado: 1. Para el análisis LL(1), la tabla de análisis LL(1) 2. Para el análisis SLR(1), la tabla de análisis SLR(1). 3. Para el análisis LR(1), la tabla de análisis LR(1). Si existiera algún conflicto en la tabla, el traductor debería indicar cual es el motivo del conflicto. Página 7

8 ANEXO III BNF es el acrónimo de Backus-Naur Form, y fue utilizada para describir la sintaxis del lenguaje ALGOL 60. BNF es un ejemplo de un metalenguaje, un lenguaje empleado para describir otro lenguaje. Desde sus orígenes ha sido ampliamente empleada por desarrolladores de lenguajes como mecanismo para especificar sus reglas sintácticas. BNF tiene símbolos, llamados metasímbolos, y reglas propias, las cuales son empleadas para definir la sintaxis del lenguaje en cuestión. Veamos algunas definiciones para el correcto uso y entendimiento de esta notación: TERMINAL. Se dice que un símbolo es terminal cuando tiene entidad propia y se describe por si mismo, es decir no requiere ninguna explicación. Se suelen escribir en minúsculas (tokens del lenguaje). Generalmente se escriben en negrita. NO TERMINAL. Se dice que un símbolo es no terminal cuando requiere una definición mediante una regla o producción. Se suelen escribir en mayúsculas, y siempre irán encerrados entre paréntesis angulares < y >. METASIMBOLOS. Son aquellos símbolos que la notación utiliza para distinguir los elementos y propiedades de una regla. Los metasímbolos de BNF son: ::=, cuyo significado es es definido como, cuyo significado es o, es empleado para establecer alternativas. < y >, son empleados para definir categorías de nombres (NO TERMINAL). En la notación BNF se utilizan una serie de reglas o producciones cuyo objetivo es la descripción de símbolos NO TERMINAL. Cada regla tendrá la siguiente estructura: <NO TERMINAL>::=sucesión de símbolos terminales y no terminales que explican la parte izquierda. Es decir, una regla consiste en una parte izquierda (dato a explicar), separador (::=) y una parte derecha (explicación o descripción). La parte izquierda es siempre un símbolo no terminal, y en la parte derecha habrá una combinación cualquiera de símbolos terminales y no terminales, teniendo en cuenta que todo no terminal que aparezca en una descripción debe haber aparecido (o aparecer más adelante) como parte izquierda de una regla. Por ejemplo, la siguiente regla: <SENTENCIA_WHILE>::=while <EXPRESION> do <SENTENCIA> describe la sintaxis de la sentencia while de Pascal. Una producción o regla para un mini-lenguaje es: <PROGRAM>::=program <DECLARACIONES> begin <SECUENCIAS> end; Página 8

9 Muchos autores han introducido algunas extensiones a esta notación para facilitar su uso, dando lugar a la Forma Extendida Backus-Naur (EBNF, por sus siglas en inglés): Opcionales, son símbolos que pueden o no aparecer. Se emplea los corchetes [, ] como metasímbolos. <SENTENCIA_IF>::=if <CONDICION> then <SENTENCIA> [else <SENTENCIA>] Con BNF esto era realizado por medio de dos reglas: <SENTENCIA_IF>::=if <CONDICION> then <SENTENCIA><PARTE_ELSE> <PARTE_ELSE>::=else <SENTENCIA> ε Repeticiones, para indicar un número arbitrario de veces. Se emplean los metasímbolos llaves {, } para expresar la aparición de cero o varias veces la lista de elementos contenida entre las llaves. <IDENTIFICADOR>::=<LETRA> {<LETRA> <DIGITO>} Con BNF esto era realizado por medio de una regla recursiva: <IDENTIFICADOR>::=<LETRA> <IDENTIFICADOR> <RESTO> <RESTO>::=<LETRA> <DIGITO> Terminales de solo un carácter. Se representan por medio del carácter rodeado por o. <SECUENCIAS>::=<SECUENCIA> { ; <SECUENCIA>} Actualmente, los símbolos no terminales y terminales son distinguidos por medio del uso o no del formato negrita. Los símbolos terminales estarán en negrita, mientras que los no terminales serán representados con el formato normal y sin <, >. Esto facilita la lectura de la sintaxis. setencia_if::=if expresion_booleana then secuencias [else secuencias ] end if ; Veamos como ejemplo, la notación EBNF para expresar la sintaxis de EBNF: syntax: := {rule} rule ::= identifier ::= expression expression ::= term { term} term ::= factor {factor} factor ::= identifier comillas ( expression ) [ expression ] { expression } identifier ::= letra {letra digito} comillas ::= {letra} Página 9

10 Con la notación EBNF se consigue más claridad en las definiciones, con la recursividad eliminada de la definición BNF. A continuación puedes ver otro ejemplo, de la notación EBNF aplicable para expresiones simples: <expresión-simple>::=[signo]<término>{<operador-suma><término>} <término>::=<factor>{<operador-multiplicación><término>} <factor>::=<identificador> <constante-sin-signo> <designador-función> <constructor-conjunto> <expresiones> not <factor> <constante-sin-signo>::=<número-sin-signo> <cadena-caracteres> <identificador-constantes> <número-sin-signo>::=<secuencia-dígitos> <real-sin-signo> <secuencia-dígitos>::=dígito{dígito} <operador-suma>::=+ - <operador-multiplicación>::=* / div mod and En Internet tienes multitud de ejemplos sobre la notación BNF y EBNF, y si no pregunta a google!!! Página 10

11 ANEXO IV Puesto que las definiciones BNF o EBNF no siempre son obvias, los diagramas de sintaxis o gráficas de ferrocarril han llegado a ser populares, en especial en manuales de lenguajes elementales. Un diagrama de Conway es un grafo dirigido con un punto de entrada y otro de salida donde los elementos no terminales aparecen como rectángulos y los terminales como círculos. Con estos diagramas se pueden representar las mismas gramáticas que con la notación BNF o EBNF. Si uno sigue las flechas, se encuentra las mismas restricciones que en la definición BNF. Concatenación: AB A B Alternativa: A B A B Opción: [A] A Repetición: {A} A Cada símbolo no terminal de la gramática lleva asociado un diagrama de Conway que lo define, y se construye siguiendo las reglas antes mencionadas. Estos diagramas se leen de izquierda a derecha siguiendo el recorrido de las flechas. Cuando se encuentra un elemento no terminal (representado por medio de un rectángulo) se llama a su diagrama asociado. Si se encuentra un terminal se concatena a lo que ya se ha leído. Ejemplo: syntax Rule Página 11

12 rule identifier ::= expression expression term term term factor factor factor identifier comillas ( identifier ) [ identifier ] identifier { } identifier letra letra digito Página 12

13 comillas letra Página 13

14 ANEXO V Los analizadores léxicos se pueden construir automáticamente empleando unas herramientas que se denominan generadores de analizadores léxicos. Un generador de analizadores léxicos es un programa que tiene como entrada un texto escrito en un lenguaje patrón-acción y como salida produce un programa que implementa el autómata finito que reconoce los patrones y que ejecuta la acción asociada a cada patrón. En este lenguaje los patrones se especifican por medio de expresiones regulares. En el campo de la compilación, en el texto de entrada se describen por medio de expresiones regulares los componentes léxicos del lenguaje fuente, la acción asociada a cada patrón será la devolución del identificador numérico del token que reconoce el analizador sintáctico y si es necesario también puede pasar algún atributo. Como salida da el programa fuente del analizador léxico escrito en un lenguaje determinado, que dependerá de la herramienta empleada (Ver Figura V.1). escrito en lex Generador de analizadores léxicos fuente analizador léxico Figura V.1. Funcionamiento del generador de analizadores léxicos. Existen muchos generadores de analizadores léxicos, si bien los más populares son Lex, distribuido gratuitamente con el sistema UNIX, Flex distribuido con el sistema operativo Linux (también existe la versión para MS-DOS), y Jflex para MS-DOS. Los dos primeros generan código en C, mientras la última genera código en Java. El modo de emplear el generador de analizadores léxicos será el que se muestra en la Figura V.2. escrito en lex *.l Generador de analizadores léxicos fuente analizador léxico fuente Compilador del lenguaje fuente ejecutable Figura V.2. Plan de trabajo a la hora de generar el analizador léxico. Página 14

15 A partir de ahora haremos referencia al generador de analizadores léxicos lex, si bien el resto de herramientas son muy similares en cuanto a la forma de sus programas y a las normas de construcción de las expresiones regulares. El fichero de entrada al programa lex, tiene tres partes, separadas por una línea donde debe aparecer obligatoriamente un, como se muestra a continuación: definiciones reglas código del usuario En la sección de definiciones se pueden incluir definiciones de nombres que serán empleados en la sección de reglas para simplificar la especificación del analizador léxico, así como condiciones de arranque. Las definiciones de nombres tienen la siguiente forma: nombre expresión_regular donde nombre y expresión_regular deben ir separadas por al menos un espacio en blanco. Posteriormente, se puede hacer uso de este nombre, utilizando {nombre} que se expandirá a expresión regular. En esta sección también se puede incluir código en lenguaje fuente que figurará tal cual en el programa generado por el analizador léxico, por ejemplo inclusión de librerias estandar, llamadas al preprocesador, etc... Para colocar código en lenguaje fuente directamente en el programa generado se deberá poner en la columna 1 de una línea los símbolos %{, a continuación el código en lenguaje fuente que se desea incluir y para finalizar en una línea aparte y también en la columna 1, los símbolos }%. La sección de reglas de lex contienen una serie de reglas de la forma: Página 15 expresión_regular acción donde expresión_regular es un patrón que define un componente léxico, escrito conforme a las normas del lenguaje lex y en el que se puede hacer uso, como se ha especificado antes, de las definiciones de nombres definidas en las sección anterior. El patrón debe aparecer en la columna 1 y la acción debe estar en la misma línea que la acción. La acción es un fragmento de programa en lenguaje fuente, entre los símbolos { y }, que indica la acción a realizar por el analizador léxico, cuando reconoce el patrón al que está asociado. Las acciones pueden utilizar variables, funciones y macros definidas externamente y por defecto en el lex. También se pueden utilizar las funciones definidas en las sección de código de usuario. La forma de trabajar del programa fuente generado es reconocer patrones y realizar las acciones que están asociadas a dicho patrón. Existe una acción que se ejecuta por defecto, siempre que se lee un lexema que no coincide con ningún patrón de los que aparecen en la sección de reglas, esta acción consiste en mostrar por pantalla dicho

16 lexema. Si se desea, que no se realice esta acción por defecto se escribe la instrucción nula que generalmente será ; asociada a la expresión regular que denota cualquier carácter, que es. y que debería escribirse como última regla de la sección de reglas. Si hay varios patrones que tienen asociada la misma acción se puede usar el símbolo de alternativa para unir los patrones en la misma línea. El generador lex permite las especificaciones ambiguas, así cuando hay más de un patrón que empareja un lexema particular, lex elige la regla según el siguiente orden: 1. Prefiere el patrón más largo. 2. En el caso de que tengan la misma longitud, elige el que aparezca antes. Para más información sobre cómo construir los patrones y las acciones asociadas, se recomienda la lectura de la documentación de la herramienta que se vaya a utilizar. Finalmente, está la sección código del usuario que está formada exclusivamente por código en lenguaje fuente. Este código pasa sin modificaciones al fichero fuente del analizador léxico generado. Se utiliza para implementar rutinas de complemento que llaman al escaner o son llamadas por este. La presencia de esta sección es opcional. Cuando se desea utilizar el analizador léxico como un programa independiente que lea un fichero fuente y genere una determinada salida (Práctica 1), será necesario incluir en esta sección una función principal main que llame a la función yylex() que es la función que implementa el autómata que reconoce los patrones de la sección de reglas. Para conseguir este efecto en Jflex, será necesario incluir la opción %standalone en la sección de definiciones (Ver manual). A continuación se muestra un ejemplo de un programa en lex que puede ejecutarse independientemente: %{ /* Ejemplo de programa escrito en lex para detectar identificadores y numeros. */ #include <stdio.h> %} letra [a-za-z_] digito [0-9] alfanumerico [a-za-z_0-9] identificador {letra}{alfanumerico}* numero {digito}+(\.{digito}+)?(e[\+ \-]?{digito}+)? {identificador} printf( \nindentificador -> %s\n, yytext); {numero} printf( \nnúmero ->%s\n,yytext); main(argc,argv) int argc; char **argv; { if (argc>1) { FILE *file; Página 16

17 } yylex(); return 0; file= fopen(argv[1], r ); if (!file) { fprintf(stderr, No puedo abrir el fichero %s\n,argv[1]); exit(1); } yyin=file; } Página 17

18 ANEXO VI Los analizadores sintácticos se pueden construir automáticamente empleando unas herramientas que se denominan generadores de analizadores sintácticos. Un generador de analizadores sintácticos es un programa que tiene como entrada una gramática escrita en un lenguaje y como salida produce un programa en un lenguaje fuente que implementa el analizador sintáctico que reconoce cadenas y detecta si están escritas conforme a las producciones de la gramática. En el problema que nos ocupa, el diseño de un traductor, el generador de analizadores sintácticos partiría de la gramática que define el lenguaje fuente descrito en la Práctica 1 y produciría como salida el programa fuente del analizador sintáctico para esa gramática, encargado de tomar como entrada programas escritos conforme a ese lenguaje fuente y comprobar si son o no correctos. En la Figura VI.1 se muestra cual es el funcionamiento de esta herramienta, y su interacción con el analizador léxico. escrito en yacc *.y Generador de analizadores sintácticos fuente analizador sintáctico Página 18 Figura VI.1. Funcionamiento del generador de analizadores sintácticos. Existen muchos generadores de analizadores sintácticos, si bien los más populares son Yacc, distribuido gratuitamente con el sistema UNIX, Bison, BYacc, BYacc/J y JCup. Los tres primeros generan código en C, mientras la última genera código en Ja,va. El modo de emplear el generador de analizadores sintácticos será el que se muestra en la Figura VI.2, en esta explicación nos basamos en las herramientas del tipo Yacc o Bison. Recordad que el analizador sintáctico necesita de un analizador léxico que explore el texto fuente y que lo divida en tokens, que el analizador sintáctico se encargará de agrupar de una manera lógica. Nosotros utilizaremos una modificación del analizador léxico generado en la Práctica 2. Primero se escribe un fichero con extensión *.y que contiene una especificación del analizador sintáctico que se quiere generar, escrita en el lenguaje del generador de analizadores sintácticos. Posteriormente, se transforma ese fichero en un programa fuente que contiene el analizador sintáctico para la gramática especificada, además se genera un fichero *.h, que contiene la asociación numérica de los tokens de la gramática. Este fichero *.h se incluirá en la sección de definiciones del analizador léxico encargado de reconocer los tokens de la gramática, además se eliminará la llamada a la función main del analizador léxico de la Práctica 2, y se generará el programa fuente del analizador léxico. Por último, se compilan los dos programas fuentes obtenidos en los pasos anteriores, ya hemos construido el analizador sintáctico!

19 escrito en yacc *.y Generador de analizadores sintácticos fuente analizador sintáctico Fichero *. h que contiene la asociación numérica a los tokens escrito en lex Generador de analizadores léxicos fuente analizador léxico fuente analizador sintáctico fuente analizador léxico Compilador del lenguaje fuente ejecutable Figura VI.2. Plan de trabajo a la hora de generar el analizador sintáctico. La forma en la que interactúan las herramientas JFlex y JCup, que recordemos generan código Java, es distinta ya que ambas herramientas lo que hacen es crear clases. De este modo la ejecución de JFlex, sobre un fichero que contiene la especificación de los tokens del lenguaje (con la extensión *.flex), crea la clase lexer que contiene los datos y métodos necesarios para implementar el analizador léxico. La ejecución de JCup, sobre un fichero que contenga la especificación de la sintaxis del lenguaje diseñado (con la extensión *.cup), crea dos clases, una que contiene los datos y métodos necesarios para implementar el analizador sintáctico, llamada parser y otra con la definición de los símbolos de la gramática, denominada sym. Para una descripción más detallada sobre la forma en la que interactúan estas herramientas JFlex y JCup u otras se recomienda la lectura de su documentación. Página 19

20 A partir de ahora haremos referencia al generador de analizadores sintácticos Yacc, si bien el resto de herramientas son muy similares en cuanto a la forma de sus programas y a las normas de especificación de la gramática. El fichero de entrada al programa Yacc, tiene tres partes, separadas por una línea donde debe aparecer obligatoriamente un, como se muestra a continuación: declaraciones reglas de producción código del usuario o rutinas de apoyo en el lenguaje C En la sección de declaraciones se puede introducir código en lenguaje fuente, delimitado por los símbolos %{ y %} que deben aparecer sin tabular. Ejemplo de código fuente que puede ser incluido aquí son las proposiciones include necesarias y la declaración de las variables que sean utilizadas en las secciones segunda y tercera. Es en esta sección donde se declaran los componentes léxicos de la gramática, por medio de la directiva %token nombre_del_token (en JCup se hace de una manera diferente, con la palabra terminal nombre_del_token). Estos componentes léxicos podrán ser utilizados en la segunda sección de la especificación yacc. También se pueden asignar precedencias a los operadores y asociar atributos semánticos a los símbolos (terminales y no terminales) de la gramática (se explicará como en el Anexo VII). La siguiente sección reglas de producción contiene un conjunto de reglas que definen como construir cada símbolo no terminal a partir de sus partes constituyentes. Cada regla es una producción de la gramática y una acción semántica (se explicará qué es en el Anexo VII). La separación de las reglas en esta sección se realiza por medio del carácter ; (el punto y coma). Cada regla tendrá una parte izquierda, que consistirá en un no terminal de la gramática y una parte derecha, que consistirá en una combinación de símbolos terminales y no terminales de la gramática, ambas partes estarán separadas por el carácter : (dos puntos). En la herramienta JCup la separación entre las partes izquierda y derecha se hace por medio del símbolo ::=. Para obtener más información sobre la forma de escribir las reglas de producción de la gramática se recomienda la lectura de la documentación de la herramienta seleccionada. En la sección código del usuario o rutinas de apoyo en el lenguaje C puede aparecer cualquier código en lenguaje fuente que se desee utilizar, así como la definición de funciones que puedan emplearse en las acciones asociadas a las reglas de la sección reglas de producción. Para ejecutar el análisis sintáctico es necesario incluir en esta sección una función principal main que llame a la función yyparse() que es la función que llama a la función yylex() para obtener los componentes léxicos y van agrupándolos lógicamente conforme a las reglas de la sección de reglas de producción. A continuación se muestra un ejemplo de un programa en yacc y de su analizador léxico asociado: Página 20

21 %token IDENT NUMERO sentencia: IDENT = expresión expresion expresion: expresión + NUMERO expresión - NUMERO NUMERO ; main(int argc, char **argv) { char *file; extern FILE *yyin; if (argc>1) { file= fopen(argv[1], r ); if (!file) { fprintf(stderr, No puedo abrir el fichero %s\n,argv[1]); exit(1); } yyin=file; } yyparse(); return 0; } El analizador léxico asociado podría ser el siguiente: %{ #include sintactico.h %} [0-9]+ {return NUMERO;} [a-za-z][a-za-z_0-9]+ {return IDENT;}. ; Página 21

22 ANEXO VII El analizador semántico se encarga de dos misiones muy importantes en la fase de análisis de un compilador, primero se encarga de dar significado al programa fuente y en segundo lugar, de realizar las comprobaciones dependientes del contexto que no pueden ser expresadas por medio de una gramática libre de contexto, como por ejemplo comprobar si las variables han sido declaradas antes de ser usadas, si el número de argumentos de la llamada a un procedimiento son los adecuados conforme a la definición de la función, si el tipo de esos argumentos es correcto, si las operaciones se aplican a las variables de tipo correcto, etc. La forma de construir un analizador semántico es empleando las herramientas generadoras de analizadores sintácticos que ya han sido comentadas en el Anexo VI. De este modo se permite que el análisis semántico se realice a la vez que el análisis sintáctico empleando un tipo especial de gramáticas que son las gramáticas con atributos. Estas gramáticas son gramáticas libres de contexto en las que cada símbolo (terminal y no terminal) puede tener asociado un atributo y un valor para ese atributo, la complejidad de este atributo dependerá del tipo de acción semántica que vaya a realizar. Si un símbolo representa a un número, el atributo podría ser ese mismo número, si es un identificador este atributo podría ser la cadena de caracteres que forman ese identificador o un apuntador al lugar de la tabla se símbolos donde está almacenado. No todos los símbolos tienen que tener asociado un atributo. Normalmente, va a ser necesario tratar con atributos de distintos tipos, para permitir esto en herramientas como Yacc o Bison tendremos que definir una union en C llamada YYSTYPE para contener todos los atributos permitidos. En Yacc y Bison esto se hace de forma automática añadiendo la directiva %union en la zona de declaraciones, en ella se introducen todos los tipos de los atributos que se van a utilizar. Por ejemplo la introducción de la siguiente directiva en la sección de declaraciones del programa entrada a la herramienta Yacc: %union { double dval; int vblno; } permitiría utilizar dos tipos de atributos uno de tipo double y el otro de tipo int. Esta directiva hace que en el fichero *.h que genera la herramienta generadora de analizadores sintácticos también se introduzca el siguiente trozo de código: typedef union { double dval; int vblno; } YYSTYPE; extern YYSTYPE yylval; La variable yylval será usada por el analizador léxico para pasar los valores asociados a cada token. Si no se pone la directiva %union, la variable yyval tomará el tipo por defecto que es int. Página 22

23 En la herramienta JCup el uso de múltiples tipos de atributos se consigue por medio del uso del objeto Symbol que es el que devuelve el analizador léxico y los que son almacenados en la pila del analizador sintáctico. A la hora de trabajar con este objeto se tiene que tener en cuenta las asociaciones entre atributos y los símbolos de la gramática. A continuación veremos cómo y dónde se realiza la asociación de atributos a símbolos de la gramática. La asociación de atributos a símbolos se hace en la zona de declaraciones del programa entrada al generador del analizador sintáctico, empleando directivas del lenguaje de la herramienta generadora de analizadores léxicos, así en las herramientas Yacc, Bison y BYacc se emplean las directivas %token y %type, con la siguiente sintaxis: Página 23 %token <nombre_de_tipo> lista_de_nombres_terminales %type <nombre_de_tipo> lista_de_nombres_noterminales mientras que en la herramienta JCup se suele utilizar las directivas terminal y non terminal con la siguiente sintaxis: terminal nombre_de_tipo lista_de_nombres_terminales non terminal nombre_de_tipo lista_de_nombres_noterminales donde nombre_de_tipo es uno de los tipos que aparecen en la unión y lista_de_nombres_terminales y _NoTerminales son una secuencia de símbolos terminales y no terminales de la gramática, respectivamente, separados por el carácter,. Una vez detallado el mecanismo para asociar atributos a símbolos de la gramática, queda describir cómo emplear estos atributos para la realización del trabajo del analizador semántico. Como fue explicado en el Anexo VI., la sección reglas de producción de un programa entrada a una herramienta generadora contiene un conjunto de reglas que definen como construir cada símbolo no terminal a partir de sus partes constituyentes, donde cada regla era una producción de la gramática que podía tener asociada una acción semántica. Las acciones semánticas son trozos de código en el lenguaje fuente de la herramienta que se escriben entre los caracteres { y } en las herramientas Yacc, Bison y BYacc y entre los caracteres {: y :} en la herramienta JCup. En las acciones semánticas se pueden utilizar funciones y procedimientos definidos en la sección código del usuario o rutinas de apoyo en el lenguaje C, así como a los atributos definidos en la sección declaraciones. En las herramientas Yacc, Bison y Byac, en una acción el símbolo $$ se refiere al valor del atributo asociado con el no terminal del lado izquierdo, mientras que $i se refiere al valor del atributo asociado al i-ésimo símbolo de la producción a la cual está asociada la acción semántica. En la herramienta JCup, en una acción para referirnos al valor del atributo asociado con el no terminal del lado izquierdo tendremos que utilizar el término RESULT. Para acceder al valor del atributo de algún símbolo de la producción, será necesario previamente etiquetarlo con una etiqueta, esto lo haremos asociando en la regla, al símbolo que queramos, por medio del carácter :, una etiqueta. Las acciones semánticas se ejecutan cuando se va a reducir por la producción a la que están asociadas.

24 A continuación se muestra un ejemplo de un programa en yacc con acciones semánticas y de su analizador léxico asociado: %{ #inlcude <stdio.h> %} %union{ } int dval; char *cad; %token <dval> NUMERO %token <cad> IDENT sentencia: IDENT = expresión { printf( Identificador %s tiene valor %d\n,$$,$1); } expresión { printf( Valor: %d\n,$1); } expresion: expresión + NUMERO { $$ = $1+$2; } expresión - NUMERO { $$ = $1-$2; } NUMERO { $$ = $1; } ; main(int argc, char **argv) { char *file; extern FILE *yyin; if (argc>1) { file= fopen(argv[1], r ); if (!file) { fprintf(stderr, No puedo abrir el fichero %s\n,argv[1]); exit(1); } yyin=file; } yyparse(); return 0; } El analizador léxico asociado podría ser el siguiente: %{ #include sintactico.h #include <string.h> %} [0-9]+ {yylval.dval = atoi(yytext); return NUMERO;} [a-za-z][a-za-z_0-9]+ {yylval.cad= strdup(yytext); return IDENT;}. ; Página 24

Analista Universitario en Sistemas. Taller de Programación II. Instituto Politécnico Superior. Trabajo Final

Analista Universitario en Sistemas. Taller de Programación II. Instituto Politécnico Superior. Trabajo Final Trabajo Final 1 Objetivo Comprender (en gran parte) un programa desarrollado en: C++ (Core ) Generador de código / Ejecución de comandos Flex (Lex) Lexer Genera un Analizador Léxico en C http://en.wikipedia.org/wiki/lex_(software)

Más detalles

TEORÍA DE AUTÓMATAS Y LENGUAJES FORMALES TRABAJO DE PRÁCTICAS. Convocatoria de junio de 2013

TEORÍA DE AUTÓMATAS Y LENGUAJES FORMALES TRABAJO DE PRÁCTICAS. Convocatoria de junio de 2013 TEORÍA DE AUTÓMATAS Y LENGUAJES FORMALES Ingeniería Técnica en Informática de Sistemas Segundo curso Departamento de Informática y Análisis Numérico Escuela Politécnica Superior Universidad de Córdoba

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

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

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

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

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

Generador de analizadores sintácticos BISON

Generador de analizadores sintácticos BISON Generador de analizadores sintácticos BISON PROCESADORES DE LENGUAJES 4 o Informática http://ccia.ei.uvigo.es/docencia/pl noviembre-2008 2008 ccia PL 1. Introducción Traduce la especificación de una gramática

Más detalles

FUNDAMENTOS DE INFORMÁTICA

FUNDAMENTOS DE INFORMÁTICA FUNDAMENTOS DE INFORMÁTICA Tema 1 Introducción a la Programación en Visual Basic Departamento de Ingeniería de Sistemas y Automática Universidad de Vigo undamentos de Informática. Departamento de Ingeniería

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

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

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

ESCUELA POLITÉCNICA SUPERIOR PRÁCTICA 2: EXPRESIONES, PRINTF Y SCANF

ESCUELA POLITÉCNICA SUPERIOR PRÁCTICA 2: EXPRESIONES, PRINTF Y SCANF ESCUELA POLITÉCNICA SUPERIOR GRADO EN DISEÑO IND. INFORMÁTICA CURSO 2012-13 PRÁCTICA 2: EXPRESIONES, PRINTF Y SCANF HASTA AHORA... En prácticas anteriores se ha aprendido: La estructura principal de un

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

PROCESADORES DE LENGUAJE EXAMEN FINAL 8-JUNIO-07

PROCESADORES DE LENGUAJE EXAMEN FINAL 8-JUNIO-07 PROCESADORES DE LENGUAJE EXAMEN FINAL 8-JUNIO-07 1. En qué método de análisis sintáctico puede suceder que en la construcción del árbol de derivación de las posibles expansiones de un símbolo no terminal

Más detalles

Informática Ingeniería en Electrónica y Automática Industrial

Informática Ingeniería en Electrónica y Automática Industrial Informática Ingeniería en Electrónica y Automática Industrial Entrada y salida estándar V1.3 Autores Entrada y salida estándar Entradas y salidas Salida con formato: printf() Entrada de datos con formato:

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

Tema 2 Introducción a la Programación en C.

Tema 2 Introducción a la Programación en C. Tema 2 Introducción a la Programación en C. Contenidos 1. Conceptos Básicos 1.1 Definiciones. 1.2 El Proceso de Desarrollo de Software. 2. Lenguajes de Programación. 2.1 Definición y Tipos de Lenguajes

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

PROPIEDADES DE LOS CAMPOS. Cada campo de una tabla dispone de una serie de características que proporcionan un control

PROPIEDADES DE LOS CAMPOS. Cada campo de una tabla dispone de una serie de características que proporcionan un control PROPIEDADES DE LOS CAMPOS Cada campo de una tabla dispone de una serie de características que proporcionan un control adicional sobre la forma de funcionar del campo. Las propiedades aparecen en la parte

Más detalles

Laboratorio de Arquitectura de Redes. Entrada y salida estándar

Laboratorio de Arquitectura de Redes. Entrada y salida estándar Laboratorio de Arquitectura de Redes Entrada y salida estándar Entrada y salida estándar Entradas y salidas Salida con formato: printf() Entrada de datos con formato: scanf() El buffer de teclado Entrada

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

La última versión disponible cuando se redactó este manual era la 5 Beta (versión ), y sobre ella versa este manual.

La última versión disponible cuando se redactó este manual era la 5 Beta (versión ), y sobre ella versa este manual. Manual de Dev-C++ 4.9.9.2 Página 1 de 11 Introducción Dev-C++ es un IDE (entorno de desarrollo integrado) que facilita herramientas para la creación y depuración de programas en C y en C++. Además, la

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

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

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

Agenda. BNF y EBNF Brevemente, lo necesario para especificar el lenguaje sobre el que vamos a trabajar.

Agenda. BNF y EBNF Brevemente, lo necesario para especificar el lenguaje sobre el que vamos a trabajar. Agenda BNF y EBNF Brevemente, lo necesario para especificar el lenguaje sobre el que vamos a trabajar. JLEX y JCUP Breve descripción del las herramientas para generar el parser o analizador sintáctico.

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

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

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

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

$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

Programación estructurada (Introducción a lenguaje C)

Programación estructurada (Introducción a lenguaje C) Programación estructurada (Introducción a lenguaje C) M. en C. Sergio Luis Pérez Pérez UAM CUAJIMALPA, MÉXICO, D. F. Trimestre 15-I Sergio Luis Pérez (UAM CUAJIMALPA) Curso de programación estructurada

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

TEMA 2. EL LENGUAJE C. ELEMENTOS BÁSICOS

TEMA 2. EL LENGUAJE C. ELEMENTOS BÁSICOS TEMA 2. EL LENGUAJE C. ELEMENTOS BÁSICOS Una vez que ya sabes crear tus propios programas, vamos a analizar los fundamentos del lenguaje de programación C. Este capítulo incluye además los siguientes temas:

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

Vamos a profundizar un poco sobre los distintos tipos de datos que podemos introducir en las celdas de una hoja de cálculo

Vamos a profundizar un poco sobre los distintos tipos de datos que podemos introducir en las celdas de una hoja de cálculo Tipos de datos. Vamos a profundizar un poco sobre los distintos tipos de datos que podemos introducir en las celdas de una hoja de cálculo Valores Constantes: Es un dato que se introduce directamente en

Más detalles

Práctica 3. Paso de parámetros entre subrutinas. 3. Consideraciones sobre el paso de parámetros

Práctica 3. Paso de parámetros entre subrutinas. 3. Consideraciones sobre el paso de parámetros Práctica 3. Paso de parámetros entre subrutinas 1. Objetivo de la práctica El objetivo de esta práctica es que el estudiante se familiarice con la programación en ensamblador y el convenio de paso de parámetros

Más detalles

DESCRIPCIÓN ESPECÍFICA NÚCLEO: COMERCIO Y SERVICIOS SUBSECTOR: INFORMÁTICA

DESCRIPCIÓN ESPECÍFICA NÚCLEO: COMERCIO Y SERVICIOS SUBSECTOR: INFORMÁTICA DESCRIPCIÓN ESPECÍFICA NÚCLEO: COMERCIO Y SERVICIOS SUBSECTOR: INFORMÁTICA Nombre del Módulo: PROGRAMACIÓN EN JAVASCRIPT Código: CSTI0087 total: 51 Horas Objetivo General: Crear contenido web basado en

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

Fundamentos de Programación 2017-I

Fundamentos de Programación 2017-I Fundamentos de Programación 2017-I Fundamentos para la construcción de código a partir del algoritmo Objetivo: El alumno construirá programas utilizando el lenguaje de programación C a través de un análisis

Más detalles

Tema 10: Tipos de datos definidos por el usuario

Tema 10: Tipos de datos definidos por el usuario Tema 10: Tipos de datos definidos por el usuario Indice 1. Introducción 2. Registros 2.1. Elementos de un registro 2.2 Arrays de registros 2.3. Registros con arrays 2.4. Registros con registros 2.5. Paso

Más detalles

Estructuras de control

Estructuras de control Estructuras de control Introducción Los algoritmos vistos hasta el momento han consistido en simples secuencias de instrucciones; sin embargo, existen tareas más complejas que no pueden ser resueltas empleando

Más detalles

Cristian Blanco

Cristian Blanco UNIDAD DIDÁCTICA 8. ANÁLISIS Y DISEÑO ORIENTADO A OBJETOS. DIAGRAMAS DE COMPORTAMIENTO En el siguiente enlace tienes una descripción y algunos ejemplos de todos los diagramas UML.: http://jms32.eresmas.net/tacticos/uml/umlindex.html

Más detalles

Estructuras de Datos Declaraciones Tipos de Datos

Estructuras de Datos Declaraciones Tipos de Datos Departamento de Informática Universidad Técnica Federico Santa María Estructuras de Datos Declaraciones Tipos de Datos Temas: 2-3-4 IWI-131, paralelo 01 Profesor: Teddy Alfaro O. Lenguaje de Programación

Más detalles

GUÍA DE ESTILO EN JAVA

GUÍA DE ESTILO EN JAVA GUÍA DE ESTILO EN JAVA Formato de líneas 1. No usar más de 80 caracteres por línea (imagen de tarjeta). De esta forma se pueden visualizar las líneas completas con un editor de texto o en una hoja impresa

Más detalles

JavaCC Parte I. 1 Compiladores / Guía VII / Ciclo Facultad: Ingeniería Escuela: Computación Asignatura: Compiladores.

JavaCC Parte I. 1 Compiladores / Guía VII / Ciclo Facultad: Ingeniería Escuela: Computación Asignatura: Compiladores. 1 Compiladores / Guía VII / Ciclo 02-2016 Centro de Investigación y Transferencia de Tecnología JavaCC Parte I Contenido Facultad: Ingeniería Escuela: Computación Asignatura: Compiladores En la presente

Más detalles

PROGRAMA DE LABORATORIO SECCIÓN: ÁREA A LA QUE PERTENECE: POS-REQUISITO: AUXILIAR:

PROGRAMA DE LABORATORIO SECCIÓN: ÁREA A LA QUE PERTENECE: POS-REQUISITO: AUXILIAR: UNIVERSIDAD DE SAN CARLOS DE GUATEMALA FACULTAD DE INGENIERÍA ESCUELA DE CIENCIAS PROGRAMA DE LABORATORIO CÓDIGO: 777 CRÉDITOS: 4 NOMBRE CURSO: ESCUELA: PRE-REQUISITO: Organización de Lenguajes y Compiladores

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

Java Avanzado. Guía 1. Java Avanzado Facultad de Ingeniería. Escuela de computación.

Java Avanzado. Guía 1. Java Avanzado Facultad de Ingeniería. Escuela de computación. Java Avanzado. Guía 1 Java Avanzado Facultad de Ingeniería. Escuela de computación. Java Avanzado. Guía 2 Introducción Este manual ha sido elaborado para orientar al estudiante de Java Avanzado en el desarrollo

Más detalles

En este artículo vamos a conocer los tipos de datos que podemos manejar programando en C.

En este artículo vamos a conocer los tipos de datos que podemos manejar programando en C. El primer objetivo de un programa informático es el manejo de datos. Un dato es toda aquella información que se puede tratar en un programa informático. En este artículo vamos a conocer los tipos de datos

Más detalles

1. Computadores y programación

1. Computadores y programación 1. Computadores y programación Informática y computadora (RAE) Informática (Ciencia de la computación) Conjunto de conocimientos científicos y técnicos que hacen posible el tratamiento automático de la

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

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

Programación Estructurada

Programación Estructurada Programación Estructurada PROGRAMACIÓN ESTRUCTURADA 1 Sesión No. 2 Nombre: El lenguaje de programación C Contextualización Una constante en todos los lenguajes de programación (viejos y nuevos) es la implementación

Más detalles

Laboratorio de Arquitectura de Redes. Punteros en lenguaje C

Laboratorio de Arquitectura de Redes. Punteros en lenguaje C Laboratorio de Arquitectura de Redes Punteros en lenguaje C Punteros en lenguaje C Definición Declaración e inicialización de punteros Operadores de punteros: «*» y «&» Operaciones con punteros Operaciones

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

Lenguaje de programación. COMPILADORES Unidad I: Introducción al proceso de compilación

Lenguaje de programación. COMPILADORES Unidad I: Introducción al proceso de compilación COMPILADORES Unidad I: Introducción al proceso de compilación Flor Prof. Flor Narciso GIDyC-Departamento de Computación LABSIULA-Escuela de Ingeniería de Sistemas Facultad de Ingeniería Universidad de

Más detalles

LA ESTRUCTURA DE DATOS PILA EN JAVA. CLASE STACK DEL API JAVA. EJEMPLO Y EJERCICIOS RESUELTOS. (CU00923C)

LA ESTRUCTURA DE DATOS PILA EN JAVA. CLASE STACK DEL API JAVA. EJEMPLO Y EJERCICIOS RESUELTOS. (CU00923C) APRENDERAPROGRAMAR.COM LA ESTRUCTURA DE DATOS PILA EN JAVA. CLASE STACK DEL API JAVA. EJEMPLO Y EJERCICIOS RESUELTOS. (CU00923C) Sección: Cursos Categoría: Lenguaje de programación Java nivel avanzado

Más detalles

Lenguaje de programación C. Introducción

Lenguaje de programación C. Introducción Lenguaje de programación C Introducción 1 Elementos del lenguaje C Colección de funciones Estas funciones contienen declaraciones, sentencias, expresiones y otros elementos que en conjunto indican a la

Más detalles

Variables. Una variable no es más que un nombre simbólico que identifica una dirección de memoria: vs.

Variables. Una variable no es más que un nombre simbólico que identifica una dirección de memoria: vs. Variables Una variable no es más que un nombre simbólico que identifica una dirección de memoria: Suma el contenido de la posición 3001 y la 3002 y lo almacenas en la posición 3003 vs. total = cantidad1

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

GENERALIDADES DEL LENGUAJE C

GENERALIDADES DEL LENGUAJE C GENERALIDADES DEL LENGUAJE C La cadena con formato debe ir encerrada entre comillas dobles, no simples. El carácter de retorno de carro (\n) es obligatorio si se desea finalizar la impresión con un salto

Más detalles

2007/ PROGRAMACIÓN. Tipo: TRO Curso: 1 Semestre: AB CREDITOS Totales TA TS AT AP PA OBJETIVOS. 1.-Introducción.

2007/ PROGRAMACIÓN. Tipo: TRO Curso: 1 Semestre: AB CREDITOS Totales TA TS AT AP PA OBJETIVOS. 1.-Introducción. 2007/2008 Tipo: TRO Curso: 1 Semestre: AB CREDITOS Totales TA TS AT AP PA OBJETIVOS 1.-Introducción. -Comprender cómo funciona un lenguaje de programación 2. Características del lenguaje C -Entender las

Más detalles

APUNTADORES. Un apuntador es un objeto que apunta a otro objeto. Es decir, una variable cuyo valor es la dirección de memoria de otra variable.

APUNTADORES. Un apuntador es un objeto que apunta a otro objeto. Es decir, una variable cuyo valor es la dirección de memoria de otra variable. APUNTADORES Un apuntador es un objeto que apunta a otro objeto. Es decir, una variable cuyo valor es la dirección de memoria de otra variable. No hay que confundir una dirección de memoria con el contenido

Más detalles

Operaciones básicas con hojas de cálculo

Operaciones básicas con hojas de cálculo Operaciones básicas con hojas de cálculo Insertar hojas de cálculo. Para insertar rápidamente una hoja de cálculo nueva al final de las hojas de cálculo existentes, haga clic en la ficha Insertar hoja

Más detalles

Carlos Montenegro. Programación Orientada a Objetos Proyecto Curricular de Ingeniería de Sistemas

Carlos Montenegro. Programación Orientada a Objetos Proyecto Curricular de Ingeniería de Sistemas 2 - Introducción al lenguaje Java, identificadores y comentarios. Carlos Montenegro Programación Orientada a Objetos Proyecto Curricular de Ingeniería de Sistemas 1. Introducción: Java tiene como todos

Más detalles

Instituto Tecnológico de Celaya

Instituto Tecnológico de Celaya CADENAS DE CARACTERES Hasta ahora se han manejado variables de tipo caracter cuyo valor es un sólo caracter. En algunos casos, sin embargo, es necesario usar variables cuyos valores sean un conjunto (cadena)

Más detalles

Relación de prácticas de la asignatura METODOLOGÍA DE LA PROGRAMACIÓN Segundo Cuatrimestre Curso º Grado en Informática

Relación de prácticas de la asignatura METODOLOGÍA DE LA PROGRAMACIÓN Segundo Cuatrimestre Curso º Grado en Informática Relación de prácticas de la asignatura METODOLOGÍA DE LA PROGRAMACIÓN Segundo Cuatrimestre Curso 2013-2014. 1º Grado en Informática Práctica 2: Memoria dinámica y Bibliotecas Objetivos Practicar conceptos

Más detalles

Ficheros conceptos. Manejo de ficheros en C. Apertura del fichero Función fopen: nombre del fichero. Apertura del fichero Función fopen

Ficheros conceptos. Manejo de ficheros en C. Apertura del fichero Función fopen: nombre del fichero. Apertura del fichero Función fopen Fundamentos de Informática. Dpto. de ATC - Página 1 de 8 conceptos Manejo de ficheros en C Contienen los datos que se almacenan en dispositivos de almacenamiento masivo: disquetes, discos duros, DROM,

Más detalles

Inicio del programa. Entrada de datos. Proceso de datos. Salida de datos. Fin del programa

Inicio del programa. Entrada de datos. Proceso de datos. Salida de datos. Fin del programa PROGRAMACIÓN 10. Prof. Dolores Cuiñas H. Recuerde que estos son apuntes muy simplificados que deberá completar con la bibliografía recomendada APUNTES Nº 4 ESTRUCTURA SECUENCIAL GENERAL La estructura secuencial

Más detalles

Programación. Práctica Final

Programación. Práctica Final Programación Autores: M. Paz Sesmero Lorente Paula de Toledo Heras Fco. Javier Ordoñez Morales Juan Gómez Romero Jose A. Iglesias Martínez Jose Luis Mira 1 1. Introducción. El objetivo de esta práctica

Más detalles

Métodos que devuelven valor Dado el siguiente triángulo rectángulo:

Métodos que devuelven valor Dado el siguiente triángulo rectángulo: Métodos que devuelven valor Dado el siguiente triángulo rectángulo: hipotenusa altura base Para dibujar este triángulo necesitamos los siguientes datos: base y altura La base y la altura, se utilizarán

Más detalles

Guía práctica de estudio 05: Diagramas de flujo

Guía práctica de estudio 05: Diagramas de flujo Guía práctica de estudio 05: Diagramas de flujo 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 05: Diagramas de

Más detalles

DIAGRAMAS DE FLUJO ELEMENTOS E INSTRUCCIONES A USAR EN UN DIAGRAMA DE FLUJO

DIAGRAMAS DE FLUJO ELEMENTOS E INSTRUCCIONES A USAR EN UN DIAGRAMA DE FLUJO DIAGRAMAS DE LUJO Un Diagrama de lujo es la representación gráfica de los pasos a seguir para lograr un objetivo, que habitualmente es la solución de un problema. Por Logical se entiende, en algunos libros,

Más detalles

Introducción a C++ y Code::Blocks

Introducción a C++ y Code::Blocks Introducción a C++ y Práctica Imperativo Clase 1 Luis Agustín Nieto Departamento de Computación, FCEyN,Universidad de Buenos Aires. 28 de mayo de 2010 Menu de esta Tarde Funcional Vs. Imperativo (Intérprete

Más detalles

TEMA 4. ESTRUCTURAS DE CONTROL

TEMA 4. ESTRUCTURAS DE CONTROL M.P. Sesmero, P. de Toledo, F.J. Ordoñez, J. Gómez-Romero, J.A. Iglesias, J.L. Mira Programación TEMA 4. ESTRUCTURAS DE CONTROL Grado en Ingeniería en Tecnologías Industriales Programación CONTENIDOS 4.1.

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

Fila: Es un conjunto de varias celdas dispuestas en sentido horizontal.

Fila: Es un conjunto de varias celdas dispuestas en sentido horizontal. Que Es Excel? Excel es un programa que permite la manipulación de libros y hojas de calculo. En Excel, un libro es el archivo en que se trabaja y donde se almacenan los datos. Como cada libro puede contener

Más detalles

Técnicas de Programación

Técnicas de Programación Técnicas de Programación 2.1.- Introducción: unos conceptos previos y primeros conceptos de la API Introducción La resolución de un problema con medios informáticos implica generalmente la siguiente secuencia

Más detalles

Escuela Politécnica Superior de Elche

Escuela Politécnica Superior de Elche EXAMEN DE SISTEMAS INFORMÁTICOS INDUSTRIALES ((SOLUCIÓN) (TEORÍA)jUJ jhshshs SEPTIEMBRE 2015 1. Indicar si las siguientes afirmaciones son verdaderas o falsas: (a) En C++, una clase derivada puede acceder

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

Tema V Generación de Código

Tema V Generación de Código Tema V Generación de Código Una vez que se ha realizado la partición HW/SW y conocemos las operaciones que se van a implementar por hardware y software, debemos abordar el proceso de estas implementaciones.

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

MANUAL DE RUBY (PARTE I) Luis José Sánchez González

MANUAL DE RUBY (PARTE I) Luis José Sánchez González MANUAL DE RUBY (PARTE I) Luis José Sánchez González 1. QUÉ ES RUBY? Ruby es un lenguaje de programación interpretado y orientado a objetos muy potente y al mismo tiempo muy sencillo. Para apreciar la extrema

Más detalles

Programación MODULAR: Subalgoritmos - funciones y procedimientos

Programación MODULAR: Subalgoritmos - funciones y procedimientos Programación MODULAR: Subalgoritmos - funciones y procedimientos Uno de los métodos fundamentales para resolver un problema es dividirlo en problemas más pequeños, llamados subproblemas. Estos problemas

Más detalles

Computación Aplicada. Universidad de Las Américas. Aula virtual de Computación Aplicada. Módulo de Excel 2013 LIBRO 2

Computación Aplicada. Universidad de Las Américas. Aula virtual de Computación Aplicada. Módulo de Excel 2013 LIBRO 2 Computación Aplicada Universidad de Las Américas Aula virtual de Computación Aplicada Módulo de Excel 2013 LIBRO 2 Contenido TIPOS DE DATOS Y FORMATOS EN EXCEL 2013... 3 Tipo de dato - TEXTO... 4 Tipo

Más detalles

Una Herramienta para el Análisis Léxico: Lex

Una Herramienta para el Análisis Léxico: Lex Una Herramienta para el Análisis Léxico: Lex Alejandro Viloria Lanero (aviloria@infor.uva.es) Teoría de Autómatas y Lenguajes Formales Universidad de Valladolid Como hemos ido viendo, el shell de los sistemas

Más detalles

Tema 13: Apuntadores en C

Tema 13: Apuntadores en C Tema 13: Apuntadores en C M. en C. Edgardo Adrián Franco Martínez http://www.eafranco.com edfrancom@ipn.mx @edfrancom edgardoadrianfrancom Estructuras de datos (Prof. Edgardo A. Franco) 1 Contenido Introducción

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

FUNDAMENTOS DE INFORMÁTICA

FUNDAMENTOS DE INFORMÁTICA FUNDAMENTOS DE INFORMÁTICA Tema 2 Expresiones, operadores y estructuras de control Departamento de Ingeniería de Sistemas y Automática Universidad de Vigo Fundamentos de Informática. Departamento de Ingeniería

Más detalles

Unidad I Introducción a la programación de Sistemas. M.C. Juan Carlos Olivares Rojas

Unidad I Introducción a la programación de Sistemas. M.C. Juan Carlos Olivares Rojas Unidad I Introducción a la programación de Sistemas M.C. Juan Carlos Olivares Rojas Agenda 1.1 Qué es y que estudia la programación de sistemas? 1.2 Herramientas desarrolladas con la teoría de programación

Más detalles

Lenguaje C Elementos de un Programa. Ing. Hugo Fdo. Velasco Peña Universidad Nacional 2006

Lenguaje C Elementos de un Programa. Ing. Hugo Fdo. Velasco Peña Universidad Nacional 2006 Lenguaje C Elementos de un Programa Ing. Hugo Fdo. Velasco Peña Universidad Nacional 2006 Objetivos Conocer los elementos que conforman un programa en C 1. Elementos léxicos de un Programa Cuando el programa

Más detalles

UNIVERSIDAD DE SEVILLA PRÁCTICAS DE LABORATORIO JFLEX LENGUAJES FORMALES Y AUTÓMATAS CURSO 2005/2006

UNIVERSIDAD DE SEVILLA PRÁCTICAS DE LABORATORIO JFLEX LENGUAJES FORMALES Y AUTÓMATAS CURSO 2005/2006 UNIVERSIDAD DE SEVILLA E. T. S. INGENIERÍA INFORMÁTICA LENGUAJES Y SISTEMAS INFORMÁTICOS PRÁCTICAS DE LABORATORIO JFLEX LENGUAJES FORMALES Y AUTÓMATAS CURSO 2005/2006 Qué es el análisis léxico? El análisis

Más detalles

Teoría de Autómatas y Lenguajes Formales LEX BISON Dr. Eric Jeltsch F. Introducción para los laboratorios y actividades relacionadas.

Teoría de Autómatas y Lenguajes Formales LEX BISON Dr. Eric Jeltsch F. Introducción para los laboratorios y actividades relacionadas. Introducción para los laboratorios y actividades relacionadas. Flex y Bison son las herramientas desarrolladas en el proyecto GNU (Free Software Foundation) equivalentes a lex y yacc en el sistema operativo

Más detalles

Modelos de Computación I. Ingeniería Informática

Modelos de Computación I. Ingeniería Informática Prácticas Pag. 1 Modelos de Computación I Ingeniería Informática Práctica 1 Lex como localizador de expresiones regulares con acciones asociadas Curso 2008-2009 Profesores: Carlos J. Mantas Ruiz Aida Jiménez

Más detalles

Algoritmos. Diagramas de Flujo. Informática IV. L. S. C. Heriberto Sánchez Costeira

Algoritmos. Diagramas de Flujo. Informática IV. L. S. C. Heriberto Sánchez Costeira Informática IV Algoritmos Diagramas de Flujo L. S. C. Heriberto Sánchez Costeira Algoritmos 1 Definición Es una serie finita de pasos o instrucciones que deben seguirse para resolver un problema. Es un

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

C1 INTRODUCCIÓN AL LENGUAJE C. Fundamentos de Informática Departamento de Ingeniería de Sistemas y Automática. EII. Universidad de Valladolid

C1 INTRODUCCIÓN AL LENGUAJE C. Fundamentos de Informática Departamento de Ingeniería de Sistemas y Automática. EII. Universidad de Valladolid C1 INTRODUCCIÓN AL LENGUAJE C Fundamentos de Informática Departamento de Ingeniería de Sistemas y Automática. EII. Universidad de Valladolid Índice 1. Lenguajes de Programación 1. Definición. 2. Niveles

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