En busca de una definición clara de lo que es un “tokenizer”, “analizador” y “lexers” son y cómo se relacionan entre sí y se utiliza?

StackOverflow https://stackoverflow.com/questions/380455

  •  22-08-2019
  •  | 
  •  

Pregunta

Busco una definición clara de lo que es un "analizador" y "léxico" "tokenizer" son y cómo se relacionan entre sí (por ejemplo, hace uso de un analizador de un señalizador o viceversa)? Necesito crear un programa pasará a través de los archivos de origen / h c para extraer declaración y las definiciones de datos.

He estado buscando ejemplos y puedo encontrar algo de información, pero realmente luchando para comprender los conceptos subyacentes como las reglas gramaticales, analizar árboles y el árbol de sintaxis abstracta y la forma en que se interrelacionan entre sí. Eventualmente, estos conceptos deben ser almacenados en un programa real, pero 1) ¿qué es lo que parecen, 2) hay implementaciones comunes.

He estado buscando en Wikipedia sobre estos temas y programas como Lex y Yacc, pero que nunca había pasado por una clase compilador (EE importante) Me resulta difícil entender completamente lo que está pasando.

¿Fue útil?

Solución

A tokenizer rompe un flujo de texto en tokens, por lo general mediante la búsqueda de espacios en blanco (espacios, tabuladores, nuevas líneas).

Un analizador léxico es básicamente un tokenizer, pero generalmente se adhiere contexto adicional para las fichas -. Esta muestra es un número, que token es una cadena literal, este otro token es un operador de igualdad

Un analizador toma la corriente de tokens de la lexer y lo convierte en un árbol de sintaxis abstracta que representa el programa (por lo general) representado por el texto original.

Que yo sepa, el mejor libro sobre el tema era "Compiladores: Principios, técnicas y Herramientas " por lo general sólo conocen como 'El dragón libro'.

Otros consejos

Ejemplo:

int x = 1;

A lexer o tokenizador se dividirán que hasta en 'int' tokens 'x', '=', '1', ';'.

Un programa de análisis se llevará a esas fichas y utilizarlos para entender de alguna manera:

  • tenemos una declaración
  • que es una definición de un entero
  • el número entero se llama 'x'
  • 'x' debe ser inicializado con el valor 1

Yo diría que un léxico y una tokenizer son básicamente la misma cosa, y que rompen el texto en sus partes componentes (los 'tokens'). El analizador entonces interpreta las fichas utilizando una gramática.

Yo no se obsesione con el uso de la terminología precisa sin embargo - la gente suele utilizar 'análisis' para describir cualquier acción de la interpretación de un trozo de texto

.

( añadir a las respuestas dadas )

  • Tokenizer será también retirar todos aquellos comentarios, y sólo volver fichas a la lexer.
  • lexer será también definir los alcances de esas fichas (variables / funciones)
  • Analizador continuación, va a construir la estructura del código / programa
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top