El título es la pregunta: ¿Son las palabras "lexer" y "parser" sinónimos, o son diferentes? Parece que Wikipedia usa las palabras indistintamente, pero el inglés no es mi lengua materna, así que no estoy seguro.¿La palabra "lexer" es un sinónimo de la palabra "analizador"?
Respuesta
No. Lexer divide el flujo de entrada en "palabras"; el analizador descubre la estructura sintáctica entre tales "palabras". Por ejemplo, entrada dada:
velocity = path/time;
salida lexer es:
velocity (identifier)
= (assignment operator)
path (identifier)
/(binary operator)
time (identifier)
; (statement separator)
y luego el analizador puede establecer la siguiente estructura:
= (assign)
lvalue: velocity
rvalue: result of
/(division)
dividend: contents of variable "path"
divisor: contents of variable "time"
No. Un lexer divide el texto de origen en tokens, mientras que un analizador interpreta la secuencia de tokens de forma adecuada.
A lexer se utiliza para dividir la entrada hasta en tokens, mientras que un analizador se usa para construir un árbol sintáctico abstracto a partir de esa secuencia de tokens.
Ahora, podría decir que los tokens son simplemente caracteres y usan un analizador directamente, pero a menudo es conveniente tener un analizador que solo necesita anticipar un token para determinar lo que va a hacer a continuación. Por lo tanto, un lexer se usa generalmente para dividir la entrada en tokens antes de que el analizador lo vea.
Un lexer generalmente se describe utilizando reglas simples de expresión regular que se prueban en orden. Existen herramientas como lex
que pueden generar lexers automáticamente a partir de dicha descripción.
[0-9]+ Number
[A-Z]+ Identifier
+ Plus
Un analizador, por otro lado, se describe típicamente mediante la especificación de un gramática. De nuevo, existen herramientas como yacc
que pueden generar analizadores a partir de dicha descripción.
expr ::= expr Plus expr
| Number
| Identifier
Son diferentes.
Un lexer toma una secuencia de caracteres de entrada como entrada y produce tokens (también llamados "lexemas") como salida.
Un analizador toma tokens (lexemas) como entrada y produce (por ejemplo) un árbol de sintaxis abstracta que representa instrucciones.
Los dos son lo suficientemente parecidos, sin embargo, que bastantes personas (especialmente aquellos que nunca han escrito nada como un compilador o intérprete) los tratan igual, o (más a menudo) usan "analizador" cuando lo que realmente significa es "lexer".
Por lo que yo sé, lexer y el analizador se alían en el significado, pero no son sinónimos exactos. Aunque muchas fuentes los usan de forma similar, un lexer (abreviatura de analizador léxico) identifica los tokens relevantes para el idioma a partir de la entrada; mientras que los analizadores determinan si un flujo de tokens cumple con la gramática del lenguaje bajo consideración.
- 1. fetch sinónimo de una palabra
- 2. Buscar sinónimo y raíz de una palabra en java
- 3. encontrar la palabra raíz de una palabra
- 4. Herramientas Lexer/analizador
- 5. ¿Qué es un DOCVARIABLE en la palabra
- 6. ¿Cuál es la diferencia entre "palabra clave" y "palabra reservada"?
- 7. F # - ¿Qué es la palabra clave "eso"?
- 8. ¿Cuál es la palabra para "habilitar/deshabilitar"?
- 9. ¿Cuándo es necesaria la palabra clave "typename"?
- 10. ¿Es realmente necesaria la palabra clave extern?
- 11. F #: ¿Es necesaria la palabra clave "divertida"?
- 12. Al tomar la palabra de un flotador
- 13. Obtener la última palabra de un NSString
- 14. Origen de la palabra Refactorización
- 15. ¿Es posible tener una gramática en la que una "palabra clave" también se pueda tratar como "no palabra clave"?
- 16. ¿Dónde debería trazar la línea entre lexer y el analizador?
- 17. Cómo comparar la palabra pronunciar?
- 18. Zend con la palabra "hipoteca"
- 19. ¿Qué significa la palabra "literal"?
- 20. Seleccionar la última palabra en un contenedor
- 21. ¿La palabra clave let de linq es mejor que su palabra clave?
- 22. TinyMCE - Pegando desde la palabra
- 23. ¿Cómo hacer la palabra directa, la palabra hacia atrás, tratar el subrayado como parte de una palabra?
- 24. Controlando Python PLY estados lexer del analizador
- 25. VBA para la palabra MS
- 26. Javascript encontrar el índice de la palabra en una cadena (no parte de la palabra)
- 27. Cómo construir eficientemente un intérprete (lexer + analizador) en C?
- 28. Regex encuentra la palabra en la cadena
- 29. Reemplazar la última palabra en la cadena
- 30. Elasticsearch con el analizador de bola de nieve sólo devuelve resultados de la palabra de tallo
Tenga en cuenta que un "lexer" a veces también se denomina "tokenizer" o "scanner". –
@Bart gracias, accidentalmente he escrito mal la pregunta. Quise decir "Is lexer es un sinónimo de tokenizer", por lo que su comentario es en realidad la respuesta. Gracias. –
:) De nada. –