s
19 708 Pages

un analyseur lexical, parfois appelé scanner ou lexers, est un programme ou une partie d'un programme (voir compilateurs et analyseur), Qui traite analyser lexicalement une entrée donnée, généralement la code source d'un programme.

La tâche d'un analyseur lexical est d'analyser un flux de caractères en entrée et produire une sortie dans un courant de jeton.

la jeton est un élément qui a un nom, nom symbolique, et une valeur, typiquement le lexème mais il comprend également un ensemble d'informations de base telles que le type de numéro ou le point dans le programme où elle est définie. la jeton constituent les éléments de base sur lesquels va opérer une analyseur.

L'identification des jeton au sein d'un flux de caractères, il est effectué par motif (diagrammes, modèles).

opération

Comme il est écrit avant que l'analyseur lexical détecte jeton à travers le motif défini par la expressions régulières. Prenons par exemple ces modèles:

chiffres = 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0
nombre = chiffres chiffres *
opérateur + = | - | x |

Lorsque le symbole | Il indiqueopérateur logique OU, l'alternative. le symbole *, astérisque, indique que l'élément qui le précède peut être répété zéro ou plusieurs fois.

À partir des modèles ci-dessus, nous avons signalé qu'un nombre peut être 1 ou 2 ou 3 .. et ainsi de suite; un numéro est composé d'au moins un chiffre, et peut être suivi par plus d'un chiffre. Les opérateurs sont classiques des mathématiques.

Si nous cédons entrée de l'analyseur lexical l'expression suivante:

123 + 141/725

Nous attendons la sortie se compose des éléments suivants jeton:

type jeton Lexème (valeur jeton)
nombre 123
opérateur +
nombre 141
opérateur /
nombre 725

Notez comment les espaces blancs sont ignorés.

Pour faire ce travail analyseurs lexicaux sont basés sur une déterministe automate fini, étroitement liée à expressions régulières. Il commence à partir d'un état initial, et nous allons passer dans les autres Etats en fonction du caractère d'entrée jusqu'à ce que vous atteignez un état d'acceptation où vous pouvez envoyer le jeton sortie. Par exemple, notre modèle aurait un robot comme celui-ci:

Analizzatorelessicale1.png

Il commence à partir de l'état initial (1), et selon le caractère entrant, vous pouvez passer à l'état 2 ou 4. Si vous obtenez un chiffre que nous allons passer à la deuxième, et nous rester ici jusqu'à ce que vous obtenez quelque chose d'autre qu'un chiffre, dans ce cas, nous passerons à l'état 3. dans cet état, état d'acquittement, produirait la jeton, dans ce cas, le numéro de type, et la sortie d'envoi. Après la reconnaissance sera de retour à l'état initial toujours avec la même valeur que précédemment.

Dans le cas de notre exemple, 123 + 141/725, Voyage entre les Etats seraient les suivants:

caractère État actuel action
1 1 Aller à l'autre (2)
2 2 Aller à l'autre (2)
3 2 Aller à l'autre (2)
+ 2 Aller à l'autre (3)
+ 3 produire jeton Type et numéro de valeur 123
+ 1 Aller à l'autre (4)
+ 4 produire jeton Type de l'opérateur et la valeur +
1 1 Aller à l'autre (2)
4 2 Aller à l'autre (2)
1 2 Aller à l'autre (2)
/ 2 Aller à l'autre (3)
/ 3 produire jeton Type et numéro de valeur 141

et ainsi de suite ...

Construction d'un analyseur lexical

Un analyseur lexical peut être écrit à la main, mais cela impliquerait une dépense de temps. les programmeurs sont des outils qui aident construction automatisés lexers, tels que Lex. D'autres outils de génération d'analyseurs lexicaux sont intégrés dans générateurs analyseur.

Articles connexes

  • analyse lexicale
  • analyse syntaxique
  • compilateur
  • parsing

Activité wiki récente

Aidez-nous à améliorer BooWiki
Commencez