Prácticas Compiladores YACC Este material no es obligatorio para la práctica. Grupos de Kostadin Koruchev.

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

Download "Prácticas Compiladores YACC Este material no es obligatorio para la práctica. Grupos de Kostadin Koruchev."

Transcripción

1 Prácticas Compiladores YACC Este material no es obligatorio para la práctica. Grupos de Kostadin Koruchev. A quien se refiere: A los alumnos que por una u otra razón no han podido asistir en clase. Esto son los ejercicios que se han hecho en clase. Los ejemplos están ampliados en respeto con lo que se dio en clase. Contenido: Los ejercicios que se hicieron en clase con explicaciones y unos 4-5 problemas más. Como utilizarlo: En clase los ejercicios se dan uno tras otro y no se proporciona la solución antes de que los alumnos resuelven el problema. Esto es claramente imposible con un material en papel. El grado de manejo de la práctica depende del esfuerzo de cada alumno. Por tanto una simple lectura del material no ofrece mucho manejo de yacc. El procedimiento correcto es el siguiente: Leer con cuidado el material. Cuando hay que escribir un programa, intentar de escribirlo utilizando el material de referencia proporcionado en clase y la información en info yacc. Ocultar el resto de este manual con una hoja. Después de resolver el problema, comparar con la solución que se proporciona. Los puntos donde hay que parar de leer y hacer el ejercicio están marcados con ***************************** El final de la sección, donde se proporciona la solución del problema, se da con 1 Práctica 1. Introducción a yacc Yacc es una herramienta para construcción de analizadores sintácticos de lenguajes del tipo LR(1) (LALR). 1.1 Concepto: Consideramos el lenguaje: -> S S -> ( B ) B -> ( B ) (1) D D -> b D NIL 1

2 Construimos la tabla SLR de análisis: ( b ) D B $ S D->NIL D->NIL D->NIL 4 4 D->bD 5 B->D B->(B) S->(B) 10 ACCEPT Observación: 1. La tabla se construye utilizando un algoritmo bien conocido y no es necesario hacerla a mano. 2. Las decisiones(acciones) en el lenguaje pueden hacerse sólo al reducir una regla. Es preciso entonces al hacer la reducción, incluir las acciones. En yacc esto se escribe así: 1.2 Formato fichero entrada yacc S : ( B ) { acción; } donde acción representa sentencias en C, S - símbolo no terminal, (B) - la sentencia que se reduce a S. Con muchas reglas del mismo símbolo no terminal: B : ( B ) d D Yacc construye la tabla de análisis y ejecuta el trozo de programa {acción; }, antes de reducir los símbolos. También maneja la pila del autómata LR (de símbolos y estados). Los símbolos terminales con un carácter pueden sustituirse con el código (ASCII) del mismo, si esto es que devuelve del analizador morfológico. Al encontrar un error sintáctico, el analizador llama a yyerror(). El código de yacc se incluye en manera parecida de lex entre. Problema: 2

3 Escribir el lenguaje (1) en formato yacc. Compilar con yacc. ***************************** S : ( B ) { printf(" S->(B)\n");} B : ( B ) { printf(" B->(B)\n");} D { printf(" B->D\n");} D : b D { printf(" D-> b D\n");} /* NIL */ { printf(" D->NIL\n");} 1.3 yyerror(); main(); yylex(); El usuario tiene que proporcionar las funciones yyerror(), main() y yylex(). El funcionamiento de yylex() es el mismo que proporciona lex. yyerror() sirve para escribir los errores en stderr. main() invoca yyparse(). yyparse() es la función que se genera a partir de las definiciones de la gramática y las acciones. Es decir, todo entre y es yyparse(). Devuelve un entero igual a 0 si el análisis ha terminado con exito y 1 si el análisis ha terminado con error. /* ANALIZADOR MORFOLOGICO */ int yylex() { char ch=getchar(); if (ch== ( ch== b ch== ) ) return ch; return 0; } /* manejo de errores y main -- omitidos en los demas ejemplos */ void yyerror(a) { printf(a);} int main() { return yyparse();} 1.4 Valor semántico Como podemos ver el analizador se llama con yyparse(), y el analizador morfológico yylex() lo mismo como si está generado con lex. Atributos: Con cada símbolo yacc asocia un atributo sintetizado. El atributo de la regla que va a reducirse se calcula a partir de los atributos de la parte derecha. El tipo del valor semántico es YYSTYPE, que el usuario tiene que definir. Los valores se refieren como $1 para el primer símbolo a 3

4 reducir, $2 para el segundo símbolo etc. El valor del atributo del padre se refiere como $$: S : ( B ) -- regla $$ $1 $2 $3 -- atributos correspondientes (valores semánticos). Problema: Escribir un parser del lenguaje (1) que imprime el número de los b -s en la cadena. ***************************** %{ #define YYSTYPE int %} S : ( B ) { $$=$2; printf("número de b-s: %d\n",$$);} B : ( B ) { $$=$2; /* el mismo número de b como en el B */ } D { $$=$1; } D : b D { $$=$2+1; /* un b mas */} /*NIL*/ { $$=0; /* hay 0 b-s */ }... main & yyerror 1.5 Tipo del valor semántico El valor de los símbolos terminales no se puede calcular a partir de otros valores y hay que devolverlo desde el analizador morfológico. Esto se hace a través de una variable global llamada yylval, del tipo YYSTYPE. En yacc el atributo se refiere en la manera habitual ($1, $2...). Ejemplo: El lenguaje es: S-> (B) B-> (B) D D-> D NIL Problema: Calcular la suma de los dígitos en S. 4

5 Definimos el valor semántico del 0-9 como 0-9 y pasamos el token b como antes. ***************************** %{ #define YYSTYPE int %} S : ( B ) { $$=$2; printf("suma de digitos: %d\n",$$); } B : ( B ) { $$=$2;} D { $$=$1;} D : b D { $$=$2+$1;} /* NIL */ { $$=0;} // $ /* ANALIZADOR MORFOLOGICO */ int yylex() { char ch=getchar(); if (isdigit(ch)) { yylval=ch- 0 ; return b ; } if (ch== ( ch== ) ) return ch; return 0; } void yyerror() { printf("error\n");} int main() { return yyparse();} Problema: Calcular la suma de los dígitos en S y el numero de paréntesis en S. ******************************************* Como valor semántico necesitamos dos números. Entonces YYSTYPE es una estructura con dos miembros int. Una posible solución: %{ typedef struct cnts_t { int sum,par; } cnts_t; #define YYSTYPE cnts_t %} S : ( B ) { $$=$2; $$.par++; printf("suma de digitos: %d\n",$$.sum); printf("num. parentesis: %d\n",$$.par); 5

6 } B : ( B ) { $$=$2; $$.par++; } D { $$=$1; $$.par=0;} D : b D { $$.sum=$2.sum+$1.sum;} /* NIL */ { $$.sum=0; } // $ /* ANALIZADOR MORFOLOGICO */ int yylex() { char ch=getchar(); if (isdigit(ch)) { yylval.sum=ch- 0 ; return b ; } if (ch== ( ch== ) ) return ch; return 0; } void yyerror() { printf("error\n");} int main() { return yyparse();} 1.6 Tokens, operadores, asociación, precedencia Tokens. Generación fichero header para lex. Hay que definir los terminales del lenguaje como tokens, que el analizador utiliza. Esto se consigue en la parte de declaraciones con la directiva token. Los valores literales ( char ) no necesitan definición. A partir de estos tokens yacc puede definir los valores de los tokens de lex (con yacc -d) Operadores Tal como las operaciones aritméticas son frecuentes yacc incluye mejoras que permiten escribir más cómodo reglas de este tipo. Es decir, a lugar de escribir el lenguaje en forma SLR: exp : exp + mult exp - mult mult : mult / prim mult * prim prim : const ( exp ) En yacc uno puede escribir en forma LARL: 6

7 exp : exp + exp exp - exp exp / exp exp * exp ( exp ) const. El problema de este lenguaje es el conflicto shift/reduce al no saber en que orden reducimos /+. Por eso se definen asociación y prioridad de los operadores. La asociación se define con %left y %right: Asociación %left - significa que se interpreta como (5-5)-5 y %right - que se interpreta como 5-(5-5). Precedencia La precedencia se define con el orden de las declaraciones de los operadores. El orden habitual sería: %left - + %left * / con significado, que la precedencia de - y + es igual y es menor que la precedencia de * y /. Ejercicio: Menos unario tiene mayor precedencia que la resta. Por otro lado se expresa con el mismo símbolo. Ver en info bison como se realiza menos unario. 1.7 Ejemplos Intérprete Problema: Hacer calculadora con operaciones + / y (). Cada sentencia de la calculadora empieza con output seguida de una expresión numérica y termina con punto-coma. Todos los números son enteros. Todos los demás símbolos se pueden ignorar. *************************************** Construimos la gramática: prog : output exp ; prog exp : exp + exp exp - exp 7

8 exp / exp exp * exp ( exp ) const Escribimos la gramática en formato yacc (calc.y): %{ #define YYSTYPE int %} %token output %token cnst %left - + %left * / prog : OUTSTM prog OUTSTM : output exp ; { printf("%d\n",$2); } exp : exp + exp { $$=$1+$3;} exp - exp { $$=$1-$3;} exp / exp { $$=$1/$3;} exp * exp { $$=$1*$3;} ( exp ) { $$=$2;} cnst { $$=$1;} Escribimos analizador léxico (calc.lex): %{ #define YYSTYPE int extern YYSTYPE yylval; #include "y.tab.h" %} output { return output; } [;+/*()-] { return yytext[0]; } [0-9]+ { yylval=atoi(yytext); return cnst; }. ; \n ; 8

9 Compilamos y ejecutamos. De paso generamos el header y salida para depurar. yacc -d -v calc.y ; lex calc.lex ; gcc y.tab.c lex.yy.c -lfl ;./a.out Cálculos con maquina de pila Problema: Definimos una maquina de pila con operaciones: push,print,mul,add,sub,div con la siguiente semántica: int st[1000],sp=0; static pop() { return st[--sp];} void push(int a) { st[sp++]=a; } void mul() { int b=pop(); push(pop()*b);} void div() { int b=pop(); push(pop()/b);} void add() { int b=pop(); push(pop()+b);} void sub() { int b=pop(); push(pop()-b);} void print() { printf("%d\n",pop());} Escribir un compilador del lenguaje anterior (de la calculadora) y esta máquina de pila: ***************************************** Como se trata de máquina de pila no es necesario propagar información al padre. Por eso: Lex como de arriba. Yacc: %token output %token cnst %left - + %left * / prog : OUTSTM prog OUTSTM : output exp ; { printf("print();\n"); } exp : exp + exp { printf("add();\n");} exp - exp { printf("sub();\n");} exp / exp { printf("div();\n");} exp * exp { printf("mul();\n");} 9

10 ( exp ) { } cnst { printf("push(%d);\n",$1); } int main() { int r; printf("main(){\n"); r=yyparse(); printf("}\n"); return r; } Emulación de máquina de pila Ejercicio: Cambiar por add() pop ax bx add ax,bx push ax y ver la salida Máquina con registros Problema: Hay que generar código para expresión aritmética (sólo +, y ()) para una máquina con número de registros infinito (cuádruplas). Por ejemplo: (2 + 3) (5 + 6) genera: 2 -> r1 3 -> r2 r1 + r2 -> r3 5 -> r4 6 -> r5 r4 + r5 -> r6 r3 - r6 -> r7 El lenguaje es: %left

11 exp : num exp + exp exp - exp ( exp ) ; ***************************************** Está claro que el número del registró del resultado es solo un número consecutivo de la producción que reducimos. Por otra parte está claro que el número de los registros en la parte izquierda son los hijos de la producción que se reduce. Por tanto hay que pasar solo el número del registro. %{ int reg=0; #include <stdio.h> %} %left + - exp : n { $$=reg++; printf("%d -> r%d\n",$1,$$); } exp + exp { $$=reg++; printf("r%d + r%d -> r%d\n",$1,$3,$$); } exp - exp { $$=reg++; printf("r%d - r%d -> r%d\n",$1,$3,$$); } ( exp ) { $$=$2;} ; yyerror(a) { printf((char *)a); } main() { yyparse(); } Pregunta: Por qué lo que genera la máquina son cuádruplas y no triples, si no participan mas que 3 registros? Problema (para casa): Está claro que con la notación de arriba si un regisrtro aparece en la parte izquierda de la salida ya no aparecerá nunca más. Hacer reutilización de su número, es decir utilizar un número mínimo de registros sin cambios en la gramática. Problema (para casa): Si un programa tiene N números y 2K paréntesis en la expresión, cuántos registros L necesita sin reutilización? Cuántos registros M máximo necesita con reutilización? Si los paréntesis están aleatoriamente distribuidos y utilizamos reutilización, cuántos registros Q promedio necesita? Respuestas: L = 2N, M = K + 3, Q = log 2 (K + 1)

12 2 Práctica 2. Conflictos del lenguaje, tratamiento de errores, depuración 2.1 Depuración Hay varias maneras de depurar un programa escrito en yacc. Una de las maneras es de incluir printf() en las acciones donde suponemos que hay error. Sin embargo está manera está limitada a la parte que controlamos, es decir sólo al reducir reglas. Para depurar la gramática y el autómata, se hace lo siguiente: 1. Se compila con bandera -v yacc -v Se compila el código C con YYDEBUG definido gcc -DYYDEBUG En el código C hay que ejecutar yydebug=1; en el principio de la sección que vamos a depurar y yydebug=0; cuando ya no necesitamos la depuración. Problema: En el intérprete de la calculadora incluir antes de la llamada de yyparse() yydebug=1 y ejecutar la calculadora con opciones de depuración. Analizar la salida. Está claro que la salida es enorme. Por tanto, es normal que yydebug=1 se incluye en las acciones justo antes de la parte que vamos a depurar y se pone a 0 justo después. Problema: En el intérprete de la calculadora, incluir un símbolo de la gramática : que alterna el estado de depuración. Por defecto, el estado de depuración está activo. Probar con las entradas: : output 5+6; output 5*6+20/5; : output 3/2;: output 5++; y output 5++; *************************************... OUTSTM : output exp ; { printf("%d\n",$2); } 12

13 : { yydebug=1-yydebug;}... main() {... #ifdef YYDEBUG yydebug=1; #endif... } El cambio de *.lex no se muestra Tratamiento de errores Si yacc reduce el axioma, es decir agota la pila, yyparse() termina. Si yyparse() ha estado en estado de error, el resultado es diferente de 0 y si toda la entrada se ha procesado sin error, yyparse() termina con resultado 0. Si yyparse() encuentra símbolo que no puede interpretar, hace lo siguiente: 1. Llama al yyerror() y escribe el mensaje de error. 2. Entra en estado de tratamiento de errores. 3. Elimina la pila, hasta que se agota la misma o se encuentre en un estado antes del símbolo especial error. Si se agota la pila yyparse() devuelve Si se encuentra un estado con el símbolo especial error, yyparse pide la entrada de yylex() hasta que se encuentra un símbolo que puede seguir error en la sentencia que se reduce. 5. Al reducir la sentencia, el usuario es responsable de eliminar el estado de error con el macro yyerrok y limpiar el símbolo look-ahead del autómata SLR con el macro yyclearin si es necesario. Si no existe ningún símbolo error en la gramática el comportamiento es muy duro yyparse sale con error. Como consecuencia practica, al añadir las sentencias que manejan el error, hay que convertir el lenguaje en algo que acepta todas las cadenas de terminales posibles. Problema: Añadir en el interprete de la calculadora tratamiento de errores, que tratan los errores en una expresión. Probar con las entradas : 13

14 output 5+6; output ++6; output 3+4; output ++6; output ++6; 5+6; 2+1; output 3+4; Eliminar yyerrok y probar. Eliminar yyclearin y probar. *******************************... OUTSTM : output exp ; { printf("%d\n",$2); } : { yydebug=1-yydebug;} output error ; { yyerrok; yyclearin; }... - Problema: Añadir sentencias que capturan el error 2+1;. Añadir sentencia que captura la falta de ;. En general los símbolos error tienen que estar antes de los delimitadores del lenguaje. Sustituyen el elemento donde se espera el error (en el caso de la calculadora el exp). También tienen que estar cerca del axioma para capturar todos los errores, lejos del axioma para acotar el impacto del error lo máximo posible. Está claro que se busca un compromiso en este punto. Los símbolos de tratamiento de errores no tienen que alterar el lenguaje sin errores y no tienen que cambiar el lenguaje con una entrada sin errores y si es posible, no tienen que introducir conflictos Formato de mensajes de errores Un compilador es un programa de línea de comando y comunica con su entorno (editor de texto, depurador etc), utilizando el fichero de salida y stderr. Si el formato de error es el siguiente: <nombre fichero>:<linea del error> [:<columna>]:< texto del error>, la mayoría de los entornos trabajan automáticamente con el texto, por ejemplo posicionando el cursos sobre el error. Ejemplo: Mensaje de error generado por gcc. 14

15 petdot.c:12: parse error before "b". Problema: Hacer la calculadora con este formato de error y fichero de entrada como argumento de la linea de comando. Probar ejecutándolo bajo un entorno de programación. 2.3 Solución de conflictos: Los conflictos se producen si el lenguaje no es del tipo LALR. Existen dos tipos de conflictos posibles en los parser LALR: shift/reduce y reduce/reduce. Los conflictos se resuelven analizando el fichero de salida y.output generado por yacc -v..., que es un fichero de texto con la definición del autómata. Entender porque ocurre el conflicto en la mayoría de los casos es suficiente para su arreglo Reduce/reduce: Significa que en un estado hay dos reglas candidatas a reducir. Por defecto yacc reduce la primera producción declarada. Los conflictos reduce/reduce normalmente son indicios por errores graves en el lenguaje. El lenguaje debería corregirse eliminando el conflicto. Para ver el conflicto con más detalle, normalmente necesarios para resolverlo, es preciso producir la salida fácilmente legible por el programador yacc -v Shift/reduce: Los conflictos shift/reduce se producen, cuando el parser puede reducir a un símbolo no terminal y en el mismo símbolo de entrada puede seguir leyendo y acumulando la entrada. La acción de yacc por defecto es shift. El ejemplo clásico es: stm -> if (expr) stm1 ; else stm2; if (expr) stm1 ; Al encontrar ; después de stm1, podemos seguir leyendo o podemos reducir la ultima regla. Normalmente los conflictos shift/reduce son reales, por ejemplo el conflicto de arriba significa simplemente que no hay semántica clara en ifs enlazados. Se pueden resolver cambiando el lenguaje o si la respuesta por defecto de yacc es correcta utilizando está respuesta. Es normal que se arreglen moviendo el símbolo que produce el error más lejos posible del axioma. Problema: El lenguaje es: 15

16 %token in var out num %left - %left * prog: ins ; outs ; ; ins: in var in var ; ins outs: out exp out exp ; outs ; exp: num var exp - exp exp * exp ; yyerror(a) { fprintf(stderr,a); } main() { yyparse(); } El lenguaje tiene un conflicto shift/reduce, porque al encontrar ; en ins no se puede decir qué tiene que hacer el analizador. Hay que mover el símbolo ; hacia abajo (borrándolo de arriba). Cambiar el lenguaje en manera adecuada. ***************************************... prog: ins outs ; ins : in var ; in var ; ins... Problema: Cambiar el lenguaje de manera que elimina el conflicto al EOF. 2.5 Elección de tipo de valor semántico El valor semántico casi siempre es una estructura. Contiene todo que se utiliza para generar la acción adecuada. También contiene todo que hay 16

17 que propagar hacia el padre, porque con análisis abajo-arriba el hijo no puede saber cual es el padre en el momento de su reducción. Problema en casa: El árbol sintáctico es el máximo que puede devolver un analizador sintáctico. Añadir las acciones semánticas apropiadas en la calculadora para que se genera un árbol sintáctico. Utilizar que no hay más que 3 hijos en cada producción. Ejercicio: Analizar la analogía de los requisitos de la práctica y la máquina que genera cuádruplas. Para el enunciado de la Práctica 3: (1) Definir en que reducción hay que imprimir la salida (en el padre o en el hijo). (2) Definir que hay que propagar hacia el padre. (3) Definir que hay que utilizar en la propia producción. (4) Definir YYSTYPE. (5) Intentar de escribir toda la acción, necesaria para cumplir los requisitos de salida, en una sola funcion con número variable de argumentos. 3 Resumen: Construcción de un analizador sintáctico Pasos: 1. Entender la definición del lenguaje. Definir las lexemas. 2. Escribir el lenguaje en forma aceptable para yacc (todos los símbolos identificadores validos de C o caracteres simples entre comillas simples). Normalmente esta tarea es editar la definición. 3. Sacar todos los símbolos terminales ejecutando yacc -d y utilizando la salida de errores definir los tokens y generar el fichero.h. 4. A partir del header, generado por yacc -d..., escribir el analizador léxico, no olvidando los símbolos de sólo un carácter. 5. Resolver los conflictos en el lenguaje: precedencia y asociación. correspondencia exacta a la definición original. trasformación a un lenguaje SLR. si no se puede utilizar el orden correcto de las sentencias en yacc. 6. Probar el parser. 7. Escribir acciones que sirven para comprobar el analizador. 8. Definir el tipo semántico adecuado para el problema. 9. Comprobar el analizador estadísticamente. Ejercicio: Siguiendo estos pasos escribir la Práctica 3. 4 Información adicional: Linux: info bison. POSIX, IBM Redbooks WWW. 17

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

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

Construcción de una calculadora con Flex y Bison. Construcción de una calculadora con Flex y Bison. Índice (I)

Construcción de una calculadora con Flex y Bison. Construcción de una calculadora con Flex y Bison. Índice (I) Construcción de una calculadora con Flex y Bison Índice (I) Marina de la Cruz Alfonso Ortega Descripción de la calculadora Reglas de la gramática Los tokens y sus expresiones regulares para Flex Cómo trabajan

Más detalles

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

Compiladores: Parsing ascendente

Compiladores: Parsing ascendente Compiladores: Parsing ascendente Francisco J Ballesteros LSUB, URJC Page 1 of 64 Parsing ascendente Normalmente utilizaremos parsers descendentes para problemas pequeños cuando podemos escribir uno predictivo

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

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

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

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

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

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

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

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

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

Hoja técnica sobre yacc 1 y lex 2. Introducción. lex PL, 2014/2015 1

Hoja técnica sobre yacc 1 y lex 2. Introducción. lex PL, 2014/2015 1 PL, 2014/2015 1 Introducción Hoja técnica sobre yacc 1 y lex 2 Los programas yacc y lex son herramientas de gran utilidad para un diseñador de compiladores. Muchos compiladores se han construido utilizando

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

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

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

$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 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

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

EQUIVALENCIAS EN C DE CONSTRUCCIONES SECUENICIALES EN PSEUDOCÓDIGO

EQUIVALENCIAS EN C DE CONSTRUCCIONES SECUENICIALES EN PSEUDOCÓDIGO EQUIVALENCIAS EN C DE CONSTRUCCIONES SECUENICIALES EN PSEUDOCÓDIGO TIPOS DE DATOS BÁSICOS: Tipo Tipo Tamaño aproximado en bits Rango mínimo Carácter char 8 0 a 55 Entero int 16-3767 a 3767 Real float 3

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

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

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

Introducción a Flex y Bison

Introducción a Flex y Bison Prácticas de Lenguajes, Gramáticas y Autómatas, cuarto cuatrimestre (primavera) de Ingeniería en Informática http://webdiis.unizar.es/asignaturas/lga Profesor Responsable: Rubén Béjar Hernández Dpto. Informática

Más detalles

E Ú E +T T T Ú T * F F F Ú ( E ) NUM. Queremos calcular: Los pasos que seguiremos serán:

E Ú E +T T T Ú T * F F F Ú ( E ) NUM. Queremos calcular: Los pasos que seguiremos serán: Traductores, Compiladores e Intérpretes 1 Tema 4 Gramáticas Atribuidas. Además de comprobar que un programa cumple con las reglas de la gramática, hay que comprobar que lo que se quiere hacer tiene sentido.

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

Tema ADQUISICIÓN Y TRATAMIENTO DE DATOS. Departamento de Ciencias de la Computación e IA. Subprogramas en C

Tema ADQUISICIÓN Y TRATAMIENTO DE DATOS. Departamento de Ciencias de la Computación e IA. Subprogramas en C Tema ADQUISICIÓN Y TRATAMIENTO DE DATOS Departamento de Ciencias de la Computación e IA Subprogramas en C Objetivo Una vez que tengamos un programa que resuelva un problema concreto, ser capaces de usarlo

Más detalles

YACC: El Compilador-Compilador. 9.1 Introducción

YACC: El Compilador-Compilador. 9.1 Introducción YACC: El Compilador-Compilador 9.1 Introducción El input de un programa de ordenador tiene generalmente alguna estructura cada programa de ordenador que acepta input se puede pensar como definiendo un

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

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

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

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

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

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

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

LABORATORIO 3 ESTRUCTURAS REPETITIVAS WHILE / DO WHILE

LABORATORIO 3 ESTRUCTURAS REPETITIVAS WHILE / DO WHILE LABORATORIO 3 ESTRUCTURAS REPETITIVAS WHILE / DO WHILE 1 OBJETIVOS Al finalizar esta actividad, serás capaz de: Entender el funcionamiento de las estructuras iterativas en general; la(s) condición(es)

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

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

Caracteres y Cadenas Conversión de Datos Funciones y procedimientos Archivos cabecera. Fundamentos de programación

Caracteres y Cadenas Conversión de Datos Funciones y procedimientos Archivos cabecera. Fundamentos de programación 1 Caracteres y Cadenas Conversión de Datos Funciones y procedimientos Archivos cabecera Fundamentos de programación Agenda Caracteres y Cadenas Conversión de Datos Introducción a las funciones y procedimientos

Más detalles

GUÍA BÁSICA DE FLEX Y BISON

GUÍA BÁSICA DE FLEX Y BISON GUÍA BÁSICA DE FLEX Y BISON PRÁCTICAS COMPILADORES 4º INGENIERÍA INFORMÁTICA / 1º MÁSTER EN INFORMÁTICA Curso 2011/2012 LEX/FLEX: GENERADOR DE ANALIZADORES LÉXICOS 1. Introducción Lex es una de las herramientas

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

Procesos e Hilos en C

Procesos e Hilos en C Procesos e Hilos en C 6 de febrero de 2012 En esta sesión vamos a escribir programas en lenguaje C que utilicen hilos y procesos para comparar el rendimiento del sistema ante la gestión de unos y otros.

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

2. Se puede aplicar a la representación intermedia un optimizador de código independiente de la máquina.

2. Se puede aplicar a la representación intermedia un optimizador de código independiente de la máquina. Traductores, Compiladores e Intérpretes 1 Tema 7 Generación de Código En el modelo de análisis y síntesis de un compilador, la etapa inicial traduce un programa fuente a una representación intermedia a

Más detalles

INTRODUCCIÓN AL LENGUAJE C

INTRODUCCIÓN AL LENGUAJE C INTRODUCCIÓN AL LENGUAJE C Fundamentos de Informática EUP ULPGC Jose Torres 1 de 36 Historia de C Precursores: muchas ideas provienen de BCPL (Martin Richards, 1967) y de B (Ken Thompson, 1970) C fue diseñado

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

USO DE SUBRUTINAS, TRANSMISIÓN DE PARÁMETROS Y COMPILACIÓN CONDICIONAL EN C++

USO DE SUBRUTINAS, TRANSMISIÓN DE PARÁMETROS Y COMPILACIÓN CONDICIONAL EN C++ USO DE SUBRUTINAS, TRANSMISIÓN DE PARÁMETROS Y COMPILACIÓN CONDICIONAL EN C++ Bruno López Takeyas Instituto Tecnológico de Nuevo Laredo Reforma Sur 2007, C.P. 88250, Nuevo Laredo, Tamps. México http://www.itnuevolaredo.edu.mx/takeyas

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

Funciones básicas del depurador

Funciones básicas del depurador Funciones básicas del depurador Con frecuencia, los alumnos piensan que cuando su programa no tiene errores de compilación (está correctamente escrito) entonces ya es correcto. Muchas veces esto no es

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

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

Programación En Lenguaje C

Programación En Lenguaje C Programación En Lenguaje C Introducción Básica para Primero de Bachillerato TECNOLOGÍA DE LA INFORMACIÓN IES PALAS ATENEA Lenguaje C Estructurado Secuencial De alto Nivel Altamente portable Necesita un

Más detalles

INDICE Parte 1. Visual Basic Capitulo 1. Qué es Visual Basic? Capitulo 22. Mi Primera Aplicación Capitulo 3. Elementos del lenguaje

INDICE Parte 1. Visual Basic Capitulo 1. Qué es Visual Basic? Capitulo 22. Mi Primera Aplicación Capitulo 3. Elementos del lenguaje INDICE Prólogo XV Parte 1. Visual Basic 1 Capitulo 1. Qué es Visual Basic? 3 Introducción 3 Como crear una aplicación 5 Otras facilidades de Visual Basic 6 Un lenguaje de alto nivel 9 Menús 10 Colores

Más detalles

UNIVERSIDAD NACIONAL DE JUJUY FACULTAD DE INGENIERÍA APUNTES DE CÁTEDRA EL METACOMPILADOR FLEX

UNIVERSIDAD NACIONAL DE JUJUY FACULTAD DE INGENIERÍA APUNTES DE CÁTEDRA EL METACOMPILADOR FLEX UNIVERSIDAD NACIONAL DE JUJUY FACULTAD DE INGENIERÍA Compiladores APUNTES DE CÁTEDRA EL METACOMPILADOR FLEX 1. Qué es y qué hace FLEX? La característica más destacable de las herramientas que vamos a utilizar

Más detalles

Programación de Computadores 4 Iteraciones y Decisiones. Prof. Javier Cañas. Universidad Técnica Federico Santa María Departamento de Informática

Programación de Computadores 4 Iteraciones y Decisiones. Prof. Javier Cañas. Universidad Técnica Federico Santa María Departamento de Informática Programación de Computadores 4 Iteraciones y Decisiones Prof. Javier Cañas Universidad Técnica Federico Santa María Departamento de Informática Contenido 1 Introducción 2 Operadores Relacionales y Lógicos

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

Procesadores de Lenguaje

Procesadores de Lenguaje Procesadores de Lenguaje Analizadores LALR Cris%na Tirnauca Domingo Gómez Pérez DPTO. DE MATEMÁTICAS, ESTADÍSTICA Y COMPUTACIÓN Este tema se publica bajo Licencia: CreaIve Commons BY NC SA 3.0 El Analizador

Más detalles

Diseño de Compiladores I YACC: Yet Another Compiler-Compiler

Diseño de Compiladores I YACC: Yet Another Compiler-Compiler Diseño de Compiladores I YACC: Yet Another Compiler-Compiler Introducción: Yacc provee una herramienta general para analizar estructuralmente una entrada. El usuario de Yacc prepara una especificación

Más detalles

Fundamentos de programación

Fundamentos de programación Fundamentos de programación Estructuras de Control Estructuras de control Estructuras de control Estructura secuencial Estructura alternativa Sentencias if, if else Sentencias if else anidadas El operador

Más detalles

Expresiones Aritméticas. Programación digital I Escuela de Sistemas Facultad de Ingeniería Gilberto Diaz

Expresiones Aritméticas. Programación digital I Escuela de Sistemas Facultad de Ingeniería Gilberto Diaz Expresiones Aritméticas Programación digital I Escuela de Sistemas Facultad de Ingeniería Gilberto Diaz Expresiones Aritméticas El computador puede realizar cálculos además de mostrar datos por pantalla.

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

Procesadores de Lenguaje

Procesadores de Lenguaje Procesadores de Lenguaje Analizadores sintácticos descendentes: LL(1) Cristina Tîrnăucă Dept. Matesco, Universidad de Cantabria Fac. Ciencias Ing. Informática Primavera de 2013 Analizadores sintácticos

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

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

OPERADORES Y EXPRESIONES

OPERADORES Y EXPRESIONES OPERADORES Y EXPRESIONES Una expresión es una combinación de variables, literales y operadores, que representan un valor Operadores aritméticos Operador Función + suma - resta * producto / división % operador

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

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

Capítulo 6 Tabla de símbolos

Capítulo 6 Tabla de símbolos Java a tope: Traductores y compiladores con Lex/Yacc, JFlex/Cup y JavaCC Capítulo 6 Tabla de símbolos 6.1 Visión general También llamada «tabla de nombres» o «tabla de identificadores», se trata sencillamente

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

MIA RICARDO GONZALEZ LOZANO APLICACIONES EN LENGUAJE C

MIA RICARDO GONZALEZ LOZANO APLICACIONES EN LENGUAJE C MIA RICARDO GONZALEZ LOZANO APLICACIONES EN LENGUAJE C Antes de comenzar a desarrollar aplicaciones podemos crear el programa en cualquier editor de textos, solo hay que guardarlo con la extensión X.c

Más detalles

TEMA 3: EL LENGUAJE C: PRESENTACIÓN

TEMA 3: EL LENGUAJE C: PRESENTACIÓN TEMA 3: EL LENGUAJE C: PRESENTACIÓN Historia del lenguaje C Características del lenguaje C Estructura de un programa en C El editor de textos: elementos Funciones: de usuario y de librería Librerías de

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

TEMA 7: Ficheros. TEMA 7: Ficheros. 7.1.-Concepto de fichero

TEMA 7: Ficheros. TEMA 7: Ficheros. 7.1.-Concepto de fichero TEMA 7: Ficheros 7.1.-Concepto de fichero Todas las estructuras de datos que hemos visto hasta ahora utilizan memoria principal. Esto tiene dos limitaciones importantes: 1. Los datos desaparecen cuando

Más detalles

Tema 5: La pila, las macros y los procedimientos

Tema 5: La pila, las macros y los procedimientos Tema 5: La pila, las macros y los procedimientos S La pila S Las macros S Definición de procedimientos S Tipos de procedimientos: NEAR y FAR S Paso de parámetros a un procedimiento S Mediante registros

Más detalles

UNIVERSIDAD AUTÓNOMA DE BAJA CALIFORNIA FACULTAD DE CIENCIAS PRACTICA DE PROCESOS HERRAMIENTAS

UNIVERSIDAD AUTÓNOMA DE BAJA CALIFORNIA FACULTAD DE CIENCIAS PRACTICA DE PROCESOS HERRAMIENTAS UNIVERSIDAD AUTÓNOMA DE BAJA CALIFORNIA FACULTAD DE CIENCIAS PRACTICA DE PROCESOS HERRAMIENTAS Caso 1: 1.- Necesitamos un cd o Dvd para grabar alguna de las versiones de livecd de Linux. 2.- Liga de una

Más detalles

INTRODUCCIÓN DE DATOS EN LA HOJA DE CÁLCULO

INTRODUCCIÓN DE DATOS EN LA HOJA DE CÁLCULO UNIDAD DIDÁCTICA INTRODUCCIÓN DE DATOS EN LA HOJA DE CÁLCULO Los objetivos de este tema son: 1. Aprender a introducir datos en la hoja de cálculo. 2. Diferenciar los tipos de datos con los que se puede

Más detalles

Exterior del algoritmo. Entorno. Usuario. Procesador. Escribir. v1 v2 v3. Leer. <acción> {; <acción>}

Exterior del algoritmo. Entorno. Usuario. Procesador. Escribir. v1 v2 v3. Leer. <acción> {; <acción>} Bloque II. 2. Objetos y acciones elementales Bloque II. 2. Objetos y acciones elementales Objetivos: Familiarizarse con conceptos de entorno, objeto y tipo Entender qué significa que un objeto sea de un

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

Las plantillas permiten definir funciones genéricas.

Las plantillas permiten definir funciones genéricas. Introducción (Genericidad). Plantillas de funciones o funciones genéricas. Sintaxis de plantillas. Ejemplos de declaraciones. A tener en cuenta Un ejemplo de plantilla de funciones: Máximo de un vector.

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

TIPOS DE DATOS EN ABAP

TIPOS DE DATOS EN ABAP TIPOS DE DATOS EN ABAP En ABAP existen los diferentes tipos de datos: Declaración de Campos Para declarar variables en un programa ABAP, debemos utilizar la sentencia DATA. Ejemplo: DATA var. Esta sentencia,

Más detalles

4. Operadores Operador asignación

4. Operadores Operador asignación Programación orientada a objetos con Java 43 4. Operadores Objetivos: a) Describir los operadores (aritméticos, incrementales, de relación, lógicos y de asignación) y los tipos de dato primitivos sobre

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

7.4. UTILIDADES DE LAS PILAS

7.4. UTILIDADES DE LAS PILAS 7.4. UTILIDADES DE LAS PILAS o Llamadas a subprogramas o Paso de programas recursivos a iterativos o Un caso especial, quick_sort iterativo. o Equilibrado de símbolos o Tratamiento de expresiones aritméticas

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

Taller de Informática I Dpto. Computación F.C.E. y N. - UBA 2010

Taller de Informática I Dpto. Computación F.C.E. y N. - UBA 2010 FUNCIONES Definición: Una función es un subprograma que recibe cero o más valores de entrada y retorna un único objeto de salida. Es una tarea independiente que puede o no depender de variables externas.

Más detalles

TEMA 3: El proceso de compilación, del código fuente al código máquina

TEMA 3: El proceso de compilación, del código fuente al código máquina TEMA 3: El proceso de compilación, del código fuente al código máquina 3.1 Fase de compilación y linkado (link, montado o enlace) Un programa escrito en un lenguaje de alto nivel, no puede ser ejecutado

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

Cadena de caracteres. 1. Fundamentos de cadenas y caracteres

Cadena de caracteres. 1. Fundamentos de cadenas y caracteres 1. Fundamentos de cadenas y caracteres Cadena de caracteres Los caracteres son bloques de construcción fundamentales para los programas fuente. Un programa puede contener constantes de carácter. Una constante

Más detalles

Funciones como Subprogramas en C++

Funciones como Subprogramas en C++ FUNCIONES Cuando es necesario escribir programas complicados para resolver problemas complejos, una práctica común entre los programadores es descomponer el algoritmo (el diagrama de flujo) en varias partes.

Más detalles

TIPOS DE DATOS BASICOS EN LENGUAJE C

TIPOS DE DATOS BASICOS EN LENGUAJE C TIPOS DE DATOS BASICOS EN LENGUAJE C TIPO char int float double void ANCHO EN BIT 64 0 TIPOS DE DATOS RANGO EN PC -12 a 127 3.4E-3 a 3.4E+3 1.7E-30 a 1.7E+30 sin valores TIPO ANCHO EN BIT RANGO EN PC char

Más detalles

Apuntadores en C y C++

Apuntadores en C y C++ Apuntadores en C y C++ Universidad de Carabobo Facultad Experimental de Ciencias y Tecnología Prof. Marcos A. Gil T. 8 de diciembre de 2004 1. Introducción Los apuntadores en C y C++ son una herramienta

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

Anexo. Control de errores

Anexo. Control de errores Anexo. Control de errores Tipos de errores Los errores en un programa o algoritmo se pueden clasificar de la siguiente manera Errores de compilación Los errores de compilación no permiten la ejecución

Más detalles

FLEX: Un generador de analizadores léxicos. AT&T Lex (más común en UNIX) MKS Lex (MS-Dos) Flex Abraxas Lex Posix Lex ScanGen JLex...

FLEX: Un generador de analizadores léxicos. AT&T Lex (más común en UNIX) MKS Lex (MS-Dos) Flex Abraxas Lex Posix Lex ScanGen JLex... Como hemos visto, el paso de una expresión regular a un AF se puede hacer de manera automatizada Existen varias herramientas que relizan dicho trabajo Generadores de analizadores léxicos AT&T Lex (más

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

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

Tema: Introducción al IDE de Microsoft Visual C#.

Tema: Introducción al IDE de Microsoft Visual C#. Tema: Introducción al IDE de Microsoft Visual C#. Objetivos: El propósito de este tema es que el alumno se familiarice con el entorno de desarrollo de Visual C# Express mientras crea el formulario más

Más detalles