Quelle est la différence entre un jeton et un lexeme?
Dans le Compilateur de la Construction par Aho Ullman et Sethi, c'est une donnée que l'entrée de chaîne de caractères de la source de programme sont divisés en une séquence de caractères qui ont une logique du sens, et sont connus comme les jetons et les lexèmes sont des séquences qui composent le jeton alors, quelle est la différence fondamentale?
Vous devez vous connecter pour publier un commentaire.
À l'aide de "Les compilateurs des Principes, des Techniques, & Outils, 2e Ed." (WorldCat) par Aho, Lam, Sethi et Ullman, ALIAS le Livre Mauve,
Lexeme pg. 111
Jeton pg. 111
Modèle pg. 111
Figure 3.2: Examplesof jetons pg.112
Pour mieux comprendre cette relation à un analyseur lexical et l'analyseur, nous allons commencer avec l'analyseur et travailler à rebours pour l'entrée.
Pour le rendre plus facile à concevoir un analyseur, un analyseur ne fonctionne pas avec l'entrée directement, mais une liste de jetons générés par un analyseur lexical. Regarder le pion de la colonne dans la Figure 3.2, nous voyons les jetons tels que
if
,else
,comparison
,id
,number
etliteral
; ce sont des noms de jetons. Généralement avec un lexer/parser un jeton est une structure qui contient non seulement le nom de la marque, mais les caractères/symboles qui composent le jeton et le début et la fin de la chaîne de caractères qui composent le jeton, avec les dates de début et de fin de poste utilisé pour les rapports d'erreurs, en mettant en évidence, etc.Maintenant le lexer prend l'entrée de caractères/symboles et en utilisant les règles de l'analyseur lexical convertit l'entrée des caractères/symboles en jetons. Maintenant, les gens qui travaillent avec lexer/parser ont leurs propres mots pour des choses qu'ils utilisent souvent. Ce que vous considérez comme une séquence de caractères/symboles qui composent un jeton sont ce que les gens qui utilisent lexer/analyseurs appel lexeme. Alors, quand vous voyez lexeme, il suffit de penser d'une séquence de caractères/symboles représentant un jeton. Dans la comparaison exemple, la séquence de caractères/symboles peuvent être différents modèles tels que
<
ou>
ouelse
ou3.14
, etc.Une autre façon de penser la relation entre les deux est qu'un jeton est une structure de programmation utilisé par l'analyseur qui a une propriété appelée lexeme qui contient les caractères/symboles de l'entrée. Maintenant, si vous regardez la plupart des définitions de jeton dans le code, vous ne pouvez pas voir le lexeme comme l'une des propriétés du jeton. C'est parce qu'un jeton seront plus susceptibles de détenir le début et la fin de la position des caractères/symboles qui représentent le jeton et le lexeme, la séquence de caractères/symboles peuvent être dérivées à partir de début et de fin de poste en tant que de besoin, car l'entrée est statique.
an individual entry in the lexicon
Lorsqu'un programme source est introduit dans l'analyseur lexical, il commence par se disloquer les personnages dans des séquences de lexèmes. Les lexèmes sont ensuite utilisés dans la construction de jetons, dans lequel les lexèmes sont mappés en jetons. Une variable appelée mavar sera mappé à un jeton indiquant <id, "num">, où "num" doit pointer vers la variable dans la table des symboles.
Peu de temps de mettre:
Un exemple:
x = a + b * 2
Qui donne les lexèmes: {x, =, a, +, b, *, 2}
Avec pions: {<id, 0>, <=>, <id 1>, <+>, <id, 2>, <*>, <id, 3>}
a) les Jetons sont des noms symboliques pour les entités qui composent le texte du programme;
par exemple, si le mot-clé si et id d'un identificateur. Ceux-ci composent la sortie de
l'analyseur lexical.
5
(b) Un modèle est une règle qui indique quand une séquence de caractères à partir de l'entrée
constitue un jeton; e.g la séquence i, f pour le jeton si , et toute séquence de
caractères alphanumériques commençant par une lettre de l'id de jeton.
(c) Un lexeme est une séquence de caractères à partir de l'entrée qui correspondent à un modèle (et donc
constituer une instance d'un jeton); par exemple, si correspond au modèle pour les si , et
foo123bar correspond au modèle une pièce d'identité.
LEXEME - Séquence de caractères correspond PATTERN formant le JETON
MODÈLE - L'ensemble de règles qui définissent un JETON
JETON - l'importance de La collection de personnages sur le jeu de caractères de la langue de programmation ex:ID, Constant, mots-clés, Opérateurs, la Ponctuation, la Chaîne Littérale
Jeton: Le genre de (mots-clés,de l'identificateur de caractère de ponctuation, caractères multi-opérateurs) est ,tout simplement, d'un Jeton.
Motif: Une règle pour la formation de jeton de caractères d'entrée.
Lexeme : c'est une séquence de caractères dans le PROGRAMME SOURCE compensée par un motif d'un pion.
En gros, c'est un élément de Jeton.
Jeton: Jeton est une séquence de caractères qui peuvent être traités comme une seule entité logique. Typique des jetons,
1) les Identificateurs
2) les mots-clés
3) les opérateurs
4) par des symboles spéciaux
5)les constantes
Modèle: Un ensemble de chaînes dans l'entrée pour laquelle le même jeton est produite. Ce jeu de cordes est décrit par une règle appelée un modèle lié avec le jeton.
Lexeme: Un lexeme est une séquence de caractères dans le programme source qui est compensée par le modèle pour un jeton.
Nous allons voir le fonctionnement d'un analyseur lexical ( également appelé Scanner )
Prenons un exemple d'expression :
pas la sortie réelle cependant .
SCANNER A TOUT SIMPLEMENT L'AIR À PLUSIEURS REPRISES POUR UN LEXEME DANS LA SOURCE-TEXTE DE PROGRAMME JUSQU'À CE QUE L'ENTRÉE EST ÉPUISÉ
Lexeme est une sous-chaîne d'entrée qui forme une chaîne valide-de-terminaux présents dans la grammaire . Chaque lexeme suit un modèle qui est expliqué à la fin ( la partie que le lecteur peut sauter au dernier )
( Règle importante est de regarder pour la plus longue possible préfixe formant une chaîne valide-de-terminaux jusqu'à la prochaine les espaces sont rencontrés ... expliqué ci-dessous )
LEXÈMES :
Des JETONS : les Jetons sont retournés à l'unité ( par Scanner lorsqu'il est demandé par l'Analyseur ) chaque fois que le Scanner détecte un (valide) lexeme. Scanner crée ,si ce n'est déjà l'heure actuelle, un symbole de l'entrée de table de ( ayant les attributs : principalement jeton-catégorie et quelques autres ) , quand il trouve un lexeme, afin de générer du jeton
'#' indique un symbole de l'entrée de la table . J'ai signalé lexeme numéro dans la liste ci-dessus pour la facilité de compréhension, mais techniquement il doit être réelle de l'indice de l'enregistrement dans la table des symboles.
Les marques suivantes sont renvoyées par le scanner à l'analyseur dans l'ordre spécifié pour l'exemple ci-dessus.
< identifiant , n ° 1 >
< Opérateur , #2 >
< Littérales , n ° 3 >
< Opérateur , #4 >
< Littérales , n ° 5 >
< Opérateur , #4 >
< Littérales , n ° 3 >
< Punctuator , #6 >
Comme vous pouvez le voir la différence , un jeton est une paire, contrairement à lexeme qui est une sous-chaîne d'entrée.
Et du premier élément de la paire est le jeton de classe/catégorie
Jeton de Classes sont énumérés ci-dessous:
Nombre Total de jetons sont retournés 8 ici , cependant, seulement 6 table des symboles les entrées sont faites pour les lexèmes . Lexèmes sont également 8 au total ( voir la définition de lexeme )
--- Vous pouvez sauter cette partie
Lexeme - Un lexeme est une séquence de caractères dans le programme source qui correspond à la forme d'un jeton et est identifié par l'analyseur lexical comme une instance de ce jeton.
Jeton - Token est une paire composée d'un jeton de nom et éventuellement une valeur symbolique. Le jeton est un nom de la catégorie d'une unité lexicale.Commune jeton noms sont
Considérer cette expression dans le langage de programmation C:
somme = 3 + 2;
Segmentées et représenté par le tableau suivant:
Lexeme- Un lexeme est une chaîne de caractère qui est le plus bas niveau de l'unité syntaxique du langage de programmation.
Jeton- Le jeton est une catégorie syntaxique qui forme une classe de lexèmes qui signifie que la classe à laquelle l'lexeme appartiennent, c'est un mot clé ou d'un identificateur ou quoi que ce soit d'autre. L'une des principales tâches de l'analyseur lexical est pour créer une paire de lexèmes et les jetons, c'est-à recueillir tous les personnages.
Prenons un exemple:-
Lexeme Jeton
Relation entre Lexeme et un Jeton
Lexeme Lexèmes sont dit être une séquence de caractères (alphanumériques) dans un jeton.
Jeton Un jeton est une séquence de caractères qui peuvent être identifiés comme une seule entité logique . Généralement, les jetons sont des mots-clés, les identificateurs, les constantes, les chaînes, les symboles de ponctuation, les opérateurs. les numéros.
Modèle Un ensemble de chaînes décrit par la règle appelle le motif. Un modèle explique ce que peut être un jeton et ces modèles sont définis par des expressions régulières, qui sont associés avec le jeton.
Analyseur Lexical prend une séquence de caractères identifie un lexeme qui correspond à l'expression régulière et la plus classe de jeton.
Ainsi, un Lexeme est en correspondance de chaîne et un nom de Jeton est la catégorie de ce lexeme.
Considérons, par exemple, en dessous d'une expression régulière pour un identificateur d'entrée "int foo, bar;"
lettre(lettre|chiffre|_)*
Ici,
foo
etbar
correspondent à l'expression régulière sont donc les deux lexèmes, mais sont classés comme un jetonID
je.e identificateur.Noter également, à côté de la phase i.e de la syntaxe de l'analyseur n'a pas besoin d'avoir à connaître à propos de lexeme mais un jeton.
Lexeme est fondamentalement l'unité d'un jeton, et il est essentiellement séquence de caractères qui correspond le jeton et contribue à briser le code source en jetons.
Par exemple: Si la source est
x=b
, puis les lexèmes seraitx
,=
,b
et les jetons serait<id, 0>
,<=>
,<id, 1>
.