Uso de " Principios, técnicas y herramientas de los compiladores, 2da edición " (WorldCat) de Aho, Lam, Sethi y Ullman, también conocido como Purple Dragon Book ,
Lexeme pág. 111
Un lexema es una secuencia de caracteres en el programa fuente que coincide con el patrón de un token y el analizador léxico lo identifica como una instancia de ese token.
Token pág. 111
Un token es un par que consta de un nombre de token y un valor de atributo opcional. El nombre del token es un símbolo abstracto que representa una especie de unidad léxica, por ejemplo, una palabra clave en particular o una secuencia de caracteres de entrada que denota un identificador. Los nombres de token son los símbolos de entrada que procesa el analizador.
Patrón pág. 111
Un patrón es una descripción de la forma que pueden tomar los lexemas de una ficha. En el caso de una palabra clave como token, el patrón es solo la secuencia de caracteres que forman la palabra clave. Para los identificadores y algunos otros tokens, el patrón es una estructura más compleja que coincide con muchas cadenas.
Figura 3.2: Ejemplos de tokens pág.112
[Token] [Informal Description] [Sample Lexemes]
if characters i, f if
else characters e, l, s, e else
comparison < or > or <= or >= or == or != <=, !=
id letter followed by letters and digits pi, score, D2
number any numeric constant 3.14159, 0, 6.02e23
literal anything but ", surrounded by "'s "core dumped"
Para comprender mejor esta relación con un lexer y un analizador, comenzaremos con el analizador y trabajaremos hacia atrás hasta la entrada.
Para facilitar el diseño de un analizador, un analizador no funciona con la entrada directamente, sino que toma una lista de tokens generados por un lexer. En cuanto a la columna de contadores en la figura 3.2 vemos fichas tales como if
, else
, comparison
, id
, number
y literal
; estos son nombres de tokens. Normalmente, con un lexer / parser, un token es una estructura que contiene no solo el nombre del token, sino los caracteres / símbolos que componen el token y la posición inicial y final de la cadena de caracteres que componen el token, con la La posición inicial y final se utiliza para informar de errores, resaltar, etc.
Ahora el lexer toma la entrada de caracteres / símbolos y, utilizando las reglas del lexer, convierte los caracteres / símbolos de entrada en tokens. Ahora las personas que trabajan con lexer / parser tienen sus propias palabras para las cosas que usan con frecuencia. Lo que usted piensa como una secuencia de caracteres / símbolos que componen un token es lo que las personas que usan lexer / parsers llaman lexema. Entonces, cuando vea lexema, solo piense en una secuencia de caracteres / símbolos que representan un token. En el ejemplo de comparación, la secuencia de caracteres / símbolos puede tener diferentes patrones como <
o >
o else
o 3.14
, etc.
Otra forma de pensar en la relación entre los dos es que un token es una estructura de programación utilizada por el analizador que tiene una propiedad llamada lexema que contiene los caracteres / símbolos de la entrada. Ahora bien, si observa la mayoría de las definiciones de token en el código, es posible que no vea el lexema como una de las propiedades del token. Esto se debe a que es más probable que un token mantenga la posición inicial y final de los caracteres / símbolos que representan el token y el lexema, la secuencia de caracteres / símbolos puede derivarse de la posición inicial y final según sea necesario porque la entrada es estática.
an individual entry in the lexicon
can you please explain by taking simple input at parser stage and when does parser asks for tokens from lexer.
SO no es un sitio de discusión. Ésta es una pregunta nueva y debe plantearse como una pregunta nueva.Cuando se introduce un programa fuente en el analizador léxico, comienza dividiendo los caracteres en secuencias de lexemas. Los lexemas se utilizan luego en la construcción de tokens, en los que los lexemas se mapean en tokens. Una variable llamada myVar se mapeará en un token que indique < id , "num">, donde "num" debería apuntar a la ubicación de la variable en la tabla de símbolos.
En pocas palabras:
Un ejemplo incluye:
x = a + b * 2
Lo que produce los lexemas: {x, =, a, +, b, *, 2}
Con los tokens correspondientes: {< id , 0>, <=>, < id , 1 >, <+>, < id , 2>, <*>, < id , 3>}
fuente
a) Los tokens son nombres simbólicos de las entidades que componen el texto del programa; por ejemplo, si para la palabra clave si, e id para cualquier identificador. Estos constituyen la salida del analizador léxico. 5
(b) Un patrón es una regla que especifica cuándo una secuencia de caracteres de la entrada constituye un token; por ejemplo, la secuencia i, f para el token if, y cualquier secuencia alfanumérica que comience con una letra para el token id.
(c) Un lexema es una secuencia de caracteres de la entrada que coinciden con un patrón (y por lo tanto constituyen una instancia de un token); por ejemplo, si coincide con el patrón de if, y foo123bar coincide con el patrón de id.
fuente
LEXEME - Secuencia de caracteres emparejados por PATRÓN que forman el TOKEN
PATRÓN : el conjunto de reglas que definen un TOKEN
TOKEN : la colección significativa de caracteres sobre el conjunto de caracteres del lenguaje de programación, por ejemplo: ID, constante, palabras clave, operadores, puntuación, cadena literal
fuente
Lexeme - A lexema es una secuencia de caracteres en el programa de origen que coincida con el patrón para un contador y se identifica por el analizador léxico como una instancia de esa señal.
Token : el token es un par que consta de un nombre de token y un valor de token opcional. El nombre del token es una categoría de una unidad léxica. Los nombres comunes del token son
Considere esta expresión en el lenguaje de programación C:
suma = 3 + 2;
Tokenizado y representado por la siguiente tabla:
fuente
Veamos el funcionamiento de un analizador léxico (también llamado Scanner)
Tomemos una expresión de ejemplo:
aunque no la salida real.
EL ESCÁNER SIMPLEMENTE BUSCA REPETIDAMENTE UN LEXEME EN EL TEXTO DEL PROGRAMA FUENTE HASTA QUE SE AGOTE LA ENTRADA
Lexeme es una subcadena de entrada que forma una cadena de terminales válida presente en la gramática. Cada lexema sigue un patrón que se explica al final (la parte que el lector puede omitir al final)
(La regla importante es buscar el prefijo más largo posible que forme una cadena de terminales válida hasta que se encuentre el siguiente espacio en blanco ... explicado a continuación)
LEXEMES:
TOKENS: Los tokens se devuelven uno a la vez (por el escáner cuando el analizador lo solicita) cada vez que el escáner encuentra un lexema (válido). El escáner crea, si aún no está presente, una entrada de tabla de símbolos (que tiene atributos: principalmente categoría de token y algunos otros) , cuando encuentra un lexema, para generar su token
'#' denota una entrada de tabla de símbolos. He señalado el número de lexema en la lista anterior para facilitar la comprensión, pero técnicamente debería ser un índice real de registro en la tabla de símbolos.
El analizador devuelve los siguientes tokens al analizador en el orden especificado para el ejemplo anterior.
<identificador, n.º 1>
<Operador, n.º 2>
<Literal, n.º 3>
<Operador, n.º 4>
<Literal, n.º 5>
<Operador, n.º 4>
<Literal, n.º 3>
<Puntuacionador, # 6>
Como puede ver la diferencia, un token es un par a diferencia del lexema, que es una subcadena de entrada.
Y el primer elemento del par es la clase / categoría de token
Las clases de tokens se enumeran a continuación:
El número total de tokens devueltos es 8 aquí, sin embargo, solo se hacen 6 entradas de tabla de símbolos para lexemas. Los lexemas también son 8 en total (ver definición de lexema)
--- Puedes saltarte esta parte
fuente
Lexeme : un lexema es una cadena de caracteres que es la unidad sintáctica de nivel más bajo en el lenguaje de programación.
Token : el token es una categoría sintáctica que forma una clase de lexemas, lo que significa a qué clase pertenece el lexema, si es una palabra clave, un identificador o cualquier otra cosa. Una de las principales tareas del analizador léxico es crear un par de lexemas y tokens, es decir, recopilar todos los personajes.
Tomemos un ejemplo:
Token de Lexeme
Relación entre Lexeme y Token
fuente
Token: El tipo de (palabras clave, identificador, carácter de puntuación, operadores de varios caracteres) es, simplemente, un Token.
Patrón: una regla para la formación de fichas a partir de caracteres de entrada.
Lexeme: Es una secuencia de caracteres en el PROGRAMA FUENTE emparejados por un patrón para un token. Básicamente, es un elemento de Token.
fuente
Token: Token es una secuencia de caracteres que se puede tratar como una única entidad lógica. Los tokens típicos son,
1) identificadores
2) palabras clave
3) operadores
4) símbolos especiales
5) constantes
Patrón: un conjunto de cadenas en la entrada para el que se produce el mismo token como salida. Este conjunto de cadenas se describe mediante una regla denominada patrón asociado con el token.
Lexeme: un lexema es una secuencia de caracteres en el programa fuente que coincide con el patrón de un token.
fuente
Lexeme Se dice que los Lexemes son una secuencia de caracteres (alfanuméricos) en una ficha.
Token Un token es una secuencia de caracteres que se puede identificar como una única entidad lógica. Normalmente, los tokens son palabras clave, identificadores, constantes, cadenas, símbolos de puntuación, operadores. números.
Patrón Un conjunto de cadenas descritas por una regla llamada patrón. Un patrón explica qué puede ser un token y estos patrones se definen mediante expresiones regulares, que están asociadas al token.
fuente
A los investigadores de informática, como los de matemáticas, les gusta crear términos "nuevos". Las respuestas anteriores son todas agradables, pero aparentemente, no hay una gran necesidad de distinguir tokens y lexemas en mi humilde opinión. Son como dos formas de representar lo mismo. Un lexema es concreto, aquí un conjunto de char; un token, por otro lado, es abstracto, generalmente se refiere al tipo de lexema junto con su valor semántico, si tiene sentido. Solo mis dos centavos.
fuente
Lexical Analyzer toma una secuencia de caracteres, identifica un lexema que coincide con la expresión regular y lo categoriza aún más como token. Por lo tanto, un Lexeme es una cadena coincidente y un nombre de Token es la categoría de ese lexema.
Por ejemplo, considere la siguiente expresión regular para un identificador con la entrada "int foo, bar;"
letra (letra | dígito | _) *
Aquí,
foo
ybar
coincidir con la expresión regular son ambos lexemas, pero están categorizados como un token,ID
es decir, un identificador.También tenga en cuenta que la siguiente fase, es decir, el analizador de sintaxis, no necesita conocer el lexema sino un token.
fuente
Lexeme es básicamente la unidad de un token y es básicamente una secuencia de caracteres que coincide con el token y ayuda a dividir el código fuente en tokens.
Por ejemplo: Si la fuente es
x=b
, a continuación, los lexemas seríanx
,=
,b
y las fichas serían<id, 0>
,<=>
,<id, 1>
.fuente