106 votes

Quelle est la différence entre un token et un lexème ?

Dans Compiler Construction de Aho Ullman et Sethi, il est indiqué que la chaîne de caractères d'entrée du programme source est divisée en séquences de caractères qui ont une signification logique, et sont connues sous le nom de tokens et lexèmes sont des séquences qui composent le token donc quelle est la différence fondamentale ?

140voto

Guy Coder Points 3526

Utilisation " Compilers Principles, Techniques, & Tools, 2nd Ed. " (WorldCat) par Aho, Lam, Sethi et Ullman, alias les Livre du dragon violet ,

Lexème pg. 111

Un lexème est une séquence de caractères dans le programme source qui correspond au motif d'un token et est identifiée par l'analyseur lexical comme comme une instance de ce token.

Jeton pg. 111

Un jeton est une paire constituée d'un nom de jeton et d'un attribut facultatif valeur. Le nom du jeton est un symbole abstrait représentant un type d'unité lexicale, par exemple un mot clé particulier ou une séquence. unité lexicale, par exemple un mot clé particulier ou une séquence de caractères d'entrée indiquant un identifiant. Les noms de jetons sont les symboles d'entrée que l'analyseur syntaxique traite.

Patronage pg. 111

Un motif est une description de la forme que peuvent prendre les lexèmes d'un token. prendre. Dans le cas d'un mot-clé en tant que token, le pattern est juste le séquence de caractères qui forme le mot-clé. Pour les identificateurs et certains identifiants et certains autres jetons, le motif est une structure plus complexe à laquelle correspondent de nombreuses chaînes de caractères.

Figure 3.2 : Exemples de jetons pg.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"

Pour mieux comprendre cette relation entre un lexer et un analyseur syntaxique, nous allons commencer par l'analyseur syntaxique et remonter jusqu'à l'entrée.

Pour faciliter la conception d'un analyseur syntaxique, ce dernier ne travaille pas directement avec l'entrée, mais reçoit une liste de tokens générée par un lexer. En regardant la colonne des jetons de la figure 3.2, nous voyons des jetons tels que if , else , comparison , id , number y literal ; ce sont des noms de jetons. En général, dans un lexer/analyser, un token est une structure qui contient non seulement le nom du token, mais aussi les caractères/symboles qui le composent et les positions de début et de fin de la chaîne de caractères qui le composent, les positions de début et de fin étant utilisées pour le signalement des erreurs, la mise en évidence, etc.

Le lexeur prend l'entrée des caractères/symboles et, en utilisant les règles du lexeur, convertit les caractères/symboles d'entrée en jetons. Les personnes qui travaillent avec le lexer/parser ont leurs propres mots pour désigner les choses qu'elles utilisent souvent. Ce que vous considérez comme une séquence de caractères/symboles qui composent un token sont ce que les personnes qui utilisent des lexers/parsers appellent des lexèmes. Ainsi, lorsque vous voyez un lexème, pensez simplement à une séquence de caractères/symboles représentant un token. Dans l'exemple de la comparaison, la séquence de caractères/symboles peut être constituée de différents modèles, tels que < o > o else o 3.14 etc.

Une autre façon d'envisager la relation entre les deux est qu'un token est une structure de programmation utilisée par l'analyseur syntaxique qui possède une propriété appelée lexème qui contient les caractères/symboles de l'entrée. Maintenant, si vous regardez la plupart des définitions de token dans le code, vous ne verrez peut-être pas le lexème comme l'une des propriétés du token. En effet, un token contient plus souvent la position de début et de fin des caractères/symboles qui représentent le token et le lexème, la séquence de caractères/symboles peut être dérivée de la position de début et de fin si nécessaire, car l'entrée est statique.

43voto

William Points 580

Lorsqu'un programme source est introduit dans l'analyseur lexical, celui-ci commence par décomposer les caractères en séquences de lexèmes. Les lexèmes sont ensuite utilisés dans la construction des tokens, dans laquelle les lexèmes sont mis en correspondance avec les tokens. Une variable appelée maVar serait mis en correspondance avec un jeton indiquant < id , "num">, où "num" doit indiquer l'emplacement de la variable dans la table des symboles.

En bref :

  • Les lexèmes sont les mots dérivés du flux d'entrée des caractères.
  • Les jetons sont des lexèmes mis en correspondance avec un nom de jeton et une valeur d'attribut.

Par exemple :
x = a + b * 2
Ce qui donne les lexèmes suivants : {x, =, a, +, b, *, 2}
Avec les jetons correspondants : {< id , 0>, <=>, < id , 1>, <+>, < id , 2>, <*>, < id , 3>}

8voto

sravan kumar Points 99

LEXEME - Séquence de caractères correspondant au PATTERN formant le TOKEN

PATTERN - L'ensemble des règles qui définissent un TOKEN

TOKEN - La collection significative de caractères sur le jeu de caractères du langage de programmation ex:ID, Constant, Mots-clés, Opérateurs, Ponctuation, Chaîne littérale

7voto

shasmoe Points 79

A) Les jetons sont des noms symboliques pour les entités qui composent le texte du programme ; par exemple if pour le mot clé if, et id pour tout identifiant. Ils constituent la sortie de l'analyseur lexical. 5

(b) Un motif est une règle qui spécifie quand une séquence de caractères de l'entrée constitue un jeton ; par exemple, la séquence i, f pour le jeton if, et toute séquence de caractères alphanumériques commençant par une lettre pour le jeton id. alphanumérique commençant par une lettre pour le jeton id.

(c) Un lexème est une séquence de caractères de l'entrée qui correspondent à un motif (et donc à constituent une instance d'un token) ; par exemple if correspond au motif de if , et foo123bar correspond au motif de id.

7voto

coding_ninza Points 945

Lexème - Un lexème est une chaîne de caractères qui constitue l'unité syntaxique de plus bas niveau dans le langage de programmation.

Token - Le token est une catégorie syntaxique qui forme une classe de lexèmes et qui indique à quelle classe appartient le lexème, qu'il s'agisse d'un mot-clé, d'un identifiant ou de toute autre chose. L'une des principales tâches de l'analyseur lexical est de créer une paire de lexèmes et de tokens, c'est-à-dire de rassembler tous les caractères.

Prenons un exemple:-

si(y<= t)

y=y-3 ;

Lexème Token

si                                       MOT CLÉ

(                                 PARENTHÈSE GAUCHE

y                                     IDENTIFICATEUR

< =                                 COMPARAISON

t                                     IDENTIFICATEUR

)                                PARENTHÈSE DROITE

y                                    IDENTIFICATEUR

\= ASSIGNEMENT

y                                   IDENTIFICATEUR

_ ARITHMATIQUE

3                                     INTEGER

;                                    SEMICOLON

Relation entre le lexème et le token

Relation between lexeme and token

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X