La herramienta utilizada para la construcción del analizador
sintáctico es ICE. Esta herramienta es capaz, a partir de una gramática
de contexto libre escrita en el mismo formalismo que el utilizado por
Yacc [Johnson 75],
de generar un analizador no determinista e incremental para dicha
gramática. En el apéndice A se muestra una visión
general de los fundamentos teóricos de ICE. El presente capítulo se
centrará en los aspectos prácticos, es decir, en la utilización
del conjunto de programas que implemetan las ideas mostradas en
dicho apéndice.
Para conseguir una compatibilidad total con Yacc, Vilares [Vilares 92] tomó como punto de partida el código de Bison [Donnelly y Stallman 88]. Ésta es una herramienrta de generación de analizadores sintácticos de contexto libre, compatible con Yacc y desarrollada por Robert Corbett y Richard Stallman. Una diferencia muy importante con respecto a Yacc es que el copyright pertenece a la Free Software Foundation y el producto se encuentra sometido a la ``GNU General Public License'', lo cual implica que se puede acceder al código fuente y que éste puede ser modificado y distribuido ateniéndose a los términos y condiciones de la licencia GNU. En cambio, el código de Yacc es propietario y no puede ser modificado libremente.
La herramienta ICE en sí está construida mediante un conjunto de módulos C, ficheros de código y de cabecera, que al ser compilados y enlazados producen un ejecutable de nombre bison. Los ficheros C son variaciones de los originales existentes en la distribución de Bison. Las modificaciones se refieren a los cambios sustanciales que fue preciso introducir para que los analizadores generados exhibiesen un comportamiento no determinista y tuviesen capacidades incrementales.
Relacionado con lo anterior, desde el punto de vista del usuario se ha producido también un cambio importante: el analizador generado a partir de la gramática de entrada no tiene ya la forma de un programa C, sino la de un programa LE-LISP.
Cualquier programa LE-LISP puede ser enlazado dinámicamente a
módulos C compilados y el sistema LE-LISP puede ser invocado desde
un programa escrito en C. Por tanto, no se pierde potencia en cuanto a la capacidad
de integrar el analizador con otras herramientas, como por ejemplo los
analizadores léxicos generados por Flex, ni de ser utilizado en
otros programas, como por ejemplo una aplicación con entrada salida
interactiva que realice el parsing de los datos de entrada utilizando
funciones generadas por Bison.
La utilización de un analizador sintáctico escrito en LE-LISP proporciona una serie de ventajas, como son: