GOLD es un sistema de análisis gratuito diseñado para admitir múltiples lenguajes de programación.
Diseño
El sistema utiliza un DFA para el análisis léxico y el algoritmo LALR para el análisis sintáctico. Ambos algoritmos son máquinas de estados que utilizan tablas para determinar acciones. GOLD está diseñado en torno al principio de separar lógicamente el proceso de generación de las tablas de análisis LALR y DFA de la implementación real de los algoritmos de análisis sintáctico. Esto permite implementar analizadores sintácticos en diferentes lenguajes de programación manteniendo las mismas gramáticas y el mismo proceso de desarrollo.
El sistema GOLD consta de tres componentes lógicos: el "Constructor", el "Motor" y un archivo de definición de "Tabla de gramática compilada" que funciona como intermediario entre el Constructor y el Motor.
Constructor

El Builder es el componente principal y la aplicación principal del sistema. El Builder se utiliza para analizar la sintaxis de un lenguaje (especificado como gramática) y construir tablas LALR y DFA . Durante este proceso, se informará de cualquier ambigüedad en la gramática. Esta es esencialmente la misma tarea que realizan los compiladores-compiladores como YACC y ANTLR .
Una vez que se han creado correctamente las tablas de análisis LALR y DFA , el generador puede guardar estos datos en un archivo de tabla de gramática compilada. Esto permite que el generador vuelva a abrir la información más tarde o que la utilice en uno de los motores. Actualmente, el componente Generador solo está disponible para sistemas operativos Windows de 32 bits.
Algunas de las características del Builder son:
- Licencia de software gratuito
- Navegación por estados
- Pruebas integradas
- Asistente para probar varios archivos
- Generar páginas web (incluidos cuadros de sintaxis con hipervínculos)
- Generar programas esqueleto usando plantillas
- Exportar gramáticas a YACC
- Exportar tablas a XML o texto formateado
Archivo de tabla gramatical compilada
El archivo de tabla de gramática compilada se utiliza para almacenar información de tabla generada por el generador.
Motores
A diferencia de Builder, que solo se ejecuta en una única plataforma, el componente Engine está escrito para un lenguaje de programación o una plataforma de desarrollo específicos. Engine implementa los algoritmos LALR y DFA . Dado que los distintos lenguajes de programación utilizan enfoques diferentes para diseñar programas, cada implementación de Engine variará. Como resultado, una implementación de Engine escrita para Visual Basic 6 será muy diferente de una escrita para ANSI C.
Actualmente, se han implementado motores para GOLD para los siguientes lenguajes de programación y plataformas. Se pueden implementar nuevos motores utilizando el código fuente de los motores existentes como punto de partida.
- Ensamblaje - Intel x86
- Norma ANSI C
- DO#
- D
- Delfos
- Java
- Pascal
- Pitón
- Visual Basic
- Visual Basic .NET
- Visual C++
Gramáticas
Las gramáticas GOLD se basan directamente en la forma Backus-Naur , expresiones regulares y notación de conjuntos.
La siguiente gramática define la sintaxis de un lenguaje de programación de propósito general mínimo llamado "Simple".
"Nombre" = 'Simple'
"Autor" = 'Devin Cook'
"Versión" = '2.1'
"Acerca de" = 'Esta es una gramática muy simple diseñada para usarse en ejemplos'
"Distingue entre mayúsculas y minúsculas" = Falso
"Símbolo de inicio" = <Declaraciones>
{Cadena Ch 1} = {Imprimible} - ['']
{Cadena Ch 2} = {Imprimible} - ["]
Identificador = {Letra}{Alfanumérico}*
! La cadena permite comillas simples o dobles
StringLiteral = '' {Cadena Ch 1}* ''
| '"' {Cadena Ch 2}* '"'
NúmeroLiteral = {Número}+('.'{Número}+)?
Comentario Inicio = '/*'
Comentario Fin = '*/'
Línea de comentario = '//'
< Declaraciones > ::= < Declaraciones > < Declaración >
| < Declaración >
< Declaración > ::= mostrar < Expresión >
| mostrar < Expresión > leer ID
| asignar ID '=' < Expresión >
| mientras < Expresión > hacer < Declaraciones > fin
| si < Expresión > entonces < Declaraciones > fin
| si < Expresión > entonces < Declaraciones > de lo contrario < Declaraciones > fin
< Expresión > ::= < Expresión > ">' < Agregar Exp >
| < Expresión > '<' < Agregar Exp >
| < Expresión > '<=' < Agregar Exp >
| < Expresión > ">=' < Agregar Exp >
| < Expresión > '==' < Agregar Exp >
| < Expresión > '<>' < Agregar Exp >
| < Agregar Exp >
< Agregar Exp > ::= < Agregar Exp > '+' < Multi Exp >
| < Agregar Exp > '-' < Multi Exp >
| < Agregar Exp > '&' < Multi Exp >
| < Multi Exp >
< Exp. múltiple > ::= < Exp. múltiple > '*' < Negar Exp >
| < Exp. múltiple > '/' < Negar Exp >
| < Negar Exp >
< Negar Exp > ::= '-' < Valor >
| < Valor >
< Valor > ::= Identificador
| Cadena literal
| Número Literal
| '(' < Expresión > ')'
Descripción general del desarrollo

El primer paso consiste en escribir y probar una gramática para el lenguaje que se analiza. La gramática se puede escribir utilizando cualquier editor de texto, como el Bloc de notas o el editor integrado en Builder. En esta etapa, no se requiere codificación.
Una vez que la gramática está completa, el generador la analiza, se construyen las tablas de análisis LALR y DFA y se informan las ambigüedades o los problemas con la gramática. Después, las tablas se guardan en un archivo de tabla de gramática compilada para que un motor de análisis las utilice más adelante. En este punto, el generador de analizadores GOLD ya no es necesario.
En la etapa final, las tablas son leídas por un motor. En este punto, el proceso de desarrollo depende del lenguaje de implementación seleccionado.
Referencias
- ^ "Colaboradores". goldparser.org . Consultado el 28 de agosto de 2017 .
Enlaces externos
- Sitio web oficial
- Grupo GOLD Yahoo en Wayback Machine (archivado el 14 de diciembre de 2020)