En informática , el análisis sintáctico sin escáner (también llamado análisis sin escáner ) realiza la tokenización (dividir una secuencia de caracteres en palabras) y el análisis sintáctico (organizar las palabras en frases) en un solo paso, en lugar de dividirlo en una secuencia de un analizador léxico seguido de un analizador sintáctico , ejecutándose simultáneamente . Una gramática de un lenguaje es sin escáner si utiliza un único formalismo para expresar tanto la estructura léxica (a nivel de palabra) como la estructura sintáctica del lenguaje.
Dividir el procesamiento en un analizador léxico seguido de un analizador sintáctico es más modular; el análisis sintáctico sin escáner se utiliza principalmente cuando no se necesita o no se desea una distinción clara entre analizador léxico y analizador sintáctico. Algunos ejemplos de cuándo esto es apropiado incluyen TeX , la mayoría de las gramáticas wiki , los makefiles , los lenguajes de scripting simples específicos de la aplicación y Raku .
Ventajas
- Solo se necesita un metalenguaje
- La estructura léxica no regular se maneja fácilmente.
- La "clasificación de tokens" es innecesaria, lo que elimina la necesidad de adaptaciones de diseño como " el truco del analizador léxico " y palabras reservadas del lenguaje (como "while" en C ).
- Las gramáticas pueden ser composicionales (pueden fusionarse sin intervención humana) [a]
Desventajas
- Dado que se combinan el análisis léxico y el análisis sintáctico, el analizador resultante tiende a ser más complejo y, por lo tanto, más difícil de comprender y depurar. Lo mismo ocurre con la gramática asociada, si se utiliza una gramática para generar el analizador.
- El analizador resultante tiende a ser significativamente menos eficiente que una secuencia de analizador léxico-analizador en lo que respecta al tiempo y la memoria. [ 1 ]
Implementaciones
- SGLR es un analizador sintáctico para el Formalismo de Definición de Sintaxis (SDF) modular, y forma parte del Meta-Entorno ASF+SDF y del sistema de transformación de programas Stratego/XT .
- JSGLR, una implementación de SGLR en Java puro, también basada en SDF.
- TXL admite el análisis a nivel de caracteres.
- dparser genera código ANSI C para analizadores GLR sin escáner .
- Spirit permite tanto el análisis sin escáner como el análisis con escáner.
- SBP es un analizador sintáctico sin escáner para gramáticas booleanas (un superconjunto de las gramáticas libres de contexto), escrito en Java.
- Laja es un generador de analizadores sintácticos sin escáner de dos fases que permite mapear las reglas gramaticales en objetos, escrito en Java.
- Las gramáticas de Raku son una característica del lenguaje de programación de propósito general Raku .
- PyParsing es un analizador sintáctico sin escáner escrito íntegramente en Python.
- META II tiene funciones de análisis de tokens integradas.
- TREE-META, al igual que META II, también carece de escáner y cuenta con funciones de analizador léxico integradas.
- Compilador CWIC para escribir e implementar compiladores. Su lenguaje incluye reglas de tokens. En CWIC, las reglas se compilaban en funciones booleanas que devolvían éxito o fracaso.
Notas
- Esto se debe a que el análisis sintáctico a nivel de caracteres convierte el lenguaje reconocido por el analizador en un único lenguaje libre de contexto definido sobre caracteres, a diferencia de un lenguaje libre de contexto de secuencias de cadenas en los lenguajes regulares . Algunos analizadores sintácticos sin léxico manejan toda la clase de lenguajes libres de contexto, que es cerrada bajo composición.
Referencias
Lecturas adicionales
- Visser, E. (agosto de 1997). Análisis sintáctico generalizado LR sin escáner . Países Bajos: Universidad de Ámsterdam. CiteSeerX 10.1.1.37.7828 .
- Algoritmos de análisis sintáctico