2011-05-09 22 views
7

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"?

+1

Tenga en cuenta que un "lexer" a veces también se denomina "tokenizer" o "scanner". –

+0

@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. –

+0

:) De nada. –

Respuesta

7

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" 
6

No. Un lexer divide el texto de origen en tokens, mientras que un analizador interpreta la secuencia de tokens de forma adecuada.

8

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 
3

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".

1

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.

Cuestiones relacionadas