PROCESADORES DE LENGUAJES I PRÁCTICA DE LABORATORIO 3

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

Download "PROCESADORES DE LENGUAJES I PRÁCTICA DE LABORATORIO 3"

Transcripción

1 PROCESADORES DE LENGUAJES I PRÁCTICA DE LABORATORIO 3 En esta práctica trabajaremos con ANTLR a nivel sintáctico. En las prácticas anteriores ya hemos visto los elementos básicos de la notación. En ésta, nos centraremos fundamentalmente en la manera en la que se comunican analizadores léxicos y sintácticos, la forma en la que deben escribirse las gramáticas y la resolución de cierto tipo de ambigüedades sintácticas. Un ejemplo simple He aquí un analizador sintáctico simple, es capaz de reconocer expresiones aritméticas con números enteros y reales, se incluye además el analizador léxico en el mismo fuente: // Analizador léxico class Analex extends Lexer BLANCO : (' ' '\t' "\r\n") {$settype(token.skip) protected DIGITO : '0'..'9' NUMERO : (DIGITO)+('.'(DIGITO)+)? OPERADOR : '+' '-' '/' '*' PARENTESIS : '(' ')' SEPARADOR : '' // Analizador sintáctico class Anasint extends Parser entrada : instrucciones EOF instrucciones : (instruccion)* instruccion : exp "" exp : exp_mult (("+" "-") exp_mult)* exp_mult : exp_base (("*" "/") exp_base)* exp_base : NUMERO "(" exp ")"

2 El analizador sintáctico generado se implementará a través de la clase Anasint (tal y como hemos indicado en el fuente) que será una subclase de LLkParser que es la que implementa los aspectos genéricos de los reconocedores sintácticos. La clase Anasint ofrece un método por cada símbolo terminal de la gramática, dichos métodos serán los encargados de reconocer el lenguaje asociado a los símbolos correspondientes. Probando el analizador sintáctico Para poder probar el analizador sintáctico utilizaremos una clase principal que cree los analizadores léxico y sintáctico, y que llame al método encargado de reconocer el símbolo principal de la gramática (anasint.instrucciones()): ////// // Procesador.java (clase principal) ////// import java.io.* import antlr.* public class Procesador { public static void main(string args[]) { try { FileInputStream fis = new FileInputStream(args[0]) Analex analex = new Analex(fis) Anasint anasint = new Anasint(analex) anasint.entrada() catch(antlrexception ae) { System.err.println(ae.getMessage()) catch(filenotfoundexception fnfe) { System.err.println("No se encontró el fichero") Análisis léxico y sintáctico en fuentes separados. Exportación de vocabularios Una de las ventajas de ANTLR es que permite especificar todos los analizadores en un único fuente o en fuentes separados. Esto permite que adaptemos nuestra especificación al tamaño del problema. Si el lenguaje es muy simple podremos incluir todos los analizadores en un fuente y no tendremos que preocuparnos de comunicarlos. Si por el contrario el lenguaje es complicado podremos especificar los analizadores por separados y comunicarlos a través de una interfaz. El hecho de generar una implementación orientada a objetos hace que las interfaces sean muy simples y claras. El analizador sintáctico invocará al método nexttoken del analizador léxico cada vez que requiera un token y recibirá como respuesta un objeto de la clase Token (de la subclase CommonToken o de otra que le indiquemos tal y como vimos en la práctica dedicada al análisis léxico). La información más importante de un objeto de la clase Token viene dada por su atributo type. Este atributo sirve para identificar el tipo de token, y es de tipo entero para optimizar las múltiples comparaciones que ha de hacer el analizador sintáctico al

3 procesar los tokens recibidos desde el analizador léxico. Se denomina vocabulario al conjunto de tokens, junto con su codificación, presentes en un fichero de gramática. ANTLR codifica los vocabularios a través de dos ficheros: una interfaz java y un fichero de texto. La interfaz java contiene un atributo entero para cada token inicializado con el valor que a la postre servirá de codificación del tipo de token. Esta interfaz es el elemento clave en la coordinación de dos analizadores ya que si ambos la implementan compartirán la información codificada en ella. La interfaz para el analizador sintáctico del ejemplo anterior sería: // $ANTLR 2.7.2: "Anasint.g" -> "Anasint.java"$ public interface AnasintTokenTypes { int EOF = 1 int NULL_TREE_LOOKAHEAD = 3 // "" = 4 // "+" = 5 // "-" = 6 // "*" = 7 // "/" = 8 int NUMERO = 9 // "(" = 10 // ")" = 11 Tal y como se indica en la primera línea del fichero esta interfaz se ha obtenido a partir de la compilación del fichero Anasint.g (que contiene sólo la especificación del analizador sintáctico). El nombre de la interfaz se obtiene añadiendo el prefijo TokenTypes al nombre del analizador. El otro fichero utilizado en la codificación de vocabulario tiene el mismo nombre que el de la interfaz pero su extensión es ".txt". En él además del token y del número que lo representa se incluye también una cadena de caracteres con el nombre del token (siempre que lo tenga). Esta última información se utiliza en el informe de errores cuando además del tipo de token se necesita conocer también su nombre. En nuestro caso el fichero AnasintTokenTypes.txt tendría el siguiente contenido: // $ANTLR 2.7.2: Anasint.g -> AnasintTokenTypes.txt$ Anasint // output token vocab name ""=4 "+"=5 "-"=6 "*"=7 "/"=8 NUMERO=9 "("=10 ")"=11 Si especificamos los analizadores léxico y sintáctico en un mismo fuente ANTLR se encarga de generar un vocabulario común para los dos. Sin embargo, si los analizadores están en fuentes distintos tenemos que preocuparnos de que ambos trabajen con el mismo vocabulario. Esto se consigue con la opción importvocab que permite añadir tokens de otro vocabulario a los definidos en un analizador. Dado que los tokens que

4 realmente nos interesan son los especificados en el analizador sintáctico importaremos el vocabulario desde el análisis sintáctico hacia el léxico: // Analex.g: Analizador léxico class Analex extends Lexer options { importvocab = Anasint // Reglas De esta forma el vocabulario común a los dos analizadores será el del sintáctico, contenido en la interfaz AnasintTokenTypes.java. Cómo escribir buenas gramáticas? Los tres esquemas de reglas más usuales en la descripción de lenguajes, son el esquema lista, el esquema agregado y el esquema elección. La descripción de estos esquemas es la siguiente: Esquema lista: se aplica cuando la entrada que se quiere reconocer consta de una secuencia de elementos de una misma categoría. Por ejemplo una lista de números, una lista de instrucciones, una lista de identificadores. En ANTLR se dispone de los operadores + y * para especificar listas de uno o más elementos y listas de cero o más elementos. Un ejemplo de lista sería: lista : (elemento)* Esquema agregado: se aplica cuando la entrada que se quiere reconocer consta siempre de un número fijo de elementos. Por ejemplo una instrucción de asignación o un programa compuesto por tres secciones. Las reglas que definen este tipo de construcciones sintácticas son del tipo: agregado : componente1 componente2 componente3 Con tantos componentes como sean necesarios. Esquema elección: se aplica para agrupar distintas opciones en la definición de la estructura sintáctica de una determinada entrada. Por ejemplo los distintos tipos de instrucciones en un lenguaje de programación o los distintos tipos de datos en la declaración de una variable. Las reglas que definen una elección son del tipo: eleccion : opcion1 opcion2 opcion3 El proceso de escritura de una gramática consiste en identificar a qué tipo de esquema obedece un determinado elemento del lenguaje y especificarlo con las reglas correspondientes. Lo aconsejable es aplicar estos esquemas paso a paso, lo que dará lugar a una gramática más clara y legible. En este sentido hay que ser cuidadoso con las facilidades (propias de la notación EBNF) que ANTLR nos proporciona para escribir

5 gramáticas compactas ya que su abuso puede dar lugar a gramáticas excesivamente crípticas. Por ejemplo: entrada : ((IDENT ("," IDENT)* "=")? NUMERO ("," NUMERO)* "") Genera el mismo lenguaje que la siguente, que es mucho más clara y fácil de escribir y comprender: entrada : (asignacion)* asignacion : (idents)? numeros "" idents : IDENT ("," IDENT)* "=" numeros : NUMERO ("," NUMERO)* Predicados sintácticos Para los problemas que pueden aparecer cuando una gramática no cumple la condición LL(k) las soluciones serán similares que se aplicaron en la especificación del analizador léxico cuando había tokens con prefijos comunes: Ampliar el número de símbolos de anticipación con la opción k, ó utilizar predicados sintácticos para resolver localmente las reglas que provocan conflictos. Tomemos como ejemplo el típico problema no-ll(1) que supone determinar si el primer identificador de una instrucción se corresponde con un nombre de función (en una llamada) o un nombre de variable (en una asignación). La gramática de partida sería: instruccion : asignacion llamada... asignacion : IDENT ":=" expr "" llamada : IDENT "(" expr ")" "" La solución pasa por aprovechar el hecho de que los dos primeros símbolos de una instrucción son siempre IDENT ":=", y se expresaría de la siguiente forma con un predicado sintáctico asociado a la regla conflictiva: instruccion : (IDENT ":=") => asignacion llamada... ANTLR utiliza el predicado para realizar una simulación del análisis previa a la toma de la decisión. De esta forma el analizador predictivo puede contar, siempre que así lo indiquemos, con más información para determinar la regla que tiene que aplicar.

6 Predicados semánticos Además de los predicados sintácticos, ANTLR permite definir predicados semánticos. Estos predicados son expresiones lógicas en Java que deben ser ciertas durante el análisis de la gramática, por ejemplo: // Código Java auxiliar {boolean reconocenumero = true // Reglas entrada : {reconocenumero? NUMERO IDENT En este caso el predicado semántico (la expresión {reconocenumero?) está al principio de la parte derecha de una regla por lo que tiene el efecto de habilitar o deshabilitar la aplicación de la misma. En general el predicado semántico puede aparecer en cualquier lugar dentro de la parte derecha de una regla. Precedencia y asociatividad Uno de los pocos lenguajes para los que no es fácil escribir una gramática aplicando la metodología vista en el apartado anterior es el de las expresiones (aritméticas, lógicas, regulares, etc.). Esto se debe fundamentalmente a la posibilidad de utilizar operadores infijos (es decir, que se mezclan entre los operandos) que además pueden estar encuadrados en distintos niveles de prioridad. Si escribimos una gramática para un lenguaje de expresiones y no tenemos en cuenta este tipo de cuestiones seguramente obtendremos como resultado una gramática ambigua. Para las expresiones con sumas y multiplicaciones la siguiente gramática adolece de este problema: expresion : expresion "+" expresion expresion "*" expresion NUMERO Por ejemplo la expresión 2+2*2 podría ser analizada como (2+2)*2 ó como 2+(2*2). Veamos cómo obtener a partir de esta gramática otra que resuelva esta ambigüedad y además pueda ser procesada sin problemas por un reconocedor descendente. Para empezar hay que escribir la gramática de forma que no aparezca ninguna recursión por la izquierda. Para ello basta con pensar que una expresión no es más que una lista de números en la que se utiliza como separadores + ó *, visto así una posible solución sería: expresion : NUMERO (("+" "*") NUMERO)* Esta gramática ya resuelve la cuestión de la recursión por la izquierda, aunque todavía no es una solución definitiva ya que no tiene en cuenta para nada la prioridad de los operadores. No es que sea ambigua, en realidad lo que ocurre es que utiliza un mecanismo demasiado simple para determinar en qué orden han de aplicarse las operaciones: aplica primero las que están más a la izquierda. Si se construye el árbol de derivación para la entrada 2+2*2+2*2, se observará que la aplicación de las operaciones propuesta por la gramática es ((((2+2)*2)+2)*), totalmente distinta a la que nos

7 interesaría que es ((2+(2*2))+(2*2)). De todas formas la idea no es del todo mala ya que resuelve bien las situaciones en las que hay que aplicar varias veces el mismo operador, como que debe ser interpretada de izquierda a derecha, o sea ((2-2)-2) en lugar de (2-(2-2)). En realidad lo que le falta a la gramática anterior es estratificar la aplicación de operaciones, de manera que se obligue a aplicar unas antes que otras. Así, si consideramos que una expresión es una lista de sumandos, donde cada sumando es el resultado de multiplicar una lista de números la gramática quedaría como sigue: expresion: sumando ("+" sumando)* sumando: NUMERO ("*" NUMERO)* Esta gramática sí puede ser considerada ya una solución ya que no es ambigua, aplica antes las multiplicaciones y después las sumas, y además en caso de encontrar varios operadores iguales los asocia de izquierda a derecha. Podemos aprovechar los dos niveles establecidos por las reglas expresion y sumando para incluir operadores que tengan una prioridad similar (la división igual que la multiplicación y la resta igual que la suma): expresion: sumando (("+" "-") sumando)* sumando: NUMERO (("*" "/") NUMERO)* Si queremos incluir paréntesis tan sólo tenemos que establecer un nivel nuevo para que no coincida con la prioridad de los niveles anteriores. Cambiaremos también los nombres de los símbolos porque a medida que aumentamos el número de niveles es más difícil encontrar nombres significativos: expr : expr_mult (("+" "-") expr_mult)* expr_mult : expr_base (("*" "/") expr_base)* expr_base : NUMERO "(" expr ")" Ejercicios 1. Escribir los analizadores léxico y sintáctico que aparecen al principio del enunciado en fuentes separados. Compilarlos y probar el funcionamiento. 2. Escribir un analizador sintáctico para los elementos del lenguaje C presentes en el siguiente ejemplo, las palabras reservadas están resaltadas en negrita: while (a<b) { if(2*a>=b) b=2 a=a+1 3. Extender el ejercicio anterior con los elementos presentes en el siguiente ejemplo,: void main(void) { int a, b a=100 b = 1000 while (a<b) {

8 if(2*a>=b) { printf("punto medio %d\n",a) break a=a+1 4. Escribir un analizador sintáctico para los elementos de XML presentes en el siguiente ejemplo: <biblioteca> <libro> <titulo> La isla del tesoro </titulo> <autor> Robert L. Stevenson </autor> <editorial> Juventud </editorial> </libro> <!-- Pendiente de leer --> <libro> <titulo> Yo que he servido al Rey de Inglaterra </titulo> <autor> Bohumil Hrabal </autor> <editorial> Destino </editorial> </libro> </biblioteca> 5. Amplía el analizador del ejercicio anterior para que reconozca atributos dentro de las etiquetas. Por ejemplo: <libro idioma="español"> libro idioma="español" </libro> Diseña la solución de manera que el analizador léxico descomponga estas etiquetas complejas en tokens. Para ello serán de utilidad los predicados semánticos ya que permitirán habilitar o deshabilitar reglas léxicas según el contexto. 6. Ampliar el ejercicio 3 para que las expresiones admitan el operador de cambio de signo (-) y los operadores lógicos (&&, y!). 7. Ampliar el ejercicio anterior para que el reconocedor procese también los tipos char y float, los literales carácter y real (por ejemplo 'a' y 1.09), la declaración y llamada de funciones, y el condicional aritmético (por ejemplo a>3?2:1 ). 8. Escribir un analizador que procese los elementos del lenguaje de descripción de grafos GDL presentes en el siguiente ejemplo: graph: { // Nodo Sevilla y carreteras que parten de él node: { title: "sevilla" label: "Sevilla" edge: { source: "sevilla" target: "cadiz" arrowstyle: none edge: { target: "huelva" arrowstyle: none source: "sevilla" edge: { source: "sevilla" target: "rosal" arrowstyle: none // Nodo Cádiz y carreteras que parten de él node: { label: "Cádiz" title: "cadiz" edge: { arrowstyle: none source: "cadiz" target: "medina" // Nodo Huelva y carreteras que parten de él node: { title: "huelva" label: "Huelva" edge: { source: "huelva" target: "rosal" arrowstyle: none

9 // Resto de nodos node: { title: "rosal" label: "Rosal de la Frontera" borderstyle: dotted node: { title: "medina" label: "Medina Sidonia" borderstyle: dotted En concreto, los elementos utilizados son los siguientes: Descripción de nodos (node) y sus atributos asociados title (identificador del nodo), label (texto para la visualización) y borderstyle (a elegir entre solid, dashed y dotted). Descripción de arcos (edge) y sus atributos asociados source (identificador del nodo origen), target (identificador del nodo destino) y arrowstyle (a elegir entre solid, line y none). 9. Escribe un analizador que procese gramáticas expresadas en el lenguaje ANTLR. Sólo deberá procesar la parte de reglas de un fichero de gramáticas, de manera que una posible entrada sería: instrucciones : (expresion "")* EOF expresion : exp_mult (("+" "-") exp_mult)* exp_mult : exp_base (("*" "/") exp_base)* exp_base : NUMERO "(" expresion ")"

PROCESADORES DE LENGUAJES I PRÁCTICA DE LABORATORIO 5

PROCESADORES DE LENGUAJES I PRÁCTICA DE LABORATORIO 5 PROCESADORES DE LENGUAJES I PRÁCTICA DE LABORATORIO 5 En esta práctica estudiaremos los mecanismos que proporciona ANTLR para crear árboles de sintaxis abstracta. Estos aspectos (junto con la notación

Más detalles

PROCESADORES DE LENGUAJES I PRÁCTICA DE LABORATORIO 1

PROCESADORES DE LENGUAJES I PRÁCTICA DE LABORATORIO 1 PROCESADORES DE LENGUAJES I PRÁCTICA DE LABORATORIO 1 Esta práctica supone la primera toma de contacto con la herramienta ANTLR (ANother Tool for Language Recognition). ANTLR es una herramienta que integra

Más detalles

PROCESADORES DE LENGUAJES I PRÁCTICA DE LABORATORIO 6

PROCESADORES DE LENGUAJES I PRÁCTICA DE LABORATORIO 6 PROCESADORES DE LENGUAJES I PRÁCTICA DE LABORATORIO 6 En esta práctica veremos cómo recorrer árboles de sintaxis abstracta con ANTLR. La notación utilizada nos va a resultar familiar ya que comparte muchos

Más detalles

PROCESADORES DE LENGUAJES I PRÁCTICA DE LABORATORIO 4

PROCESADORES DE LENGUAJES I PRÁCTICA DE LABORATORIO 4 PROCESADORES DE LENGUAJES I PRÁCTICA DE LABORATORIO 4 En esta práctica trabajaremos con ANTLR a nivel semántico utilizando gramáticas con atributos. ANTLR permite implementar con facilidad los dos modelos

Más detalles

TEMA 2: ANÁLISIS LÉXICO-SINTÁCTICO

TEMA 2: ANÁLISIS LÉXICO-SINTÁCTICO 1 TEMA 2: ANÁLISIS LÉXICO-SINTÁCTICO OBJETIVO Dar respuesta a las siguientes preguntas: Qué es el análisis léxico-sintáctico de un lenguaje? Cómo se diseña y construye un analizador léxico-sintáctico?

Más detalles

Árboles de Sintaxis Abstracta en ANTLR

Árboles de Sintaxis Abstracta en ANTLR Árboles de Sintaxis Abstracta en ANTLR Antlr permite construir árboles de sintaxis abstracta (ASA) mediante anotaciones en la gramática indicando qué tokens deben tratarse como raíces de subárboles, cuáles

Más detalles

PROCESADORES DE LENGUAJES I PRÁCTICA DE LABORATORIO 1

PROCESADORES DE LENGUAJES I PRÁCTICA DE LABORATORIO 1 PROCESADORES DE LENGUAJES I PRÁCTICA DE LABORATORIO 1 ANTLR es una herramienta que integra la generación de analizadores léxicos, sintácticos, árboles de sintaxis abstracta y evaluadores de atributos.

Más detalles

VARIABLES AUTOMÁTICAS

VARIABLES AUTOMÁTICAS VARIABLES AUTOMÁTICAS Perl es un lenguaje muy flexible y con unas instrucciones muy potentes y útiles. Uno de los aspectos más destacables en este sentido es el de las expresiones regulares, hay multitud

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

16 Análisis sintáctico I

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

Más detalles

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

TEMA 3: ANÁLISIS SEMÁNTICO

TEMA 3: ANÁLISIS SEMÁNTICO 1 TEMA 3: ANÁLISIS SEMÁNTICO OBJETIVO Dar respuesta a las siguientes preguntas: Qué es el análisis semántico de un lenguaje? Cómo se diseña y construye un analizador semántico? EL PROBLEMA DEL CÁLCULO

Más detalles

Tema 2: Análisis léxico

Tema 2: Análisis léxico Tema 2: Análisis léxico Procesamiento de Lenguajes Dept. de Lenguajes y Sistemas Informáticos Universidad de Alicante Procesamiento de Lenguajes Tema 2: Análisis léxico 1 / 22 Fundamentos del análisis

Más detalles

ANÁLISIS LÉXICO Ing. Ronald Rentería Ayquipa

ANÁLISIS LÉXICO Ing. Ronald Rentería Ayquipa ANÁLISIS LÉXICO Ing. Ronald Rentería Ayquipa ANALIZADOR LÉXICO (AL) El Analizador léxico (scanner), lee la secuencia de caracteres del programa fuente, caracter a caracter, y los agrupa para formar unidades

Más detalles

Tema: Análisis Sintáctico

Tema: Análisis Sintáctico Compiladores. Guía 3 1 Facultad: Ingeniería Escuela: Computación Asignatura: Compiladores Tema: Análisis Sintáctico Contenido En esta guía se abordarán los conceptos pertenecientes al componente de análisis

Más detalles

Curso de Java Introducción a la Programación II

Curso de Java Introducción a la Programación II Curso de Java Introducción a la Programación II Jaime Fernández Martín Curso INEM 02830. Programación en Java Marzo 2010 Índice 1 Tipos Java 2 Decalaración de variables 3 Operadores aritméticos Índice

Más detalles

Análisis semántico. Análisis semántico. Índice (I)

Análisis semántico. Análisis semántico. Índice (I) Análisis semántico Índice (I) Marina de la Cruz Alfonso Ortega Objetivo del análisis semántico Decisiones para la construcción de un analizador semántico Análisis semántico con Bison Nivel de indirección

Más detalles

Gramáticas de Atributos

Gramáticas de Atributos Teoría de Lenguajes Facultad de Ciencias Exactas y Naturales Universidad de Buenos Aires Etapas de un Compilador Analizador Léxico Analizador Sintáctico (Parser)... Lexer: Genera secuencia de tokens Reporta

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

Java. Introducción a la Programación Orientada a Objetos

Java. Introducción a la Programación Orientada a Objetos Java Java es un lenguaje de programación presentado en 1995 enfocado a: soportar los fundamentos de la programación orientada a objetos. generar código independiente de la arquitectura de la computadora

Más detalles

VARIABLES, CONSTANTES Y EXPRESIONES ASIGNACIÓN. TIPOS ELEMENTALES. PRECEDENCIA DE LOS ESTRUCTURAS DE CONTROL. CONDICIONAL E

VARIABLES, CONSTANTES Y EXPRESIONES ASIGNACIÓN. TIPOS ELEMENTALES. PRECEDENCIA DE LOS ESTRUCTURAS DE CONTROL. CONDICIONAL E Java Java es un lenguaje de programación presentado en 1995 enfocado a: soportar los fundamentos de la programación orientada a objetos. generar código independiente de la arquitectura de la computadora

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

YACC (Yet Another Compiler Compiler) LALR(1) Parser Generator

YACC (Yet Another Compiler Compiler) LALR(1) Parser Generator YACC (Yet Another Compiler Compiler) LALR(1) Parser Generator 1 INDICE 1. Introducción 2. Especificaciones 3. Ambigüedad y conflictos 4. Tratamiento de errores 5. Uso con el LEX 6. Algunos consejos prácticos

Más detalles

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

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

Más detalles

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

UNIVERSIDAD NACIONAL DE EDUCACIÓN A DISTANCIA Escuela Técnica Superior de Ingeniería Informática Procesadores de Lenguajes. Tema 2. UNIVERSIDAD NACIONAL DE EDUCACIÓN A DISTANCIA Escuela Técnica Superior de Ingeniería Informática Procesadores de Lenguajes Tema 2 Análisis Léxico Javier Vélez Reyes jvelez@lsi.uned.es Objetivos del Tema

Más detalles

PRÁCTICAS DE PROCESADORES DEL LENGUAJE CURSO 2008/2009

PRÁCTICAS DE PROCESADORES DEL LENGUAJE CURSO 2008/2009 PRÁCTICAS DE PROCESADORES DEL LENGUAJE CURSO 2008/2009 PRÁCTICA 2: ANALIZADOR SINTÁCTICO Y TABLA DE SÍMBOLOS. Objetivo de la Práctica Esta práctica tiene como primer objetivo la codificación de un analizador

Más detalles

Lenguaje de Diseño. Primera Parte. Segundo Cuatrimestre 2017

Lenguaje de Diseño. Primera Parte. Segundo Cuatrimestre 2017 Primera Parte Fund. de la Informática Int. a la Programación Int. a la Computación Resolución de Problemas y Algoritmos Segundo Cuatrimestre 2017 1 Etapas en el proceso de resolver un problema: 1- Comprender

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

Tema 1 INTRODUCCIÓN A LOS LENGUAJES DE PROGRAMACIÓN

Tema 1 INTRODUCCIÓN A LOS LENGUAJES DE PROGRAMACIÓN Tema 1 INTRODUCCIÓN A LOS LENGUAJES DE PROGRAMACIÓN - Introducción - Sintaxis - Semántica básica - Tipos de datos - Expresiones y enunciados - Procedimientos y ambientes - Tipos abstractos de datos y módulos

Más detalles

Compiladores: Introducción

Compiladores: Introducción Compiladores: Introducción Pontificia Universidad Javeriana Cali Ingeniería de Sistemas y Computación Prof. Gloria Inés Alvarez V. (galvarez@puj.edu.co) Basado en [Aho, 2007, chp. 1] Qué es un COMPILADOR?

Más detalles

Programación 1. Tema I. Conceptos y elementos básicos de Programación. Lección 2. Lenguaje de programación y ejecución de un programa

Programación 1. Tema I. Conceptos y elementos básicos de Programación. Lección 2. Lenguaje de programación y ejecución de un programa Programación 1 Tema I. Conceptos y elementos básicos de Programación Lección 2. Lenguaje de programación y ejecución de un programa 1 Léxico, sintaxis y semántica de un lenguaje #include #include

Más detalles

ANÁLISIS SINTÁCTICO I GRAMÁTICAS

ANÁLISIS SINTÁCTICO I GRAMÁTICAS Todos los derechos de propiedad intelectual de esta obra pertenecen en exclusiva a la Universidad Europea de Madrid, S.L.U. Queda terminantemente prohibida la reproducción, puesta a disposición del público

Más detalles

Análisis léxico. Formalización y desarrollo. Procesadores de Lenguajes. Ingeniería Técnica superior de Ingeniería Informática

Análisis léxico. Formalización y desarrollo. Procesadores de Lenguajes. Ingeniería Técnica superior de Ingeniería Informática Procesadores de Lenguajes Ingeniería Técnica superior de Ingeniería Informática Departamento de Lenguajes y Sistemas informáticos Análisis léxico Formalización y desarrollo Javier Vélez Reyes jvelez@lsi.uned.es

Más detalles

ANÁLISIS DESCENDENTE. Compruébese que la siguiente gramática es LL(1) sin modificarla.

ANÁLISIS DESCENDENTE. Compruébese que la siguiente gramática es LL(1) sin modificarla. Procesadores de lenguaje Ejercicios del Tema 3 ANÁLISIS DESCENDENTE Ejercicio 3.1 Compruébese que la siguiente gramática es LL(1) sin modificarla. Ejercicio 3.2 A B C D B a C b B λ C c A d C e B f C g

Más detalles

Una clasificación de los tipos de datos existentes en los diferentes lenguajes de programación se presenta a continuación:

Una clasificación de los tipos de datos existentes en los diferentes lenguajes de programación se presenta a continuación: Clase teórica 2 Algoritmos en C Página 1 de 6 TIPOS DE DATOS Una clasificación de los tipos de datos existentes en los diferentes lenguajes de programación se presenta a continuación: Por el momento nuestro

Más detalles

Los parámetros: son los campos que se comunican a los métodos de los objetos.

Los parámetros: son los campos que se comunican a los métodos de los objetos. Modulo 6. Variables y Operadores Variables Un objeto almacena los estados en campos, estos campos se conocen en java como variables. Por eso a menudo podemos ver estas dos palabras usadas para referirse

Más detalles

Introducción. El proceso de traducción

Introducción. El proceso de traducción Toda compilación es un proceso de transformación paulatina que convierte un programa escrito en un lenguaje fuente de alto nivel en otro programa escrito en un lenguaje objeto de bajo nivel. Ese proceso

Más detalles

Universidad de Valladolid

Universidad de Valladolid Universidad de Valladolid Departamento de Informática Teoría de autómatas y lenguajes formales. 2 o I.T.Informática. Gestión. Examen de primera convocatoria. 18 de junio de 29 Apellidos, Nombre... Grupo:...

Más detalles

Controla el flujo de tokens reconocidos por parte del analizador léxico. 4.2 Introduccion a las gramaticas libres de contexto y arboles de derivacion

Controla el flujo de tokens reconocidos por parte del analizador léxico. 4.2 Introduccion a las gramaticas libres de contexto y arboles de derivacion UNIDAD IV Analisis Sintactico 4.1 Introduccion Sintaxis significa estructura del orden de las palabras en una frase. La tarea del analisis sintactico es revisar si los símbolos aparecen en el orden correcto

Más detalles

Tema 5. Análisis semántico

Tema 5. Análisis semántico Departamento de Tecnologías de la Información Tema 5 Análisis semántico Ciencias de la Computación e Inteligencia Artificial Índice 5.1 Características del análisis semántico 5.2 Gramáticas atribuidas

Más detalles

Estructuras de control selectivas

Estructuras de control selectivas Práctica 3 Estructuras de control selectivas Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Versión 2.0.2 Concepto de sentencia y estructura de control El cuerpo de los métodos

Más detalles

ANÁLISIS LÉXICO EXPRESIONES REGULARES

ANÁLISIS LÉXICO EXPRESIONES REGULARES Todos los derechos de propiedad intelectual de esta obra pertenecen en exclusiva a la Universidad Europea de Madrid, S.L.U. Queda terminantemente prohibida la reproducción, puesta a disposición del público

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

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

Agenda. Introducción Analizador léxico Analysis El problema de analizar sintácticamente Analizador sintáctico descendeterecursivo

Agenda. Introducción Analizador léxico Analysis El problema de analizar sintácticamente Analizador sintáctico descendeterecursivo Agenda Introducción Analizador léxico Analysis El problema de analizar sintácticamente Analizador sintáctico descendeterecursivo Analizador sintáctico Bottom-Up 1-1 1-2 Introducción Los sistemas de implementación

Más detalles

PRÁCTICA DE PROCESADORES DE LENGUAJE EVALUACIÓN ORDINARIA CURSO 2009/2010 OBJETIVO DE LA PRÁCTICA

PRÁCTICA DE PROCESADORES DE LENGUAJE EVALUACIÓN ORDINARIA CURSO 2009/2010 OBJETIVO DE LA PRÁCTICA PRÁCTICA DE PROCESADORES DE LENGUAJE EVALUACIÓN ORDINARIA CURSO 2009/2010 OBJETIVO DE LA PRÁCTICA El objetivo de la práctica es desarrollar un compilador utilizando las herramientas flex y bison y el lenguaje

Más detalles

Generación de Código Intermedio

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

Más detalles

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

Bison. Introducción. Índice. Introducción Uso de Bison con Flex. Formato del fichero de especificación de Bison

Bison. Introducción. Índice. Introducción Uso de Bison con Flex. Formato del fichero de especificación de Bison Bison Índice Marina de la Cruz Alfonso Ortega Introducción Uso de Bison con Flex Construcción del programa objetivo alfa Comunicación entre las funciones main(), yylex() e yyparse() Formato del fichero

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

Lenguaje de Diseño. Primera Parte. Resolución de Problemas y Algoritmos. Primer Cuatrimestre Ing. En Informática e Ing.

Lenguaje de Diseño. Primera Parte. Resolución de Problemas y Algoritmos. Primer Cuatrimestre Ing. En Informática e Ing. Primera Parte Resolución de Problemas y Algoritmos Ing. En Informática e Ing. En Computación Primer Cuatrimestre 2017 1 Lenguajes Algorítmicos Los algoritmos pueden describirse, en mayor o menor detalle,

Más detalles

Lenguajes y Compiladores Aspectos Formales (Parte 2) Compiladores

Lenguajes y Compiladores Aspectos Formales (Parte 2) Compiladores Facultad de Ingeniería de Sistemas Lenguajes y Aspectos Formales (Parte 2) 2007 1 Derivaciones El proceso de búsqueda de un árbol sintáctico para una cadena se llama análisis sintáctico. El lenguaje generado

Más detalles

Desarrollo de editores textuales con Xtext

Desarrollo de editores textuales con Xtext Procesadores de Lenguajes 2 Desarrollo de editores textuales con Xtext Curso 2013-2014 Iván Ruiz Rube Departamento de Ingeniería Informática Escuela Superior de Ingeniería Universidad de Cádiz Xtext 1

Más detalles

Tema 3. Análisis sintáctico descendente

Tema 3. Análisis sintáctico descendente Departamento de Tecnologías de la Información Tema 3 Análisis sintáctico Ciencias de la Computación e Inteligencia Artificial Índice 3.1 Características del análisis sintáctico 3.2 Gramáticas libres de

Más detalles

Análisis semántico Tabla de símbolos, chequeo de tipos y representaciones internas

Análisis semántico Tabla de símbolos, chequeo de tipos y representaciones internas Análisis semántico Tabla de símbolos, chequeo de tipos y representaciones internas Análisis semático c 2001 José Fortes Gálvez p.1 Análisis?... semántico? La semántica corresponde al significado asociado

Más detalles

Programación Orientada a Objetos

Programación Orientada a Objetos Unidad III Programación Orientada a Objetos en Java Programación Orientada a Objetos Programación I - 0416202 Contenido Esta lección abarca los siguientes temas con respecto a Java: Qué es Java? Breve

Más detalles

Compiladores. Análisis Sintáctico Ascendente. Adrian Ulises Mercado Martínez. Facultad de Ingeniería, UNAM. 5 de septiembre de 2013

Compiladores. Análisis Sintáctico Ascendente. Adrian Ulises Mercado Martínez. Facultad de Ingeniería, UNAM. 5 de septiembre de 2013 Compiladores Análisis Sintáctico Ascendente Adrian Ulises Mercado Martínez Facultad de Ingeniería, UNAM 5 de septiembre de 2013 Adrian Ulises Mercado Martínez (FI,UNAM) Compiladores 5/07/2013 1 / 34 Índice

Más detalles

FLEX: A FAST LEXICAL ANALYZER GENERATOR

FLEX: A FAST LEXICAL ANALYZER GENERATOR FLEX: A FAST LEXICAL ANALYZER GENERATOR Especificación Léxica Fichero.l flex Programa con la implementación del AFD, código fuente, yy.lex.c yy.lex.c Compilador de C milex (ejecutable) Para compilar flex

Más detalles

Funcionamiento del A.L.

Funcionamiento del A.L. ANALIZADOR LEXICO 1 Funcionamiento del A.L. Programa fuente Analizador léxico Componente léxico Obtén el siguiente componente léxico Analizador sintáctico Tabla de símbolos 2 Maneja el fichero del programa

Más detalles

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

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

Más detalles

CÓMO DESARROLLAR Y PROBAR PROGRAMAS?, COMPRUÉBALO!

CÓMO DESARROLLAR Y PROBAR PROGRAMAS?, COMPRUÉBALO! CÓMO DESARROLLAR Y PROBAR PROGRAMAS?, COMPRUÉBALO! AUTORÍA MARÍA CATALÁ CARBONERO TEMÁTICA PROGRAMACIÓN ETAPA CICLO MEDIO Y SUPERIOR DE INFORMÁTICA Resumen A la hora de realizar un programa en cualquier

Más detalles

Programación Orientada a Objetos Sentencias Java Parte I Ing. Julio Ernesto Carreño Vargas MsC.

Programación Orientada a Objetos Sentencias Java Parte I Ing. Julio Ernesto Carreño Vargas MsC. Sentencias Java Parte I Ing. Julio Ernesto Carreño Vargas MsC. Variables Conceptos de Memoria Una variable es un espacio en la memoria del PC Cada variable tiene un nombre, un tipo, un tamaño y un valor

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

Unidad Didáctica 3. Tipos genéricos. Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos

Unidad Didáctica 3. Tipos genéricos. Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Unidad Didáctica 3 Tipos genéricos Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Definición de tipo genérico Hablamos de un tipo genérico cuando el tipo en cuestión depende

Más detalles

Análisis semántico. Análisis semántico. Índice

Análisis semántico. Análisis semántico. Índice Análisis semántico Índice Marina de la Cruz Alfonso Ortega Notación Objetivo del análisis semántico Pasos para la construcción de un analizador semántico Análisis semántico con Bison Definición de los

Más detalles

Teoría de Autómatas y Lenguajes Formales Práctica 4

Teoría de Autómatas y Lenguajes Formales Práctica 4 Departamento de Tecnologías de la Información Área de Ciencias de la Computación e Inteligencia Artificial Teoría de Autómatas y Lenguajes Formales Práctica 4 1.- OBJETIVOS El objetivo de esta práctica

Más detalles

Construcciones del Lenguaje Java

Construcciones del Lenguaje Java Construcciones del Lenguaje Java Autor: Juan Alberto López Cavallotti Versión de Java: 5 / 6 Comentarios Comentario de Línea Comentario Multilínea //Esto es un comentario. /* Esto comenta varias lineas.

Más detalles

Práctica 4 Análisis LALR para milenguaje y construcción de un traductor de milenguaje

Práctica 4 Análisis LALR para milenguaje y construcción de un traductor de milenguaje Práctica 4 Análisis LALR para milenguaje y construcción de un traductor de milenguaje 1. Objetivos 1. Hacer una introducción práctica a la traducción dirigida por la sintaxis basada en el análisis LALR

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

Análisis Semántico y Traducción Dirigida por la Sintaxis. Programación II Margarita Álvarez

Análisis Semántico y Traducción Dirigida por la Sintaxis. Programación II Margarita Álvarez Análisis Semántico y Traducción Dirigida por la Sintaxis Programación II Margarita Álvarez Análisis Semántico Comprobación estática Comprobación de tipos: la aplicación de los operadores y operandos deben

Más detalles

Un calculadora avanzada... y algo más!

Un calculadora avanzada... y algo más! INFORMÁTICA, GRUPO D Un calculadora avanzada... y algo más! Vamos a familiarizarnos con el entorno interactivo de Python. Vamos a construir expresiones aritméticas y a guardar los resultados en variables

Más detalles

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

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

Más detalles

YACC. Los símbolos terminales que la gramática empleará. El axioma o símbolo inicial de la gramática. %token. %start

YACC. Los símbolos terminales que la gramática empleará. El axioma o símbolo inicial de la gramática. %token. %start YACC Yacc (Yet Another Compiler Compiler) es un programa que permite construir analizadores gramaticales en C a partir de una gramática libre al contexto. Junto con Lex permite construir rápidamente las

Más detalles

INTRODUCCIÓN AL PROCESO DE COMPILACIÓN

INTRODUCCIÓN AL PROCESO DE COMPILACIÓN INTRODUCCIÓN AL PROCESO DE COMPILACIÓN El programa que se debe compilar es una secuencia de caracteres que termina con un centinela. CONCEPTOS BÁSICOS Un compilador es un complejo programa que lee un programa

Más detalles

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

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

Más detalles

Programación n Orientada a Objetos Sentencias Java Parte I. Ing. Julio Ernesto Carreño o Vargas MsC.

Programación n Orientada a Objetos Sentencias Java Parte I. Ing. Julio Ernesto Carreño o Vargas MsC. Programación n Orientada a Objetos Sentencias Java Parte I Ing. Julio Ernesto Carreño o Vargas MsC. Variables y expresiones aritméticas Variables Conceptos de Memoria Una variable es un espacio en la memoria

Más detalles

Tema 2. Concepto de Algoritmo

Tema 2. Concepto de Algoritmo Tema 2. Concepto de Algoritmo Objetivos Definir el concepto de algoritmo Resolver problemas sencillos mediante el diseño de un algoritmo Conocer los tipos de datos elementales y las operaciones sobre ellos

Más detalles

Tema 4. Operadores y Expresiones

Tema 4. Operadores y Expresiones Tema 4 Operadores y Expresiones Contenidos 1. Conceptos Básicos. 2. Operadores Aritméticos. 3. Operadores de Relación, de Igualdad y Lógicos. 4. Operadores de Incremento y Decremento. 5. Operadores y Expresiones

Más detalles

Tema: Análisis Léxico

Tema: Análisis Léxico Compiladores. Guía 2 1 Facultad: Ingeniería Escuela: Computación Asignatura: Compiladores Tema: Análisis Léxico Contenido En esta guía se dará a conocer la manera en que un compilador realiza el análisis

Más detalles

GENERACIÓN DE CÓDIGO INTERMEDIO EJEMPLOS PARA DISTINTAS ESTRUCTURAS DE DATOS

GENERACIÓN DE CÓDIGO INTERMEDIO EJEMPLOS PARA DISTINTAS ESTRUCTURAS DE DATOS Todos los derechos de propiedad intelectual de esta obra pertenecen en exclusiva a la Universidad Europea de Madrid, S.L.U. Queda terminantemente prohibida la reproducción, puesta a disposición del público

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

Lenguajes de Programación Programación funcional

Lenguajes de Programación Programación funcional Lenguajes de Programación Programación funcional Roberto Bonvallet Departamento de Informática Universidad Técnica Federico Santa María Concepto de función En el paradigma imperativo: Una función es una

Más detalles

GENERACIÓN DE CÓDIGO INTERMEDIO ÁRBOLES DE SINTAXIS ABSTRACTA (ASA)

GENERACIÓN DE CÓDIGO INTERMEDIO ÁRBOLES DE SINTAXIS ABSTRACTA (ASA) Todos los derechos de propiedad intelectual de esta obra pertenecen en exclusiva a la Universidad Europea de Madrid, S.L.U. Queda terminantemente prohibida la reproducción, puesta a disposición del público

Más detalles

3.3 Conceptos Básicos del Lenguaje Java

3.3 Conceptos Básicos del Lenguaje Java 3.3 Conceptos Básicos del Lenguaje Java Conjunto de Caracteres Java utiliza Unicode, un conjunto de caracteres de 16 bits Java permite leer ASCII de 7-bit o Latin-1, conviertiéndolo a Unicode Son pocos

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

LENGUAJES Y GRAMÁTICAS

LENGUAJES Y GRAMÁTICAS LENGUAJES Y GRAMÁTICAS Orlando Arboleda Molina Escuela de Ingeniería de Sistemas y Computación de La Universidad del Valle 20 de septiembre de 2008 Contenido Lenguajes y Gramáticas Gramáticas Gramáticas

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

Capítulo 7 OPERADORES Y EXPRESIONES. Presentación resumen del libro: "EMPEZAR DE CERO A PROGRAMAR EN lenguaje C"

Capítulo 7 OPERADORES Y EXPRESIONES. Presentación resumen del libro: EMPEZAR DE CERO A PROGRAMAR EN lenguaje C Presentación resumen del libro: "EMPEZAR DE CERO A PROGRAMAR EN lenguaje C" Autor: Carlos Javier Pes Rivas (correo@carlospes.com) Capítulo 7 OPERADORES Y EXPRESIONES 1 OBJETIVOS Conocer los tipos de operadores

Más detalles

12 La herramienta LEX

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

Más detalles

FACULTAD POLITÉCNICA DIRECCIÓN ACADÉMICA PROGRAMA DE ESTUDIO I. IDENTIFICACIÓN Carrera : Ingeniería de Sistemas CARGA HORARIA (Horas reloj) Asignatura : Compiladores Carga Horaria Semestral 64 Semestre

Más detalles

GRAMATICAS LIBRES DEL CONTEXTO

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

Más detalles

Tema 5: Traducción dirigida por la sintaxis

Tema 5: Traducción dirigida por la sintaxis Tema 5: Traducción dirigida por la sintaxis Procesamiento de Lenguajes Dept. de Lenguajes y Sistemas Informáticos Universidad de Alicante Procesamiento de Lenguajes Tema 5: Traducción dirigida por la sintaxis

Más detalles

Conceptos básicos sobre gramáticas

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

Más detalles

abril de 2017 Desarrollo de aplicaciones en Java Tipos de datos primitivos Tipos de datos Elementos de aplicaciones simples

abril de 2017 Desarrollo de aplicaciones en Java Tipos de datos primitivos Tipos de datos Elementos de aplicaciones simples Desarrollo de aplicaciones en Java Generación de código fuente Compilación Ejecución Elementos de aplicaciones simples EII147-01-02 Introducción a las tecnologías de información Escuela de Ingeniería Industrial

Más detalles

Tema 2: EL TIPO DE DATOS ENTERO. INSTRUCCIÓN DE ASIGNACIÓN Y DE COMPOSICIÓN SECUENCIAL

Tema 2: EL TIPO DE DATOS ENTERO. INSTRUCCIÓN DE ASIGNACIÓN Y DE COMPOSICIÓN SECUENCIAL Tema 2: EL TIPO DE DATOS ENTERO. INSTRUCCIÓN DE ASIGNACIÓN Y DE COMPOSICIÓN SECUENCIAL Cualquier duda sobre el contenido de este tema se puede enviar al foro TEORIA2. 2.1.- El tipo de datos entero (byte,

Más detalles

Especificación de TAD. Lección 2

Especificación de TAD. Lección 2 Especificación de TAD Lección 2 Esquema Características generales de una especificación Especificación algebraica Especificación no formal Lectura recomendada: sección 1.3 del libro de Z.J. Hernández et

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

Expresiones y sentencias

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

Más detalles

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