Implémenter un langage sur Parrot - partie 7: le lexer
Après avoir vu la tokenisation, on continue aujourd’hui l’analyse lexicale avec la production des lexèmes.
Qu’est-ce qu’un lexème ?
Si vous avez le temps, lisez l’article de wikipédia. Sinon voici ma définition pour le domaine qui nous intéresse:
Un lexème (unité lexicale) est un token auquel on attache un type
très basique.
Par exemple, la phrase «Je mange.» donnerait:
mot: Je
mot: mange
ponctuation: .
On pourrait produire un lexer plus intelligent qui donnerait:
mot: Je
verbe: mange
ponctuation: .
Les langages informatiques étant beaucoup moins complexe que les langages humains, écrire un lexer est souvent une formalité.
Objectif
L’objectif d’aujourd’hui est d’obtenir quelque chose comme ça:
Le code
Le code source du projet est sur Github, à la version 0.0.2.
Bien souvent l’étape de tokenisation et de lexification peuvent être
regroupées en une seule et même étape. Là, j’ai choisi de les séparer pour
avoir un code plus simple à montrer. Tout d’abord, voici la classe
lexical_unit
:
J’ai beau chercher, je ne trouve rien à dire d’intelligent sur cette classe. J’avais prévenu: c’est très simple. Et ça continue, on passe maintenant au lexer proprement dit, qui est tout aussi simple:
Voilà, on a fini l’analyse lexicale, c’est à dire la première phase de l’écriture d’un compilateur. La prochaine fois je parlerais de la grammaire de Naam, ce qui enclenchera la phase d’analyse syntaxique.
À demain.