Mostrando entradas con la etiqueta JAVA. Mostrar todas las entradas
Mostrando entradas con la etiqueta JAVA. Mostrar todas las entradas

sábado, 19 de septiembre de 2015

Práctica de Procesadores del Lenguaje II 2k15



Sin duda alguna es una asignatura tremendamente compleja pero a su vez apasionante.

En este caso, el alumno deberá comprender el análisis semántico, así como el proceso final de traducción de un lenguaje formal a las serie de instrucciones manejables por un microprocesador.

Los objetivos que se persiguen son:


  • Aprender a valorar la semántica subyacente a las construcciones sintácticas.
  • Aprender a integrar el sistema de tipos dentro de un compilador.
  • Estudiar la traducción de cada una de las construcciones de un lenguaje imperativo.
  • Aprender a dar soporte a la ejecución de invocaciones recursivas de subprogramas.
  • Aprender a dar soporte a la declaración anidada de subprogramas.
  • Conocer los procesos de generación de código ejecutable.
Y cuyo contenido es:
  • Análisis semántico
    • Gramáticas con atributos
    • Tabla de símbolos
    • Tipos de datos y verificación de tipos
  • Ambientes de ejecución
    • Organización de la memoria
    • Ambientes de ejecución estáticos
    • Ambientes de ejecución basados en pila
    • Paso de parámetros
  • Generación de código
    • Código intermedio
    • Generación de estructuras de datos
    • Generación de código para expresiones
    • Generación de código para sentencias de control
    • Generación de código para invocación de subrutinas
    • Optimización de código

El objetivo de la práctica es realizar un compilador del lenguaje PascUned, variación del lenguaje de programación Pascal, en sus fases de análisis semántico, generación de código intermedio y generación de código final.

En cuanto a la resolución de la práctica, los siguientes enlaces contienen el enunciado de la práctica, el proyecto completo para Eclipse y la memoria práctica:
See you soon!

Práctica de la asignatura de Sistemas Distibuidos 2k15


Presentación de la asignatura dada por el E.D.: 
El objetivo de esta asignatura es aprender los principios básicos sobre sistemas distribuidos, así como caracterizarlos y clasificarlos en función de una serie de parámetros básicos y distinguir entre los distintos tipos de modelos utilizados en sistemas distribuidos. Además, se pondrán de manifiesto la heterogeneidad, tanto de los medios de transmisión (cable coaxial, fibra óptica, canales inalámbricos,...) como de los dispositivos hardware y componentes software que los integran.
Esto hace necesario la aparición de una capa de abstracción software, comúnmente denominada Middleware (capa intermedia), la cual proporciona servicios a las aplicaciones distribuidas tales como la comunicación entre procesos (mediante RPC y Sockets) o invocación de objetos distribuidos (mediante RMI y CORBA).

También se estudian dos de los servicios más habituales ofrecidos por cualquier sistema distribuido, el servicio de archivos distribuidos y el servicio de nombres distribuidos.

Desde mi punto de vista es una asignatura complicada de estudiar, por lo extenso del temario. Sin embargo, la práctica compensa. Es de las más gratificante que he hecho a lo largo de estos años. Eso sí, como casi todas las prácticas en la UNED, se lleva mucho tiempo dejarla medianamente completa.

Si más preámbulos subo la práctica de este año, la cual trata de construir un "Sistema básico de microblogging tipo Twitter® usando Java RMI". 

Los ficheros para su descarga son:

domingo, 1 de febrero de 2015

Práctica de Procesadores del Lenguaje II 2k14


Esta asignatura es la continuación a la de PL I, vista en el la entrada anterior.

Sin duda alguna es una asignatura tremendamente compleja pero a su vez apasionante.

En este caso, el alumno deberá comprender el análisis semántico, así como el proceso final de traducción de un lenguaje formal a las serie de instrucciones manejables por un microprocesador.

Los objetivos que se persiguen son:

› Aprender a valorar la semántica subyacente a las construcciones sintácticas.
› Aprender a integrar el sistema de tipos dentro de un compilador.
› Estudiar la traducción de cada una de las construcciones de un lenguaje imperativo.
› Aprender a dar soporte a la ejecución de invocaciones recursivas de subprogramas.
› Aprender a dar soporte a la declaración anidada de subprogramas.
› Conocer los procesos de generación de código ejecutable.

Y cuyo contenido es:
  • Análisis semántico
    • Gramáticas con atributos
    • Tabla de símbolos
    • Tipos de datos y verificación de tipos
  • Ambientes de ejecución
    • Organización de la memoria
    • Ambientes de ejecución estáticos
    • Ambientes de ejecución basados en pila
    • Paso de parámetros
  • Generación de código
    • Código intermedio
    • Generación de estructuras de datos
    • Generación de código para expresiones
    • Generación de código para sentencias de control
    • Generación de código para invocación de subrutinas
    • Optimización de código

La práctica continúa partiendo de la de PL I como es de esperar. Tanto el enunciado como las directrices se pueden descargar en los siguientes enlaces:
En cuanto a la resolución de la práctica, los siguientes enlaces contienen el proyecto completo para Eclipse, la memoria práctica y los casos de prueba:

Exactamente igual que en la entrada anterior, quiero dar las gracias a mis compañeros Armando Platero y Alejandro González de Aguilar y al profesor D. Javier Vélez Reyes (@javiervelezreye), su inestimable ayuda y dedicación, ya que si ellos hubiera sido casi imposible, el haber podido realizar esta práctica. A todos ellos, !muchísimas gracias!




Práctica de Procesadores del Lenguaje I 2k14


Se trata de una asignatura, la cual desde hace muchos años tenía enormes ganas de cursar y por la cual el alumno debe de aprender a construir y utilizar los analizadores léxicos y sintácticos; cuyos objetivos generales son:

› Conocer la estructura interna de un compilador.
› Comprender el proceso de análisis formal de un lenguaje.
› Aprender las fases que lo constituyen conceptualmente.
› Distinguir los diferentes tipos de lenguajes existente.
› Conocer los diferentes algoritmos utilizados en el análisis sintáctico de lenguajes.


En cuanto al contenido de la asignatura tenemos:
  • Introducción 
    • Estructura de un compilador
    • Proceso de traducción
  • Análisis léxico
    • Proceso de análisis léxico
    • Expresiones regulares
    • Autómatas finitos
  • Análisis sintáctico
    • Proceso de análisis sintáctico
    • Gramáticas libres de contexto
    • Árboles sintácticos
    • Ambigüedad
    • Notación EBNF
  • Análisis sintáctico descendente
    • Análisis sintáctico descendente recursivo
    • Análisis sintáctico LL (1)
    • Recuperación de errores sintácticos descendentes
  • Análisis sintáctico ascendente
    • Análisis sintáctico LR (0)
    • Análisis sintáctico SLR (1)
    • Análisis sintáctico LALR (1)
    • Análisis sintáctico LR (1)

Para la práctica del año 2k13/14, el Equipo Docente propuso realizar un compilador del lenguaje HAda, que implementa un lenguaje similar a PASCAL usando la sintaxis del lenguaje Ada. En los siguientes enlaces se puede obtener el enunciado y las directrices de implementación proporcionadas por el E.D: 
En cuanto a la resolución de la práctica, los siguientes enlaces contienen el proyecto completo para Eclipse, la memoria práctica y los casos de prueba:

No quiero finalizar esta entrada sin dar las gracias a quienes hicieron posible el que pudiera aprender y entender esta fantástica asignatura y que sin ellos no hubiera sido posible la realización de esta práctica y la siguiente de Procesadores del Lenguaje II. Por ello, gracias Armando Urrestarazu Platero por tu increíble constancia; gracias Alejandro González de Aguilar por tus incansables ganas de enseñar y por esas nocturnas horas que me has dedicado y gracias al tutor D. Javier Vélez Reyes (@javiervelezreye) por guiarnos desde el principio con auténtica pasión y vocación y por sus apuntes de la asignatura, que más que apuntes, bien podrían ser la biografía básica.




domingo, 30 de septiembre de 2012

Teoría de los lenguajes de programación . Práctica curso 2011-12. Resolucion de Sudokus



Como lo prometido es deuda, aquí está la práctica propuesta en el curso 2011-12 de la asignatura Teoría de los lenguajes de Programación.

En esta práctica se pide la realización de un aplicación en Haskell, capaz de resolver Sudokus.

La práctica está divida en tres ficheros:

Ya sabéis que cualquier crítica constructiva, será bien recibida.


miércoles, 30 de mayo de 2012

Teoría de los lenguajes de programación (Grado en Ingeniería Informática de Sistemas por la UNED)


Estos son los resúmenes que he ido realizado para esta asignatura a partir del texto base "Lenguajes de programación: Principios y práctica de Kenneth C. Louden".

Personalmente, de esta asignatura me quedo con la parte de programación declarativa (Haskell y Prolog), ya que era algo que tenía pendiente. 

La evolución natural de los lenguajes de programación converge hacia el multiparadigma. 

Esto lo podemos ver ya en lenguajes como .Net (C#), Ruby, Python y tantos otros.

Al finales de Septiembre subiré la práctica para la resolución de Sudokus en Haskell, hasta entonces, espero que disfrutéis de la lectura de estos resúmenes.

  1. Introducción.pdf
  2. Principios de diseño de los lenguajes.pdf
  3. Programación funcional.pdf
  4. Programación lógica.pdf
  5. Sintaxis.pdf
  6. Semántica básica.pdf
  7. Tipos de datos.pdf
  8. Control I - Expresiones y enunciados.pdf
  9. Control II - Procedimientos y ambientes.pdf

domingo, 18 de septiembre de 2011

Práctica de Lenguajes de Programación

Han pasado casi cinco meses desde mi última publicación y el motivo de ello no es otro que las prioridades que se asignan a la cosas (Familia, Trabajo, Estudios, ...) y claro por último, entradas al blog.

Intentaré hacer un esfuerzo y publicar como poco una vez por semana. No quiero perder el habito de escribir en el blog.

La entrada que nos ocupa no es otra que compartir la práctica de la asignatura de Lenguajes de programación del 2011, que en este caso es el desarrollo de un juego de mesa (Monopoly) y que lo que se pretende es la comprensión y aplicación de conceptos básicos del paradigma de programación orientado a objetos (POO) usando como lenguaje JAVA.

Espero que por lo menos sirva como orientación a la hora de encarar vuestras futuras prácticas y sobre todo me encantaría recoger todas las críticas 'constructivas' que se os ocurra.

Sin más dilación, anexo los enlaces de las descargas:

lunes, 25 de octubre de 2010

Chat P2P en JAVA

Proyecto que desarrollé en NetBeans para el club mentes inquietas, y que faclilita el aprendizaje y práctica de diversas técnicas tales como:

  • Programación en JAVA.
  • Programación con Sockets TCP.
  • Programación concurente.
  • Protocolos y Serialización de datos.
  • Cifrado y codificación de datos.
  • Modelo de programación cliente-servidor.
  • ...

He intentado buscar la simplicidad en todo el proyecto para que se entiendan bien todos los conceptos, ya que cuando uno se enfrenta a una arquitectura cliente servidor  por primera vez, suele ser algo doloroso si no tenemos quien nos guíe. 

Ejemplos de este tipo hay muchos, pero que en la misma aplicación convivan servidor y cliente, no hay tantos.

He de recordar que dentro del proyecto existe un módulo "Base64Coder.java" que pertenece a Christian d'Heureuse y que no estaría nada mal que supieseis bajo que licencias se encuentra. Este modulo es el encargado de la codificación en base 64 que se utiliza en el proyecto.

Anexo además un presentación con definiciones que ayudarán a comprender un poco mejor de que va todo esto.

Descargas: