Index

Mes Lexers

J'ai créé trois différents lexers depuis une même base, ils utilisent soit :

Performance

Elle est mesurée et comparée sur deux méthodes :

L'équivalence des résultats des analyses lexicales est comparée afin d'assurer des mesures dans des conditions identiques.

La performance est dépendante de l'objet retourné par la fonction Lexeme.

Caractéristiques

Ils réalisent une analyse à plusieurs niveaux: un arbre lexical est créé et non pas une liste.
L'avantage de cette approche est la simplification des grammaires de l'analyse syntaxique.

Si vous recherchez un lexer retournant une liste de tokens, consultez le site d'Eli Bendersky, il pourra vous être utile :

Observations

Lexer Tokens Portée Vitesse Taille modules Observations
AutomatonLexer AFD 1..n moyenne énormes Plus long token retourné.
MultiRegExpLexer ER 1..1 lente normal Premier token arrivé, premier servi.
  • L'ordre des ER est important.
    1. Première arrivée, première trouvée !
    2. Les ER les plus souvant rencontrés doivent être montée dans les premières position pour une performance optimisée.
OneRegExpLexer ER 1..n rapide normal Plus long token retourné, par défaut.
Puis premier token arrivé, premier servi.
  • Une seule grande ER est créée pour reconnaître tous les tokens.
  • Les défauts:
    1. Quand un mot est trouvé il faut déterminé son type. Pour cela il faut réaliser une boucle!
    2. Quand le token trouvé est incompatible avec le token précédant, il faut réaliser une boucle avec les definitions de chaque token pour trouver un autre résultat.
  • L'ordre des ER est important.
    1. Première arrivée, première trouvée !
    2. Les ER les plus souvant rencontrés doivent être montée dans les premières position pour une performance optimisée.