davidkuhner/regex

The Hoathis\Regex library.


License
BSD-3-Clause

Documentation

Visualiser un compilateur

Les compilateurs sont des outils formidables qui rendent beaucoup de services. Toutefois, il peut vite devenir difficile de visualiser les donn√©es qu'ils manipulent en entr√©e ou en sortie. L'objectif de ce sujet est double¬†: dans un premier temps, nous proposons de r√©aliser une repr√©sentation graphique d'une expression r√©guli√®re, puis dans un second temps, optionnellement, d'√©tendre les comp√©tences fra√ģchement acquises pour r√©aliser une repr√©sentation graphique d'une grammaire alg√©brique.

Utilisation

Si Hoa est installé dans /usr/local/lib/Hoa, les Hoathis doivent être installées au même niveau, c'est à dire dans /usr/local/lib/Hoathis. Cette bibliothèque est une Hoathis de Hoa\Regex. Voici comment l'installer facilement (sans passer par Composer) :

$ git clone http://git.hoa-project.net/Central.git \
            /usr/local/lib/Hoa.central
$ ln -s /usr/local/lib/Hoa.central/Hoa \
        /usr/local/lib/Hoa
$ ln -s /usr/local/lib/Hoa.central/Hoathis \
        /usr/local/lib/Hoathis
$ git clone https://github.com/davidkuhner/compiler-visualization \
            /usr/local/lib/Hoathis/Regex

Placer le script hoa (dans /usr/local/lib/Hoa/Core/Bin/) dans $PATH. Ensuite, nous pourrons utiliser hoa compiler:pp. Cette commande prend une grammaire et une donnée en entrée, et analyse cette donnée par rapport à cette grammaire. Elle produit un AST, et nous sommes ensuite capable d'y appliquer un visiteur à l'aide des options --visitor dump ou --visitor-class …. Pour rappel, voici le schéma du processus.

À partir d'une grammaire et d'une regex (notre donnée), le compilateur nous produit un AST. Nous appliquons un visiteur sur cet AST pour nous produire du (le transformer en) SVG. Ainsi :

                                 +---------+
+-----------+                    | visitor |
| grammaire |---------+          +---------+
+-----------+         |               |
                      v               v
  +-------+      +----------+      +-----+
  | regex | ---> | compiler | ---> | AST |
  +-------+      +----------+      +-----+
                                      |
                                      v
                                  +-------+
                                  | <svg> |
                                  +-------+

Premier exemple, nous allons dumper l'AST :

$ echo '[a-z]+' | \
      hoa compiler:pp --visitor dump hoa://Library/Regex/Grammar.pp 0
>  #expression
>  >  #quantification
>  >  >  #class
>  >  >  >  #range
>  >  >  >  >  token(literal, a)
>  >  >  >  >  token(literal, z)
>  >  >  token(one_or_more, +)

Et maintenant, nous appliquons notre propre visiteur Hoathis\Regex\Visitor\Visualization :

$ echo '[a-z]+' | \
      hoa compiler:pp \
          --visitor-class Hoathis.Regex.Visitor.Visualization \
          hoa://Library/Regex/Grammar.pp \
          0

À toi de jouer !