-
TRRE : expressions régulières de transduction
-
Résumé
- Une extension des expressions régulières pour l’édition de texte et les outils en ligne de commande similaires à
grep.
- Il s’agit d’un prototype, ne pas l’utiliser en production.
-
Introduction
- Les expressions régulières sont des outils utiles pour rechercher des motifs dans le texte.
- Elles semblent peu naturelles pour l’édition de texte, d’où cette proposition d’extension.
- Cela s’appelle expressions régulières de transduction ou
trre.
- Le symbole
: est utilisé pour définir une transformation.
a:b est la forme la plus simple, qui remplace a par b.
- Un outil en ligne de commande appelé
trre a été créé pour démontrer le concept.
-
Exemples
-
Bases
- Remplacer
cat par dog :
$ echo 'cat' | trre 'c:da:ot:g'
dog
- Remplacer toutes les occurrences d’une chaîne, comme avec
sed :
$ echo 'Mary had a little lamb.' | trre '(lamb):(cat)'
Mary had a little cat.
- Suppression :
$ echo 'xor' | trre '(x:)or'
or
- Insertion :
$ echo 'or' | trre '(:x)or'
xor
-
Expressions régulières via transduction
-
Transduction de plages
-
Générateurs
-
Spécification du langage
trre est défini comme une paire motif-de-correspondance:motif-de-génération.
- Le
motif-de-correspondance peut être une chaîne ou une expression régulière.
- Le
motif-de-génération est généralement une chaîne, mais peut aussi être une regex.
-
Pourquoi cela fonctionne
trre construit un automate spécial appelé transducteur à états finis (FST).
- Les FST traitent des paires entrée-sortie.
-
Choix de conception et questions ouvertes
- Plusieurs décisions sont nécessaires concernant l’associativité de
:, la priorité, l’epsilon implicite, etc.
-
Modes et avidité
trre prend en charge deux modes :
- Mode scan (par défaut) : applique les transformations séquentiellement.
- Mode match : vérifie la chaîne complète par rapport à l’expression.
-
Déterminisation
- Le processus de conversion d’un automate non déterministe en automate déterministe est important.
-
Performances
- La version NFT (non déterministe) est légèrement plus lente que
sed.
- Pour des tâches complexes,
trre_dft (la version déterministe) peut être plus performante que sed.
-
TODO
- Compléter l’ensemble de fonctionnalités ERE, prise en charge complète d’Unicode, gestion efficace des plages, etc.
-
Références
- Inspiré par les articles de Russ Cox et les travaux de Cyril Allauzen et Mehryar Mohri.
1 commentaires
Commentaires Hacker News
Cool, j’ai hâte de voir l’évolution de ce projet
cat:dogsoit interprété commeca(t:d)ogplutôt que(cat):(dog)Recommande XFST (Xerox Finite-State Transducer)
Recommande Rosie Pattern Language comme alternative aux expressions régulières standard
Partage son expérience d’avoir écrit un article sur les transducteurs à états finis en 1997
:se lie plus fortement queabTrouve cela insuffisant pour effectuer des substitutions structurées
Met en doute l’affirmation selon laquelle les expressions régulières seraient peu naturelles pour l’édition de texte
Complimente la grande propreté du code C
theory.pdfdans le README est erroné et doit être corrigéS’interroge sur le conseil de ne pas utiliser
*ni+Trouve le premier exemple étrange
echo 'cat' | trre 'c:da:ot:g'est bizarreSe demande si les exemples sont bien des sorties réelles du programme
echo 'cat dog' | trre 'c:bat|d:hog'paraît étrange