En informática , el análisis sin escáner (también llamado análisis sin analizador léxico ) realiza la tokenización (dividir un flujo 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 , que se ejecutan simultáneamente . Una gramática de lenguaje no utiliza escáner si utiliza un único formalismo para expresar tanto la estructura léxica (nivel de palabra) como la estructura a nivel de frase del lenguaje.
La división del procesamiento en un analizador léxico seguido de un analizador sintáctico es más modular; el análisis 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 casos en los que esto es apropiado incluyen TeX , la mayoría de las gramáticas wiki , makefiles , lenguajes de programación simples específicos de la aplicación y Raku .
Ventajas
- Sólo se necesita un metalenguaje
- La estructura léxica no regular se maneja fácilmente
- La "clasificación de tokens" no es necesaria, lo que elimina la necesidad de modificaciones de diseño como " el truco del analizador léxico " y palabras reservadas del lenguaje (como "while" en C ).
- Las gramáticas pueden ser compositivas (se pueden fusionar sin intervención humana) [a]
Desventajas
- Dado que el análisis léxico y el análisis sintáctico se combinan, el analizador resultante tiende a ser más complicado y, por lo tanto, más difícil de entender y depurar. Lo mismo sucederá 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 con respecto tanto al tiempo como a la memoria. [1]
Implementaciones
- SGLR es un analizador para el Formalismo de Definición de Sintaxis (SDF) modular, y es parte del Metaentorno ASF+SDF y del sistema de transformación de programas Stratego/XT.
- JSGLR, una implementación Java pura de SGLR, 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 el análisis tanto con escáner como sin escáner.
- SBP es un analizador sin escáner para gramáticas booleanas (un superconjunto de gramáticas libres de contexto), escrito en Java.
- Laja es un generador de analizador sintáctico de dos fases sin escáner con soporte para mapear las reglas gramaticales en objetos, escrito en Java.
- Las gramáticas Raku son una característica del lenguaje de programación de propósito general Raku .
- PyParsing es un analizador sin escáner escrito en Python puro.
- META II tiene funciones de análisis de tokens incorporadas.
- TREE-META, al igual que META II, tampoco tiene escáner y cuenta con funciones de análisis léxico integradas.
- Compilador CWIC para escribir e implementar compiladores. Tiene reglas de token como parte de su lenguaje. Las reglas en CWIC se compilaron en funciones booleanas que devolvían éxito o fracaso.
Notas
- a Esto se debe a que el análisis a nivel de caracteres hace que el lenguaje reconocido por el analizador sea un único lenguaje libre de contexto definido sobre caracteres, a diferencia de un lenguaje libre de contexto de secuencias de cadenas en lenguajes regulares . Algunos analizadores sin analizador léxico manejan toda la clase de lenguajes libres de contexto, que está cerrada bajo la composición.
Referencias
Lectura adicional
- Visser, E. (agosto de 1997). Análisis LR generalizado sin escáner . Países Bajos: Universidad de Ámsterdam. CiteSeerX 10.1.1.37.7828 .