• [^] # Re: Sources

    Posté par . En réponse au message Datalog. Évalué à 1.

    Les expressions régulières ne font pas de bon parseurs rigoureux ni extensibles (encore que Perl6 fait des choses intéressantes à ce sujet), et ne donnent pas facilement des messages d'erreur pour trouver une erreur de syntaxe.

    Il existe un débogueur d'expressions régulières avec une interface. J'ai vu ça récemment.

    Mais tu as raison, c'est une tannée à déverminer.

    En PHP, je faisais des "méta" expression régulières. J'avais un petit langage style "template" (par exemple, je remplaçais "\b(.*)\b" par "{word}"). J'avais moins d'erreurs comme ça.

    Et même pour les parseurs, au fond la partie analyse lexicale utilise souvent des expressions régulières pour découper en lexèmes (avec lex et équivalents).

    Je fais un lexeur de C++ (réduit) en ce moment.

    La première passe est un "split" de la chaine en "tokens". Je découpe entre les blancs, les virgules, la parenthèses. A la fin, j'ai un tableau de "tokens".

    Dans la deuxième phase, j'essaye de reconnaître des motifs (par exemple, les expressions encadrées par des guillemets, "<>", "[]" ...). J'ai un "curseur" qui sauvegarde la position et la restaure si le motif n'est pas reconnu.

    Je parse des prototypes de fonctions pour faire de la réflection et du "duck typing" en C++ via un préprocesseur "maison".

    Ca me génère des "handlers" pour appeler les fonctions et obtenir leur description. Je fais de la sérialisation et de la comparaison d'objets automatique aussi.