-
TRRE: Dönüşümlü düzenli ifadeler
-
Özet
- Metin düzenleme ve
grep benzeri komut satırı araçları için düzenli ifadelerin bir uzantısıdır.
- Bir prototip olduğu için gerçek ortamlarda kullanılmamalıdır.
-
Giriş
- Düzenli ifadeler, metin içinde desen aramak için kullanışlı araçlardır.
- Metin düzenleme için doğal olmadığı düşünülerek bir uzantı önerilmektedir.
- Buna dönüşümlü düzenli ifadeler ya da
trre denir.
- Dönüşümleri tanımlamak için
: simgesi kullanılır.
a:b, a'yı b ile değiştiren en basit biçimdir.
- Kavramı göstermek için
trre adlı bir komut satırı aracı oluşturulmuştur.
-
Örnekler
-
Temel
cat ifadesini dog olarak değiştir:
$ echo 'cat' | trre 'c:da:ot:g'
dog
sed gibi, bir dizgedeki tüm eşleşmeleri değiştir:
$ echo 'Mary had a little lamb.' | trre '(lamb):(cat)'
Mary had a little cat.
- Silme:
$ echo 'xor' | trre '(x:)or'
or
- Ekleme:
$ echo 'or' | trre '(:x)or'
xor
-
Dönüşüm yoluyla düzenli ifadeler
-
Aralık dönüşümü
-
Üreteç
-
Dil belirtimi
trre, desen-eşleme:desen-üretme çifti olarak tanımlanır.
desen-eşleme bir dizge ya da düzenli ifade olabilir.
desen-üretme genellikle bir dizgedir, ancak regex de olabilir.
-
Neden çalışıyor
trre, sonlu durum dönüştürücüsü (FST) denilen özel bir otomat kurar.
- FST, girdi-çıktı çiftlerini işler.
-
Tasarım seçimleri ve açık sorular
: işlecinin bağlaşıklığı, önceliği, örtük epsilon gibi çeşitli kararlar gereklidir.
-
Modlar ve açgözlülük
trre iki modu destekler:
- Tarama modu (varsayılan): dönüşümleri sırayla uygular.
- Eşleşme modu: ifadenin tüm dizgeyi kapsayıp kapsamadığını denetler.
-
Determinizasyon
- Belirlenimsiz bir otomatı belirlenimli bir otomata dönüştürme süreci önemlidir.
-
Performans
- NFT (belirlenimsiz) sürüm,
sed'den biraz daha yavaştır.
- Karmaşık işlerde
trre_dft (belirlenimli sürüm), sed'den daha iyi performans gösterebilir.
-
TODO
- ERE özellik kümesinin tamamlanması, tam Unicode desteği, verimli aralık işleme vb.
-
Kaynakça
- Russ Cox'un makaleleri ile Cyril Allauzen ve Mehryar Mohri'nin çalışmalarından esinlenilmiştir.
1 yorum
Hacker News yorumu
Güzel, bu projenin gelişimini merakla bekliyorum
cat:dogifadesinin(cat):(dog)yerineca(t:d)ogolarak yorumlanması tuhafXFST'yi (Xerox Finite-State Transducer) öneriyorum
Standart düzenli ifadelere alternatif olarak Rosie Pattern Language öneriliyor
1997'de sonlu durum dönüştürücüleri üzerine bir makale yazma deneyimi paylaşılıyor
:işlecininab'den daha güçlü bağlanacak şekilde ayarlanmasının doğru olup olmadığı soruluyorYapısal ikame yaparken bunun yeterli gelmediğini düşünüyorum
Düzenli ifadelerin metin düzenleme için doğal olmadığı iddiasını sorguluyorum
C kodu çok temiz görünüyor
theory.pdfbağlantısı hatalı, düzeltilmesi gerekiyor*veya+kullanılmaması yönündeki tavsiyeyi sorguluyorumİlk örnek bana tuhaf geldi
echo 'cat' | trre 'c:da:ot:g'çıktısı garip görünüyorÖrneklerin gerçekten program çıktısı olup olmadığını merak ediyorum
echo 'cat dog' | trre 'c:bat|d:hog'çıktısı tuhaf