J'appelle la fonction cl-ppcre:parse-string sur la chaîne de caractères "((?<small>[a-z]*)(?<big>[A-Z]*))"). Son métier est de compiler une expression rationnelle écrite en notation "perl-esque". Le nom vient de PCRE pour Perl-Compatible Regular Expressions, une bibliothèque qui a été liée ou implémentée dans un bon paquet de langages.
est la valeur de retour, c'est donc l'arbre syntaxique qui correspond à l'expression rationnelle. La partie (:CHAR-CLASS (:RANGE #\a #\z)) correspond visiblement à [a-z] et l'opérateur étoile est noté (:GREEDY-REPETITION 0 NIL ...) et ainsi de suite.
La notation :REGISTER signifie juste un symbole ad-hoc – c'est en gros une chaîne de caractère immutable et c'est à peu près la même idée que les const REGISTER = 'REGISTER' qu'on peut lire en Javascript, mais en moins lourdaud. L'intérêt est que deux occurrences de :REGISTER sont toujours physiquement égales, ce qui permet de comparer rapidement les valeurs de ce type.
Dans le problème qui nous occupe, le module Lisp cl-ppcre permet de "lexer" à l'avance son expression rationnelle comme je viens de le montrer, pour ne plus avoir besoin de le faire à l'exécution.
Si on voulait vraiment compiler l'expression rationnelle à la compilation, on pourrait le faire en utilisant eval-when mais c'est un opérateur d'usage légèrement avancé.
[^] # Re: optimisation et propagation de constante
Posté par Michaël (site web personnel) . En réponse à la dépêche OCaml 4.06 et 4.07. Évalué à 2. Dernière modification le 05 octobre 2018 à 20:10.
C'est un petit extrait dans la boucle d'interaction:
J'appelle la fonction
cl-ppcre:parse-stringsur la chaîne de caractères"((?<small>[a-z]*)(?<big>[A-Z]*))"). Son métier est de compiler une expression rationnelle écrite en notation "perl-esque". Le nom vient de PCRE pour Perl-Compatible Regular Expressions, une bibliothèque qui a été liée ou implémentée dans un bon paquet de langages.La partie
est la valeur de retour, c'est donc l'arbre syntaxique qui correspond à l'expression rationnelle. La partie
(:CHAR-CLASS (:RANGE #\a #\z))correspond visiblement à[a-z]et l'opérateur étoile est noté(:GREEDY-REPETITION 0 NIL ...)et ainsi de suite.La notation
:REGISTERsignifie juste un symbolead-hoc– c'est en gros une chaîne de caractère immutable et c'est à peu près la même idée que lesconst REGISTER = 'REGISTER'qu'on peut lire en Javascript, mais en moins lourdaud. L'intérêt est que deux occurrences de:REGISTERsont toujours physiquement égales, ce qui permet de comparer rapidement les valeurs de ce type.Dans le problème qui nous occupe, le module Lisp
cl-ppcrepermet de "lexer" à l'avance son expression rationnelle comme je viens de le montrer, pour ne plus avoir besoin de le faire à l'exécution.Si on voulait vraiment compiler l'expression rationnelle à la compilation, on pourrait le faire en utilisant
eval-whenmais c'est un opérateur d'usage légèrement avancé.