• [^] # Re: optimisation et propagation de constante

    Posté par (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 à 07:01.

    C'est de définir un DSL dont l'écriture d'un simple émulateur permet de le transformer en compilateur.

    Un truc comme en Lisp donc:

    ;; parse tree syntax
    * (cl-ppcre:parse-string "((?<small>[a-z]*)(?<big>[A-Z]*))")
    (:REGISTER
     (:SEQUENCE
     (:NAMED-REGISTER "small"
     (:GREEDY-REPETITION 0 NIL (:CHAR-CLASS (:RANGE #\a #\z))))
     (:NAMED-REGISTER "big"
     (:GREEDY-REPETITION 0 NIL (:CHAR-CLASS (:RANGE #\A #\Z))))))

    Voir http://edicl.github.io/cl-ppcre

    La forme "DSL" de l'expression rationnelle peut être utilisée partout à la place d'une regexp "concrète" en syntax Perl.

    Comme OCaml a de l'évaluation paresseuse (explicite), la manière idoine d'empêcher le programme de compiler toutes ses rexps à l'initialisation est de compiler la regexp au dernier moment.