Compiladores: Análisis léxico

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

Download "Compiladores: Análisis léxico"

Transcripción

1 Compiladores: Análisis léxico Francisco J Ballesteros LSUB, URJC Page 1 of 90

2 Analizador léxico Identificar tokens en la cadena de entrada procesar los ficheros de entrada generar la entrada para el parser Ignorar comentarios Mantener la idea de fichero-número de línea para mensajes de error Page 2 of 90

3 Analizador léxico Al definir el lenguaje tendremos que definir una gramática para el mismo Los elementos básicos de la gramática son los tokens Page 3 of 90

4 Analizador léxico Token palabras reservadas identificadores números signos de puntuación El conjunto de tokens depende del lenguaje en cuestión Usaremos palabras reservadas en el análisis sintáctico Normalmente ignoramos el espacio en blanco El valor de un token o lexema es el string para el mismo Page 4 of 90

5 Tokens Para C, por ejemplo LPAREN ( RPAREN ) IF if IDENT main SCOL ; PLUS + PLUSEQ +=... Page 5 of 90

6 Tokens Para printf FMT % DECARG d STRARG s PCENT %% CHARS... Por ejemplo %d, %%d Nos da FMT DECARG CHARS(", ") PCENT CHARS("d") Entre paréntesis van los lexemas Page 6 of 90

7 Tokens Otro ejemplo x*2+3 Nos podría dar VAR("x") MULT NUM(2) ADD NUM(3) Page 7 of 90

8 Tokens Otro ejemplo pi*2+3 Nos podría dar PI MULT NUM(2) ADD NUM(3) Esta vez pi no es una variable, está reservado. Page 8 of 90

9 Tokens Otro ejemplo, expresiones regulares: [ab]+.*\.c$ Podríamos tener los tokens LBRA CHR('a') CHR('b') RBRA PLUS DOT STAR CHR('.') CHR('c') ETEXT O tal vez LBRA STR("ab") RBRA PLUS DOT STAR STR(".c") ETEXT O tal vez SET("ab") PLUS DOT STAR CHR('.') CHR('c') ETEXT Todo depende de cómo hagamos el lenguaje Page 9 of 90

10 Tokens Un token tiene identificador único (ID, LBRA, RBRA,...) lexema o valor (3.5, main,...) Muchas veces fichero y número de línea (para errores) Page 10 of 90

11 Tokens Podemos meter la pata al definirlos Por ej, en C++ Vector<Number> cin >> x Vector<Vector<Number>> Es el último? >> o? > > C++ no lo sabe y por eso no compila Page 11 of 90

12 Una calculadora Expresiones sencillas y no ambiguas tales como... # esto es un comentario ( 5 * 3 ) / 5 / 7 2 * pi abs ( 2 * pi ) Por ahora sólo pi y abs como predefinidos. Page 12 of 90

13 Una calculadora Ya hay dudas: -3 2 * No hay cambio de signo. - 2*1 // no válido. Page 13 of 90

14 Una calculadora: Tokens NUM LPAREN RPAREN ADD SUB MUL DIV PI ABS Page 14 of 90

15 Una calculadora: Tokens Valor de los tokens: NUM -> valor como float con signo Y el resto nada LPAREN RPAREN ADD SUB MUL DIV PI ABS El comentario lo eliminamos y no es un token Page 15 of 90

16 Ejemplo: # esto es un comentario ( 5 * 3 ) / 5 / 7 2 * pi abs ( 2 * pi ) nos da NUM(3) ADD NUM(4) LPAREN NUM(5) MUL NUM(3) RPAREN ADD NUM(43) NUM(4) DIV NUM(5) DIV NUM(7) NUM(2) MUL PI ABS LPAREN NUM(2) MUL PI RPAREN Page 16 of 90

17 Un trozo de un lenguaje Sentencias sencillas { print x; print y; print z; x = "texto"; if x == "texto" {... for x in "a" "b" "c" { print x; Page 17 of 90

18 Un trozo de un lenguaje { print x; print y; print z; x = "texto"; if x == "texto" {... for x in "a" "b" "c" { print x; Tokens: LBRA RBRA SCOL EQ EQEQ PRINT FOR IF NAME STR Page 18 of 90

19 Un trozo de un lenguaje Valores de los tokens: NAME -> x STR -> "texto" El resto ninguno Page 19 of 90

20 Expresiones regulares Sólo expresiones sencillas abc a b c. [0-9] ([0-9] [a-z])* Page 20 of 90

21 Expresiones regulares abc a b c. [0-9] ([0-9] [a-z])* Tokens CHR OR ANY RANGE LPAREN RPAREN STAR Page 21 of 90

22 Expresiones regulares Valor de los tokens CHR -> a RANGE -> 0-9 Y el resto ninguno Page 22 of 90

23 Construcción de un scanner Tenemos que pasar de texto a tokens leyendo de izquierda a derecha normalmente se permite mirar un char adelante cada token corresponde a un string hay que ver hasta dónde llega cada uno Page 23 of 90

24 Construcción de un scanner Podríamos describir cada token con una expresión regular teniendo cuidado de evitar ambigüedad probar en cada punto de la entrada cada expresión devolver el token que encaja con la expresión En esto se basa lex(1), pero es más fácil. Page 24 of 90

25 Lenguajes y alfabetos Un lenguaje es un conjunto de strings (los válidos en el lenguaje) Los strings son secuencias de símbolos de un alfabeto No todos los strings pertenecen al lenguaje A = {símbolos válidos en el lenguaje L(A) = {strings de A válidos Page 25 of 90

26 Tokens, lenguajes y alfabetos Para tener un scanner podemos definir un lenguaje para los lexemas lexema: "valor" de los tokens Por ejemplo NUM -?[0-9]+(\.[0-9]+) // LPAREN \( // ( RPAREN \) // ) ADD \+ // + SUB - // - MUL \* // * DIV / // / PI pi // pi ABS abs // abs Nos da (-?[0-9]+(\.[0-9]+)) \( \) \+ - \* / pi abs Page 26 of 90

27 Tokens, lenguajes y alfabetos En este lenguaje podemos reconocer las cadenas sin depender del contexto en que están empleando expresiones regulares Es un lenguaje regular Page 27 of 90

28 Lenguajes y autómatas Un atómata finito es una máquina que acepta cadenas Un lenguaje regular es reconocible por un atómata finito Un lenguaje regular es describible con una expresión regular Una expresión regular es implementable con un autómata finito Page 28 of 90

29 Expresión regular Definida recursivamente Siendo x un char y a y b expresiones regulares: L(x) = { x, siendo x cualquier char salvo \, (, ),.,, *,? L(\x) = { x L((a)) = L(a) L(.) = { cualquier char L(ab) = { la de L(a) concatenado con lb de L(b) L(a b) = L(a) U L(b) L(a*) = { "" U L(a) U L(aa) U L(aaa) U... Page 29 of 90

30 Autómata finito En este lenguaje podemos reconocer las cadenas utilizando un autómata finito Para reconocerlo: partimos de un estado inicial en cada carácter de la entrada transitamos a otro estado algunos de los estados son finales si terminamos y no hay estado final, tenemos un error Un error es una cadena no reconocida Page 30 of 90

31 Lenguaje para tokens de calculadora Ejemplo, el lenguaje que describe los tokens de # esto es un comentario ( 5 * 3 ) / 5 / 7 2 * pi abs ( 2 * pi ) que son NUM LPAREN RPAREN ADD SUB MUL DIV PI ABS puesto que ignoramos comentarios y espacio y en blanco! Page 31 of 90

32 Lenguaje para tokens de calculadora Podríamos describirlo como la expresión regular LTC = (-?[0-9]+(\.[0-9]+)) \( \) \+ - \* / pi abs que reconoce entre otros ( 5 * 3 ) abs pi Page 32 of 90

33 Autómata para LTC Para definir un atómata finito partimos de un estado inicial para cada estado y símbolo en la entrada transitamos a otro estado indicamos qué estados son finales Si no está definida una transición, no reconocemos ese caso. El automáta es: alfabeto de entrada conjunto de estados (con inicial y finales) conjunto de transiciones Page 33 of 90

34 Autómata para LTC Por ejemplo, para abs Podríamos definir Page 34 of 90

35 Autómata para LTC O lo que es lo mismo Page 35 of 90

36 Autómata para LTC Y para pi abs Page 36 of 90

37 Autómata para LTC Por ejemplo, para nuestros números 4 54 Podríamos definir Page 37 of 90

38 Autómata para LTC Y con decimales Podríamos definir Page 38 of 90

39 Autómata para LTC Y con decimales y signo opcional Podríamos definir Page 39 of 90

40 Autómata para LTC Todo junto Page 40 of 90

41 Autómata para LTC Está todo? No Nos falta (, ), +, -, * y / Y tenemos problemas -3-3 Hay algo de ambigüedad. Page 41 of 90

42 Ambigüedad -3-3 Podemos decidir entre signo y resta mirando si sigue un dígito o no. Page 42 of 90

43 Ambigüedad En general podemos Utilizar la cadena más larga que encaja Utilizar la primera de las subexpresiones si hay varias En nuestro ejemplo en realidad no hay ambigüedad: hay no determinismo Page 43 of 90

44 No determinismo Necitamos un atómata finito no determinista Hay dos transiciones válidas para - Page 44 of 90

45 Atómata finito no determinista Podemos tener transiciones en la cadena vacía para el signo Page 45 of 90

46 Autómata para LTC Page 46 of 90

47 Scan de nombres En lugar de utilizar estados para reconocer todos los nombres Podemos reconocer un nombre en general Y buscar el nombre en una tabla para ver si está reservado Esto se hace si hay muchas palabras reservadas (keywords) O si son varias pero son largas Page 47 of 90

48 Autómatas Finitos Deterministas (AFD, o DFA) una única transición por estado y entrada Finitos no deterministas (AFND, o NFA) varias transiciones posibles transiciones con la cadena vacía (se puede transitar o no) Page 48 of 90

49 Autómatas para expresiones regulares NFA para x Page 49 of 90

50 Autómatas para expresiones regulares NFA para re1 re2 Page 50 of 90

51 Autómatas para expresiones regulares NFA para re1 re2 Page 51 of 90

52 Autómatas para expresiones regulares NFA para re1? Page 52 of 90

53 Autómatas para expresiones regulares NFA para re1 * Page 53 of 90

54 Autómatas para expresiones regulares NFA para c(a b)* Page 54 of 90

55 Autómatas para expresiones regulares NFA para c(a b)* Y podemos simplificarlo Page 55 of 90

56 Construir un DFA desde un NFA Es fácil pero tedioso: los estados del DFA son los conjuntos de estados alcanzados en el NFA empezar en el estado inicial del NFA para cada posible transición NFA: transitar al estado del DFA para el cjto de estados NFA alcanzado si tenemos un estado final del NFA, el estado es final. Page 56 of 90

57 Implementar un DFA Podemos utilizar una tabla Columnas para los estados Filas para la entradas Nuevos estados como valores La función de estado toma una entrada y devuelve el nuevo estado Hasta que la entrada se acepta Page 57 of 90

58 Dónde estábamos? Queríamos un scanner para la calculadora Y para eso hicimos un NFA para el lenguaje de sus tokens (que a su vez son tokens de otro lenguaje!) Page 58 of 90

59 Scanner para la calculadora Page 59 of 90

60 Scanner para la calculadora Podemos implementar directamente el autómata Usando lex(1) y dándole las expresiones regulares o mejor escribiendo en Go el código para el autómata si hay muchos nombres usaríamos una tabla. va a quedar pequeño y rápido Page 60 of 90

61 Scanner para la calculadora Primero la entrada... var text = `3 + (4.3 * abs(-1 * pi))` func main() { fmt.printf("scanning %s\n", text) txt := NewStrText(text) for { r, err := txt.get() if err!= nil { fmt.printf("got err %s\n", err) break fmt.printf("got %c\n", r) Run Page 61 of 90

62 Scanner para la calculadora Qué es la entrada para nosotros? type Text interface { Get() (rune, error) Unget() error Utilizaremos Unget para look-ahead De hecho, go tiene un interface (io.runescanner) definido para esto. Page 62 of 90

63 Scanner para la calculadora Tokens type TokId int type Tok struct { Id TokId Num float64 // token id values const ( None TokId = iota Num Lparen Rparen Add Sub Mul Div Pi Abs ) Page 63 of 90

64 Scanner para la calculadora Lexer type Lexer interface { // return next token Scan() (Tok, error) // Look ahead one token Peek() (Tok, error) Page 64 of 90

65 Scanner para la calculadora Lex type lex struct { in Text saved Tok func NewLex(t Text) Lexer { return &lex{in: t Page 65 of 90

66 Scanner para la calculadora Lex func (l *lex) Peek() (Tok, error) { tok, err := l.scan() l.saved = tok return tok, err func (l *lex) Scan() (Tok, error) { if l.saved.id!= None { x := l.saved l.saved = Tok{ return x, nil if err := l.skipblanks(); err!= nil { return Tok{, err return l.nexttok() Page 66 of 90

67 Scanner para la calculadora Lex func (l *lex) skipblanks() error { for { c, err := l.in.get() if err!= nil { return err if c!= ' ' && c!= '\t' && c!= '\n' { l.in.unget() return nil Page 67 of 90

68 Scanner para la calculadora Lex func (l *lex) nexttok() (Tok, error) { c, err := l.in.get() if err!= nil { return Tok{, err switch { case c == '+': return Tok{Id:Add, nil case c == '-': return Tok{Id:Sub, nil case c == '*': return Tok{Id:Mul, nil case c == '/': return Tok{Id:Div, nil case c >= '0' && c <= '9': l.in.unget() return l.scannum() case c == 'p': l.in.unget() return l.scanpi() case c == 'a': l.in.unget() return l.scanabs() return Tok{, fmt.errorf("wrong input at char %c", c) Page 68 of 90

69 Scanner para la calculadora Lex, números func (l *lex) scannum() (Tok, error) { n, err := l.scanint() if err!= nil { return Tok{, err c, err := l.in.get() if err!= nil { return Tok{Id: Num, Num: n, nil if c!= '.' { l.in.unget() return Tok{Id: Num, Num: n, nil dec, err := l.scandec() if err!= nil { return Tok{, err return Tok{Id: Num, Num: n+dec, nil Page 69 of 90

70 Scanner para la calculadora Lex, números func (l *lex) scanint() (float64, error) { r := 0.0 some := false for { c, err := l.in.get() if some && err == io.eof { return r, nil if err!= nil { return r, err if c <= '0' c >= '9' { l.in.unget() return r, nil r *= 10 r += float64(int(c) - int('0')) some = true Page 70 of 90

71 Scanner para la calculadora Lex, números func (l *lex) scandec() (float64, error) { r := 0.0 d := 1.0 some := false for { c, err := l.in.get() if some && err == io.eof { return r, nil if err!= nil { return r, err if c <= '0' c >= '9' { l.in.unget() return r, nil n := int(c) - int('0') r += float64(n) / d d *= 10.0 some = true Page 71 of 90

72 Scanner para la calculadora Listo func main() { text := `3 + (41.32 * abs(-1 * pi))` fmt.printf("scanning %s\n", text) txt := NewStrText(text) l := NewLex(txt) for { t, err := l.scan() if err!= nil { fmt.printf("got err %s\n", err) break fmt.printf("got tok %s\tnum %v\n", t.id, t.num) Run Ojo a bug en SUB! Page 72 of 90

73 Scanner para la calculadora: fixed func (l *lex) nexttok() (Tok, error) { c, err := l.in.get() if err!= nil { return Tok{, err switch { case c == '+': return Tok{Id:Add, nil case c == '-': n, _ := l.in.get() l.in.unget() if n >= '0' && n <= '9' { t, err := l.scannum() t.num *= -1 return t, err return Tok{Id:Sub, nil case c == '*': return Tok{Id:Mul, nil case c == '/': return Tok{Id:Div, nil case c == '(': return Tok{Id:Lparen, nil case c == ')': return Tok{Id:Rparen, nil case c >= '0' && c <= '9': l.in.unget() return l.scannum() case c == 'p': l.in.unget() Page 73 of 90

74 Scanner para la calculadora: fixed Y ahora func main() { text := `3 - (41.32 * abs(-1 * pi))` fmt.printf("scanning %s\n", text) txt := NewStrText(text) l := NewLex(txt) for { t, err := l.scan() if err!= nil { fmt.printf("got err %s\n", err) break fmt.printf("got tok %s\tnum %v\n", t.id, t.num) Run Page 74 of 90

75 Comentarios func (l *lex) skipblanks() error { for { c, err := l.in.get() if err!= nil { return err if c == '#' { for c!= '\n' { if c, err = l.in.get(); err!= nil { return err if c!= ' ' && c!= '\t' && c!= '\n' { l.in.unget() return nil Page 75 of 90

76 Comentarios func main() { text := ` # comentario 3 - (41.32 * abs(-1 * pi)) ` fmt.printf("scanning %s\n", text) txt := NewStrText(text) l := NewLex(txt) for { t, err := l.scan() if err!= nil { fmt.printf("got err %s\n", err) break fmt.printf("got tok %s\tnum %v\n", t.id, t.num) Run Page 76 of 90

77 Comentarios La parte delicada es reconocerlos sin que sea ambiguo si es otro token. a / b vs a // b Se hace que el autómata se coma todo desde el token de principio de comentario hasta el de fin de comentario Page 77 of 90

78 Scanner para sentencias sencillas # comentario { print x; print y; print z; x = "texto"; if x == "texto" {... for x in "a" "b" "c" { print x; Esta vez mantendremos nombre de fichero y número de línea Y guardaremos el lexema Page 78 of 90

79 Scanner para sentencias sencillas Tokens type TokId int type Tok struct { Id TokId Val string Ln int // token id values const ( None TokId = iota Str Lbra Rbra Eq Cmp Id Scol Print If For In ) Page 79 of 90

80 Scanner para sentencias sencillas Nuevo lex type lex struct { in Text saved Tok ln int val []rune func NewLex(t Text) Lexer { return &lex{in: t, ln: 1 Page 80 of 90

81 Scanner para sentencias sencillas SkipBlanks cuenta líneas ahora func (l *lex) skipblanks() error { for { c, err := l.in.get() if err!= nil { return err if c == '#' { for c!= '\n' { if c, err = l.in.get(); err!= nil { return err if c == '\n' { l.ln++ if c!= ' ' && c!= '\t' && c!= '\n' { l.in.unget() return nil if c == '\n' { l.ln++ Page 81 of 90

82 Scanner para sentencias sencillas Scan y peek como antes func (l *lex) Peek() (Tok, error) { tok, err := l.scan() l.saved = tok return tok, err func (l *lex) Scan() (Tok, error) { if l.saved.id!= None { x := l.saved l.saved = Tok{ return x, nil if err := l.skipblanks(); err!= nil { return Tok{, err return l.nexttok() Page 82 of 90

83 Scanner para sentencias sencillas NextTok es nuestro scanner utilizando got para acumular caracteres que nos gustan y tambien gottok para terminar con el token actual func (l *lex) got(r rune) { l.val = append(l.val, r) func (l *lex) gottok(id TokId) Tok { t := Tok{ Id: id, Val: string(l.val), Ln: l.ln, l.val = nil return t Page 83 of 90

84 Scanner para sentencias sencillas La parte fácil func (l *lex) nexttok() (Tok, error) { c, err := l.in.get() if err!= nil { return Tok{, err switch { case c == '{': l.got('{'); return l.gottok(lbra), nil case c == '': l.got(''); return l.gottok(rbra), nil case c == ';': l.got(';'); return l.gottok(scol), nil Page 84 of 90

85 Scanner para sentencias sencillas Los strings... func (l *lex) nexttok() (Tok, error) { c, err := l.in.get() if err!= nil { return Tok{, err switch { case c == '"': for { c, err := l.in.get() if err!= nil { return Tok{, err if c == '"' { return l.gottok(str), nil l.got(c) //str Page 85 of 90

86 Scanner para sentencias sencillas Asignación y comparación func (l *lex) nexttok() (Tok, error) { c, err := l.in.get() if err!= nil { return Tok{, err switch { case c == '=': l.got('=') n, _ := l.in.get() if n == '=' { l.got('=') return l.gottok(cmp), nil l.in.unget() return l.gottok(eq), nil Page 86 of 90

87 Scanner para sentencias sencillas Identificadores y keywords Vamos a usar una tabla de keywords var keywords = map[string]tokid { "print": Print, "if": If, "for": For, "in": In, Page 87 of 90

88 Scanner para sentencias sencillas Identificadores y keywords func (l *lex) nexttok() (Tok, error) { c, err := l.in.get() if err!= nil { return Tok{, err switch { case unicode.isletter(c): l.got(c) for { c, err := l.in.get() if err!= nil { return Tok{, err if!unicode.isletter(c) &&!unicode.isnumber(c) { l.in.unget() t := l.gottok(id) if id, ok := keywords[t.val]; ok { t.id = id return t, nil l.got(c) Page 88 of 90

89 Scanner para sentencias sencillas Y listo: var keywords = map[string]tokid { "print": Print, "if": If, "for": For, "in": In, var text = ` { print x; print y; print z; x = "texto"; if x == "texto" { print xxx; for x in "a" "b" "c" { print x; ` func main() { fmt.printf("scanning %s\n", text) txt := NewStrText(text) l := NewLex(txt) for { t, err := l.scan() if err!= nil { fmt.printf("got err %s\n", err) break fmt.printf("ln %d tok %s\t '%v'\n", t.ln, t.id, t.val) Run Page 89 of 90

90 Questions? Francisco J Ballesteros LSUB, URJC ( Page 90 of 90

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

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

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

Elementos léxicos del lenguaje de programación Java

Elementos léxicos del lenguaje de programación Java Elementos léxicos del lenguaje de programación Java Elementos léxicos del lenguaje de programación Java Palabras reservadas Identificadores Literales Operadores Delimitadores Comentarios Apéndices Operadores

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

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

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

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

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

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

Procesadores de lenguaje Tema 2 Análisis léxico

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

Más detalles

Introducción a Java LSUB. 30 de enero de 2013 GSYC

Introducción a Java LSUB. 30 de enero de 2013 GSYC Introducción a Java LSUB GSYC 30 de enero de 2013 (cc) 2013 Laboratorio de Sistemas, Algunos derechos reservados. Este trabajo se entrega bajo la licencia Creative Commons Reconocimiento - NoComercial

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

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

Se guardan en archivos con extencion c y los cabezales con extension h

Se guardan en archivos con extencion c y los cabezales con extension h Se guardan en archivos con extencion c y los cabezales con extension h Tipos de Variables: Tipo Tamaño(bytes) Limite inferior Limite superior char 1 -- -- unsigned char 1 0 255 short int 2-32768 +32767

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

Centro Asociado Palma de Mallorca. Antonio Rivero Cuesta

Centro Asociado Palma de Mallorca. Antonio Rivero Cuesta Centro Asociado Palma de Mallorca Antonio Rivero Cuesta La Sintaxis de Java I... 5 Tipos de datos... 6 Tipos de datos simples... 7 Operadores... 11 Operadores Aritméticos... 12 Operadores relacionales...

Más detalles

GUÍA BÁSICA DE SCHEME v.4

GUÍA BÁSICA DE SCHEME v.4 Esta guía básica pretende ser una introducción elemental al lenguaje de programación Scheme. Se presenta como una guía de comienzo rápido de tal forma que permita conocer de una forma muy esquemática los

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

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

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

Preliminares. Tipos de variables y Expresiones

Preliminares. Tipos de variables y Expresiones Preliminares. Tipos de variables y Expresiones Felipe Osorio Instituto de Estadística Pontificia Universidad Católica de Valparaíso Marzo 5, 2015 1 / 20 Preliminares Computadoras desarrollan tareas a un

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

Ficha de Aprendizaje N 13

Ficha de Aprendizaje N 13 Ficha de Aprendizaje N 13 Curso: Lógica y lenguaje de programación Tema: Fundamentos de programación Duración: 2 horas pedagógicas Logros de aprendizaje Identifica los diferentes tipos de operadores que

Más detalles

Programación: QBASIC

Programación: QBASIC 1. QBASIC Programación: QBASIC Guía del alumno Qbasic es una versión moderna del lenguaje BASIC. Se trata de un lenguaje de alto nivel. En un lenguaje de alto nivel las instrucciones tienen un formato

Más detalles

UNIVERSIDAD DE SEVILLA PRÁCTICAS DE LABORATORIO ANÁLISIS SINTÁCTICO (1) LENGUAJES FORMALES Y AUTÓMATAS CURSO 2006/2007

UNIVERSIDAD DE SEVILLA PRÁCTICAS DE LABORATORIO ANÁLISIS SINTÁCTICO (1) LENGUAJES FORMALES Y AUTÓMATAS CURSO 2006/2007 UNIVERSIDAD DE SEVILLA E. T. S. INGENIERÍA INFORMÁTICA LENGUAJES Y SISTEMAS INFORMÁTICOS PRÁCTICAS DE LABORATORIO ANÁLISIS SINTÁCTICO (1) LENGUAJES FORMALES Y AUTÓMATAS CURSO 2006/2007 Qué es el análisis

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

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

Identificadores, palabras reservadas, tipos de datos, operadores aritméticos y el sistema estándar de salida en Java

Identificadores, palabras reservadas, tipos de datos, operadores aritméticos y el sistema estándar de salida en Java Identificadores, palabras reservadas, tipos de datos, operadores aritméticos y el sistema estándar de salida en Java Identificadores Las variables se utilizan en programación para almacenar temporalmente

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

Lección 2 Introducción al lenguaje C

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

Más detalles

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

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

Uso avanzado de punteros

Uso avanzado de punteros Uso avanzado de punteros Mario Medina C. [email protected] Punteros Contienen direcciones de memoria Punteros a tipos de datos simples int, char, float, double Punteros a estructuras Punteros a vectores

Más detalles

Contenido. Capítulo 1. Introducción a lenguaje C 1

Contenido. Capítulo 1. Introducción a lenguaje C 1 Contenido Capítulo 1. Introducción a lenguaje C 1 Introducción... 2 Qué es un lenguaje de programación?... 2 Tipos de lenguajes de programación... 2 Introducción a lenguaje C... 2 Historia de lenguaje

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

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

LENGUAJE. Tema 1 - Introducción

LENGUAJE. Tema 1 - Introducción LENGUAJE Tema 1 - Introducción HISTORIA DEL LENGUAJE C El lenguaje de programación C fue creado por Dennis Ritchie cuando trabajaba en Bell Laboratories de AT&T junto con Ken Thompson en el diseño del

Más detalles

Programación en Pascal

Programación en Pascal Programación en Pascal Segunda parte de la asignatura. El profesor: Nombre:. Despacho: Edificio de la ETSII 2ª Planta. Correo electrónico: [email protected]. Miércoles, Viernes: 3.30 a 5.30. Objetivos: Aprender

Más detalles

PHP: Lenguaje de programación

PHP: Lenguaje de programación Francisco J. Martín Mateos Carmen Graciani Diaz Dpto. Ciencias de la Computación e Inteligencia Artificial Universidad de Sevilla Tipos de datos Enteros Con base decimal: 45, -43 Con base octal: 043, -054

Más detalles

Computabilidad y Lenguajes Formales: Autómatas Finitos

Computabilidad y Lenguajes Formales: Autómatas Finitos 300CIG007 Computabilidad y Lenguajes Formales: Autómatas Finitos Pontificia Universidad Javeriana Cali Ingeniería de Sistemas y Computación Prof. Gloria Inés Alvarez V. No Determinismo Hasta ahora cada

Más detalles

Tema 1.3. Un lenguaje mínimo y su procesador: Restricciones contextuales

Tema 1.3. Un lenguaje mínimo y su procesador: Restricciones contextuales Tema 1.3. Un lenguaje mínimo y su procesador: Restricciones contextuales Profesor Federico Peinado Elaboración del material José Luis Sia Federico Peinado Facultad de Informática Universidad Complutense

Más detalles

Introducción a Java LSUB. 15 de enero de 2015 GSYC

Introducción a Java LSUB. 15 de enero de 2015 GSYC Introducción a LSUB GSYC 15 de enero de 2015 (cc) 2014 Laboratorio de Sistemas, Algunos derechos reservados. Este trabajo se entrega bajo la licencia Creative Commons Reconocimiento - NoComercial - SinObraDerivada

Más detalles

Programa Java. El lenguaje de programación Java. Comentarios. Programa Java. Palabras reservadas. Identificadores

Programa Java. El lenguaje de programación Java. Comentarios. Programa Java. Palabras reservadas. Identificadores El lenguaje de programación Java Programa Java Un programa Java está formado por un conjunto de clases que interactúan entre sí La clase es la unidad básica de programación La ejecución depende de la clase

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

CONCEPTOS BASICOS DEL LENGUAJE JAVA

CONCEPTOS BASICOS DEL LENGUAJE JAVA CONCEPTOS BASICOS DEL LENGUAJE JAVA NOMENCLATURA GENERAL En Java se distinguen las letras mayúsculas y minúsculas. Las reglas del lenguaje respecto a los nombres de variables son muy amplias y permiten

Más detalles

Informática I. While & do While

Informática I. While & do While Asignatura: Informática I Trabajo práctico Nº5 While & do While Estructura repetitiva MIENTRAS o while En C la sentencia while (condición o expresión) instrucciones; es seguramente la más utilizada. La

Más detalles

Scripting en el cliente: Javascript. Tecnologías Web

Scripting en el cliente: Javascript. Tecnologías Web Scripting en el cliente: Javascript Tecnologías Web Motivación Por qué usar JavaScript? Permite crear efectos atractivos visualmente Permite crear sitios WEB que se visualicen de la misma manera en distintos

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

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

1 Estructura básica de un programa C++

1 Estructura básica de un programa C++ Elementos básicos de un lenguaje de alto nivel: C++ CONTENIDOS 1. Estructura básica de un programa C++. 2. Tipos de datos simples. 3. Constantes y variables en C++. Declaración. 4. Operadores y expresiones.

Más detalles

Compiladores: Análisis Sintáctico. Pontificia Universidad Javeriana Cali Ingenieria de Sistemas y Computación Prof. Gloria Inés Alvarez V.

Compiladores: Análisis Sintáctico. Pontificia Universidad Javeriana Cali Ingenieria de Sistemas y Computación Prof. Gloria Inés Alvarez V. Compiladores: Análisis Sintáctico Pontificia Universidad Javeriana Cali Ingenieria de Sistemas y Computación Prof. Gloria Inés Alvarez V. Sintaxis Define la estructura del lenguaje Ejemplo: Jerarquía en

Más detalles

Lenguaje de Programación: Go

Lenguaje de Programación: Go Centro de Investigación y de Estudios Avanzados del I.P.N 9 de Noviembre de 2011 Go Es un lenguaje de programación de propósito general que es promovido por: Rob Pike, Robert Griesemer, Ken Thompson, Russ

Más detalles

Tema 3. Tipos de datos simples

Tema 3. Tipos de datos simples Tema 3. Tipos de datos simples Contenido del tema: Concepto de tipo. Tipos simples. Operadores. Expresiones. Semántica. Tipos y expresiones en lenguaje C++ Francisco J. Veredas Dpto. Lenguajes y Ciencias

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

Temas. Objetivo. Que el estudiante logre: 1) Identificar conceptos constructivos de la Teoría de la Computabilidad. 2) Definir autómatas de pila.

Temas. Objetivo. Que el estudiante logre: 1) Identificar conceptos constructivos de la Teoría de la Computabilidad. 2) Definir autómatas de pila. 0 Temas Definición de autómata de pila Autómata de pila determinístico y no determinístico Objetivo Que el estudiante logre: 1) Identificar conceptos constructivos de la Teoría de la Computabilidad. 2)

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

TRADUCTORES, COMPILADORES E INTÉRPRETES. EJERCICIOS TEMA 5, 6, 7 y 8.

TRADUCTORES, COMPILADORES E INTÉRPRETES. EJERCICIOS TEMA 5, 6, 7 y 8. TRADUCTORES, COMPILADORES E INTÉRPRETES. EJERCICIOS TEMA 5, 6, 7 y 8. 1.) (HOLUB). Escribir un traductor que reconozca definiciones de C siguiendo el estilo antiguo, tal como: prueba(uno, dos, tres, cuatro,

Más detalles

Unidad 4. Autómatas de Pila

Unidad 4. Autómatas de Pila Unidad 4. Autómatas de Pila Una de las limitaciones de los AF es que no pueden reconocer el lenguaje {0 n 1 n } debido a que no se puede registrar para todo n con un número finito de estados. Otro lenguaje

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

SENA Distrito Capital Centro de Electricidad, Electrónica y Telecomunicaciones ADSI - Ing. Espec. Javier Vaquiro

SENA Distrito Capital Centro de Electricidad, Electrónica y Telecomunicaciones ADSI - Ing. Espec. Javier Vaquiro SENA Distrito Capital Centro de Electricidad, Electrónica y Telecomunicaciones ADSI - Ing. Espec. Javier Vaquiro 1. Sintaxis básica 2. Tipos de datos 3. Variables 4. Constantes 5. Expresiones y operadores

Más detalles

El lenguaje de Programación C. Fernando J. Pereda <[email protected]>

El lenguaje de Programación C. Fernando J. Pereda <ferdy@gentoo.org> El lenguaje de Programación C Fernando J. Pereda Por qué aprender C? Portable y muy extendido Estándar (C89, C99) El lenguaje de los sistemas Un lenguaje fácil (no, no es broma) Por

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

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

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

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

Universidad de Pamplona Materia: Programación 1 Docente: Ing. Lusbin Raúl Vargas LENGUAJE C ESTRUCTURA DE UN PROGRAMA EN C

Universidad de Pamplona Materia: Programación 1 Docente: Ing. Lusbin Raúl Vargas LENGUAJE C ESTRUCTURA DE UN PROGRAMA EN C Universidad de Pamplona Materia: Programación 1 Docente: Ing. Lusbin Raúl Vargas LENGUAJE C ESTRUCTURA DE UN PROGRAMA EN C Directivas del procesador Main() { Declaraciones Definiciones proposiciones }

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

UNIVERSIDAD DE LOS ANDES NUCLEO UNIVERSITARIO RAFAEL RANGEL (NURR) DEPARTAMENTO DE FISICA Y MATEMATICA AREA COMPUTACION TRUJILLO EDO.

UNIVERSIDAD DE LOS ANDES NUCLEO UNIVERSITARIO RAFAEL RANGEL (NURR) DEPARTAMENTO DE FISICA Y MATEMATICA AREA COMPUTACION TRUJILLO EDO. UNIVERSIDAD DE LOS ANDES NUCLEO UNIVERSITARIO RAFAEL RANGEL (NURR) DEPARTAMENTO DE FISICA Y MATEMATICA AREA COMPUTACION TRUJILLO EDO. TRUJILLO 1.- Resumen de Prog1 Comentarios es C++ Declaraciones de variables.

Más detalles

Lo que necesitaremos para programar en Java, será un editor de texto o IDE y la JDK.

Lo que necesitaremos para programar en Java, será un editor de texto o IDE y la JDK. Introducción Java surgió en 1991 dentro de la empresa Sun Microsystems como un lenguaje de programación sencillo y universal destinado a electrodomésticos. La reducida potencia de cálculo y memoria de

Más detalles

Programación 1 Tema 3. Información, datos, operaciones y expresiones

Programación 1 Tema 3. Información, datos, operaciones y expresiones Programación 1 Tema 3 Información, datos, operaciones y expresiones Índice Datos y tipos de datos Datos primitivos en C++ Expresiones e instrucción de asignación Datos y tipos de datos Problema información

Más detalles

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

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

Más detalles

PROGRAMA INSTRUCCIONAL AUTOMATAS Y LENGUAJES FORMALES

PROGRAMA INSTRUCCIONAL AUTOMATAS Y LENGUAJES FORMALES UNIVERSIDAD FERMIN TORO VICE RECTORADO ACADEMICO UNIVERSIDAD FACULTAD DE INGENIERIA ESCUELA DE MANTENIMIENTO MECÁNICO ESCUELA DE TELECOMUNICACIONES ESCUELA DE ELÉCTRICA ESCUELA DE COMPUTACIÓN PROGRAMA

Más detalles

Lenguaje C. Tipos de Datos Simples y Estructuras de Control

Lenguaje C. Tipos de Datos Simples y Estructuras de Control Lenguaje C Tipos de Datos Simples y Estructuras de Control Lenguaje C C es un lenguaje de programación creado en 1972 por Dennis M. Ritchie en los Laboratorios Bell como evolución del anterior lenguaje

Más detalles

Estatutos de Control C# Estatutos de Decisión (Selección)

Estatutos de Control C# Estatutos de Decisión (Selección) SELECCIÓN Estatutos de Control C# Estatutos de Decisión (Selección) IF Condición THEN Estatuto1 ELSE Estatuto2 Estatuto1 Statement Condición... Antes de ver esta presentación: Lee el Capítulo correspondiente

Más detalles

PROGRAMACIÓN ORIENTADA A OBJETOS (L40629) Sabino Miranda-Jiménez

PROGRAMACIÓN ORIENTADA A OBJETOS (L40629) Sabino Miranda-Jiménez PROGRAMACIÓN ORIENTADA A OBJETOS (L40629) Sabino Miranda-Jiménez Elementos de lenguaje: Identificadores Tipos de datos 2 Tipos de datos primitivos 3 Tipos de datos referenciados Clases Interfaces Arrays

Más detalles

Resumen de Sintaxis en C

Resumen de Sintaxis en C 1 Tipos, operadores y expresiones Resumen de Sintaxis en C Identificadores: Formados por letras, números y '_'. Los primeros 31 caracteres son significativos (dependiente del compilador). Las mayúsculas

Más detalles

1 ELEMENTOS BASICOS DEL LENGUAJE

1 ELEMENTOS BASICOS DEL LENGUAJE 1 ELEMENTOS SICOS DEL LENGUJE Contenido: Variables su declaracion y asignacion Caracteres en java Secuencias de escape y comentarios Tipos de datos Operadores aritméticos, relacionales y lógicos Entrada

Más detalles

Procesadores de Lenguaje

Procesadores de Lenguaje Procesadores de Lenguaje Repaso TALF Cristina Tîrnăucă Dept. Matesco, Universidad de Cantabria Fac. Ciencias Ing. Informática Primavera de 2013 La Jerarquía de Chomsky Cuatro niveles de lenguajes formales

Más detalles

JavaScript. Contenidos. Introducción El lenguaje Validación de formularios. Programación en Internet 2005-2006. DLSI - Universidad de Alicante 1

JavaScript. Contenidos. Introducción El lenguaje Validación de formularios. Programación en Internet 2005-2006. DLSI - Universidad de Alicante 1 Departamento de Lenguajes y Sistemas Informáticos JavaScript Programación en Internet Curso 2005-2006 Contenidos Introducción El lenguaje Validación de formularios DLSI - Universidad de Alicante 1 Introducción

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

Lenguajes de programación

Lenguajes de programación Lenguajes de programación Un computador solo entiende lenguaje binario Un procesador tiene un conjunto finito de operaciones binarias Un programa de computador es una secuencia de estas instrucciones Etapas

Más detalles

Profs. Carlos Pérez y Ricardo Monascal

Profs. Carlos Pérez y Ricardo Monascal TRADUCTORES E INTERPRETADORES Clase 0: Introducción al Curso Quiénes somos? Prof. Carlos Pérez [email protected] Prof. Ricardo Monascal [email protected] Oficina: MYS-228A (Sí, es la misma) Recursos

Más detalles

Principios de Computadoras II

Principios de Computadoras II Departamento de Ingeniería Electrónica y Computadoras Operadores y Expresiones [email protected] Primer programa en Java 2 Comentarios en Java Comentario tradicional (multi-línea) Comentario de línea Comentario

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

Tema: Autómata de Pila

Tema: Autómata de Pila Facultad: Ingeniería Escuela: Computación Asignatura: Compiladores 1 Tema: Autómata de Pila Contenido La presente guía aborda los autómatas de pila, y se enfoca en la aplicación que se le puede dar a estas

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

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

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

TEMA 8: Gestión dinámica de memoria

TEMA 8: Gestión dinámica de memoria TEMA 8: Gestión dinámica de memoria 8.1.-Tipo de datos puntero Hasta ahora, los tipos de datos que hemos visto (a excepción de strings y ficheros) eran estructuras de datos estáticas, es decir, estructuras

Más detalles

Tema 3 Elementos básicos de programación

Tema 3 Elementos básicos de programación Representación de Datos y Aplicaciones Tema 3 Elementos básicos de programación Natividad Martínez Madrid [email protected] Objetivos del tema 3 Conocer la estructura básica de un programa Java Comprender

Más detalles

ANÁLISIS SEMÁNTICO. Especificación formal: Semántica Operacional, semántica denotacional, semántica Axiomática, Gramáticas con Atributos.

ANÁLISIS SEMÁNTICO. Especificación formal: Semántica Operacional, semántica denotacional, semántica Axiomática, Gramáticas con Atributos. ANÁLISIS SEMÁNTICO El análisis semántico dota de un significado coherente a lo que hemos hecho en el análisis sintáctico. El chequeo semántico se encarga de que los tipos que intervienen en las expresiones

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 8: ESTRUCTURAS DE DATOS COMPLEJAS 1 VECTORES ESTÁTICOS 2 2 CADENAS O VECTORES DE CARACTERES 6 3 PASO DE CADENAS Y ARRAYS A FUNCIONES 8

TEMA 8: ESTRUCTURAS DE DATOS COMPLEJAS 1 VECTORES ESTÁTICOS 2 2 CADENAS O VECTORES DE CARACTERES 6 3 PASO DE CADENAS Y ARRAYS A FUNCIONES 8 TEMA 8: ESTRUCTURAS DE DATOS COMPLEJAS 1 VECTORES ESTÁTICOS 2 1.1 VECTORES O ARRAYS UNIDIMENSIONALES 2 1.2 ARRAYS MULTIDIMENSIONALES 3 1.3 INICIALIZACIÓN DE ARRAYS 4 1.3.1 INICIALIZACIÓN DE ARRAYS SIN

Más detalles

Autómatas de Pila y Lenguajes Incontextuales

Autómatas de Pila y Lenguajes Incontextuales Autómatas de Pila y Lenguajes Incontextuales Elvira Mayordomo Universidad de Zaragoza 5 de noviembre de 2012 Contenido de este tema 1. Introducción a los autómatas de pila 2. Definiciones 3. Equivalencia

Más detalles

TEMA 4. ELEMENTOS BÁSICOS DE PROGRAMACIÓN

TEMA 4. ELEMENTOS BÁSICOS DE PROGRAMACIÓN TEMA 4. ELEMENTOS BÁSICOS DE PROGRAMACIÓN 4.1 Definiciones y palabras reservadas básicas del C El lenguaje C++ está compuesto por: 32 palabras clave (estándar ANSI), comunes a todos los compiladores de

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 JAVA

Tema 2. El lenguaje JAVA Tema 2. El lenguaje JAVA Nomenclatura habitual Variables Tipos de variables Tipos primitivos Referencias Arrays Operadores Operadores de Java Precedencia de operadores Sentencias de control Sentencias

Más detalles