jueves, 3 de febrero de 2011

DESCUBREN UNA FORMA DE INVISIBILIZAR OBJETOS GRANDES

Los investigadores de los metamateriales de la Universidad de Birmingham y del Imperial College de Londres , en Reino Unido, de la Universidad Técnica de Dinamarca y del Instituto de Tecnología de Massachusetts (EE. UU.) han hecho 'desaparecer' objetos tridimensionales bastante grandes, como un clip, en una serie de experimentos. Anteriormente los científicos podían ocultar del ojo humano solamente objetos miles de veces más pequeños que esta herramienta de oficina.

El estudio sobre este descubrimiento ha sido publicado en la revista PNature Communications. Como de costumbre, el nuevo método se basa en un efecto óptico. Para que el clip desaparezca lo colocan frente a un sistema de cristales de calcita. La luz pasa por los cristales de manera que el objeto se hace totalmente invisible.

A diferencia de los metamateriales con los que experimentan los ópticos, la calcita es natural y bastante barata. Al entrar en este cristal transparente, la luz se rompe en dos rayos de polarizaciones diferentes que se dirigen a distintas direcciones con distinta velocidad. Pegando dos piezas y colocándolas en un espejo, los investigadores lograron aumentar la zona de invisibilidad hasta el tamaño del mismo cristal.

Según subrayó el profesor Shuang Zhang de la Universidad de Birmingham, es un paso importante porque es la primera vez el área de la capa de invisibilidad ha aumentado a un tamaño tan grande.

En varios países del mundo se están realizando desde hace cuatro años estudios de los metamateriales que pueden ocultar un objeto de la vista. En noviembre de 2010 científicos escoceces de la Universidad de St. Andrews diseñaron un material al que llamaron Metaflex. El material contiene nanoestructuras que pueden distorsionar las ondas de luz visible (y no las infrarrojas, como otros inventos) y es bastante flexible, mientras que los anteriores materiales eran rígidos.

miércoles, 2 de febrero de 2011

JavaCC y Antlr

JAVACC

JavaCC (Java Compiler Compiler) es un generador de analizadores sintácticos de código abierto para el lenguaje de programación Java. JavaCC es similar a Yacc en que genera un parser para una gramática presentada en notación BNF, con la diferencia de que la salida es en código Java. A diferencia de Yacc, JavaCC genera analizadores descendentes (top-down), lo que lo limita a la clase de gramáticas LL(K) (en particular, la recursión desde izquierda no se puede usar). El constructor de árboles que lo acompaña, JJTree, construye árboles de abajo hacia arriba (bottom-up).

JavaCC está licenciado bajo una licencia BSD.

En 1996, Sun Microsystems liberó un parser llamado Jack. Los desarrolladores responsables de Jack crearon su propia compañía llamada Metamata y cambiaron el nombre Jack a JavaCC. Metamata se convirtió en WebGain. Después de que WebGain finalizara sus operaciones, JavaCC se traslado a su ubicación actual.

Ademas encontre esta gráfica:

Y este paper aunque esta en inglés pero esta bien explicado es de la pagina de IBM.

http://www.ibm.com/developerworks/data/library/techarticle/dm-0401brereton/


ANTLR

ANTLR (ANother Tool for Language Recognition – otra herramienta para reconocimiento de lenguajes) es una herramienta creada principalmente por Terence Parr, que opera sobre lenguajes, proporcionando un marco para construir reconocedores (parsers), intérpretes, compiladores y traductores de lenguajes a partir de las descripciones gramaticales de los mismos (conteniendo acciones semánticas a realizarse en varios lenguajes de programación).

ANTLR cae dentro de la categoría de meta-programas, por ser un programa que escribe otros programas. Partiendo de la descripción formal de la gramática de un lenguaje, ANTLR genera un programa que determina si una sentencia o palabra pertenece a dicho lenguaje (reconocedor), utilizando algoritmos LL(*) de parsing. Si a dicha gramática, se le añaden acciones escritas en un lenguaje de programación, el reconocedor se transforma en un traductor o intérprete.

Además, ANTLR proporciona facilidades para la creación de estructuras intermedias de análisis (como ser ASTs - Abstract Sintax Tree), para recorrer dichas estructuras, y provee mecanismos para recuperarse automáticamente de errores y realizar reportes de los mismos.

ANTLR es un proyecto bajo licencia BSD, viniendo con todo el código fuente disponible, y preparado para su instalación bajo plataformas Linux, Windows y Mac OS X.

Historia:Los inicios del proyecto se remontan a otoño de 1988, cuando el profesor de la Universidad de Purdue, Hank Dietz, inicia el proyecto PCCTS (Purdue Compiler Construction Tool Set) como un generador de parsers, para su utilización en un curso de graduación. Bajo la tutela de Dietz, Terence Parr realiza su tesis para el grado de Máster, creando ANTLR (originalmente llamado YUCC).Esta versión alfa, fue totalmente re-diseñada y escrita, para dar paso a la versión 1.00B. Dicha versión fue la primera release distribuida a través de Internet por un grupo de noticias (comp.compilers), en Febrero de 1990, obteniendo un buen recibimiento y comunidad de seguidores. Esta versión solo generaba parsers LL(1) y no manejaba parámetros de retorno, pero permitía expresar de manera conjunta la descripción del análisis léxico y sintáctico a realizarse.

Conforme Parr iniciaba su Ph.D. en Purdue en otoño de 1990, comenzó la segunda completa revisión y re-escritura de ANTLR. A partir de la misma, así como de la incorporación de nuevas técnicas de analizar gramáticas descubiertas en esos momentos, es que surge la versión 1.00, publicada vía un artículo en Noticias SIGPLAN (periódico mensual de la ACM). Dicha versión incluía métodos para generar parsers LL(k), para la creación y manipulación de AST’s, clases léxicas, clases para manejo de errores, y clases para recuperación automática de fallas. Esta versión fue extensamente testeada por profesionales de Micro Data Base System [1] así como candidatos a Ph.D de la Universidad de Minnesota, mostrando ser una sólida base para la evolución que surgiría a partir de la misma, y continuaría hasta hoy en día.

Versiones: La versión 1 de ANTLR siguió su curso, y fue incorporando nuevas características, así como nuevas capacidades y facilidades para el programador (siendo una de las más destacadas SORCERER, la cual facilitaba el parseo de los subárboles hijos de un nodo mediante la especificación de una gramática, en vez de realizar una recorrida recursiva sobre ambos).

En mayo de 1997, Parr unido principalmente con John Lilley, se plantean escribir ANTLR desde cero, enfocándose en mejorar su rendimiento, reducir el uso de memoria, y agregar más características al lexer (como ser la posibilidad ingorar si los simbolos se encuentran en mayúscula o minúscula). Esto da lugar al surgimiento de ANTLR 2.0.

En diciembre del mismo año, surge el sitio web http://www.antlr.org, el cual fue acompañado de la publicación de la versión 2.2.0, englobando varias mejoras, como ser tratamiento de AST extendido, herencia de gramáticas, etc.

El 17 de Mayo del 2007 publican la versión actual de ANTLR, 3.0. Dicha versión llevó 4 años de investigación y desarrollo. La misma esta re-escrita en Java, y su principal objetivo fue el de proveer un código fuente limpio y claro de entender, presentando la sintaxis y semántica de la gramática del meta-lenguaje de ANTLR de una manera más sencilla. Además se mejoró nuevamente el rendimiento del software, así como también se añadieron algunas funciones nuevas (modo automático de recorrida en reversa, mecanismo de reescritura de reglas del AST, extensión al algoritmo LL(k), llamada LL(*), la cual permite que no se especifique el parámetro k de búsqueda en la cadena de entrada, sino que ANTLR busca automáticamente tantos caracteres como sea necesario, hasta que se logre evitar la ambigüedad, etc.).

A esto se le añadió que Jean Bovet creó el entorno de desarrollo para la creación y edición de gramáticas para ANTLR llamado “ANTLRWorks”.

Lenguajes soportados e integración con entornos de desarrollo: NTLRWorks es un entorno de desarrollo con interfaz gráfica que permite el desarrollo de gramáticas para la versión 3.0 o superior de ANTLR. Consiste en una aplicación independiente Java, que se puede ejecutar directamente desde un jar. De quererse incorporar las funcionalidade de ANTLR en ambientes de desarrollo ya existentes, existen plug-ins que se pueden bajar directamente de la web del autor, habilitando el poder trabajar en IntelliJ, gUnit, Eclipse, NetBeans, etc.

Actualmente ANTLR genera código Java, C, C++, C#, Python, Perl, Delphi, Ada95, JavaScript y Objective-C. Otros lenguajes como Ruby, php, etc. son generados por medio de extensiones planteadas por la comunidad.