En informática , el análisis sintáctico sin escáner (también llamado análisis sin lexer ) realiza la tokenización (dividiendo un flujo de caracteres en palabras) y el análisis sintáctico (organizando las palabras en frases) en un solo paso, en lugar de dividirlo en una canalización de un lexer seguido de un analizador , que se ejecuta al mismo tiempo . La gramática de un idioma no tiene escáner si utiliza un solo formalismo para expresar tanto la estructura léxica (nivel de palabra) como el nivel de frase del idioma.
Dividir el procesamiento en un lexer seguido de un analizador 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 el analizador y el lexer. Ejemplos de cuándo es apropiado incluyen TeX , la mayoría de las gramáticas wiki , archivos MAKE , 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" no es necesaria, lo que elimina la necesidad de adaptaciones de diseño como " el hack de lexer " y palabras reservadas en el idioma (como "while" en C ).
- Las gramáticas pueden ser de composición (se pueden fusionar sin intervención humana) [1]
Desventajas
- Dado que el escaneo 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 se aplicará a 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 canalización lexer-parser con respecto al tiempo y la memoria . [1]
Implementaciones
- SGLR es un analizador para el formalismo de definición de sintaxis modular SDF , 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 sintáctico tanto sin escáner como basado en 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 sin escáner de dos fases con soporte para mapear las reglas gramaticales en objetos, escritos en Java.
- La función Raku Grammars 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 integradas de analizadores de tokens.
- TREE-META Like META II también no tiene escáner y tiene funciones de lexer 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 devuelven éxito o fracaso.
Notas
- ^ Esto se debe a que el análisis sintáctico a nivel de caracteres hace que el lenguaje reconocido por el analizador sea unlenguajeúnicolibre de contextodefinido en caracteres, en contraposición a un lenguaje libre de contexto de secuencias de cadenas enlenguajes regulares. Algunos analizadores lexerless manejan toda la clase de lenguajes libres de contexto, que está cerrada bajo composición.
Referencias
- ^ Economopoulos, Giorgios; Klint, Paul; Vinju, Jurgen (2009). "Análisis GLR sin escáner más rápido" (PDF) . Construcción del compilador . 5501 : 126-141. doi : 10.1007 / 978-3-642-00722-4_10 .
Otras lecturas
- Visser, E. (agosto de 1997). Análisis de LR generalizado sin escáner . Holanda: Universidad de Amsterdam. CiteSeerX 10.1.1.37.7828 .