-
TRRE: Ekspresi reguler transduktif
-
Ringkasan
- Ini adalah perluasan ekspresi reguler untuk penyuntingan teks dan alat baris perintah yang mirip
grep.
- Karena ini masih prototipe, jangan gunakan di lingkungan produksi.
-
Pengantar
- Ekspresi reguler adalah alat yang berguna untuk mencari pola dalam teks.
- Karena terasa kurang alami untuk penyuntingan teks, sebuah perluasan diusulkan.
- Ini disebut ekspresi reguler transduktif atau
trre.
- Simbol
: digunakan untuk mendefinisikan transformasi.
a:b adalah bentuk paling sederhana yang mengganti a dengan b.
- Sebuah alat baris perintah bernama
trre dibuat untuk mendemonstrasikan konsep ini.
-
Contoh
-
Dasar
- Mengubah
cat menjadi dog:
$ echo 'cat' | trre 'c:da:ot:g'
dog
- Mengganti semua kecocokan string seperti
sed:
$ echo 'Mary had a little lamb.' | trre '(lamb):(cat)'
Mary had a little cat.
- Penghapusan:
$ echo 'xor' | trre '(x:)or'
or
- Penyisipan:
$ echo 'or' | trre '(:x)or'
xor
-
Ekspresi reguler melalui transformasi
-
Transformasi rentang
-
Generator
-
Spesifikasi bahasa
trre didefinisikan sebagai pasangan pattern-matching:pattern-generation.
pattern-matching dapat berupa string atau ekspresi reguler.
pattern-generation biasanya berupa string tetapi juga bisa berupa regex.
-
Mengapa ini bekerja
trre membangun automata khusus yang disebut finite-state transducer (FST).
- FST memproses pasangan input-output.
-
Pilihan desain dan pertanyaan terbuka
- Beberapa keputusan diperlukan terkait asosiativitas
:, prioritas, epsilon implisit, dan lainnya.
-
Mode dan greedy
trre mendukung dua mode:
- Mode scan (default): menerapkan transformasi secara berurutan.
- Mode match: memeriksa seluruh string terhadap ekspresi.
-
Determinisasi
- Proses mengubah automata nondeterministik menjadi automata deterministik itu penting.
-
Kinerja
- Versi NFT (nondeterministik) sedikit lebih lambat daripada
sed.
- Pada tugas yang kompleks,
trre_dft (versi deterministik) bisa memiliki kinerja lebih baik daripada sed.
-
TODO
- Menyelesaikan set fitur ERE, dukungan Unicode penuh, penanganan rentang yang efisien, dan lain-lain.
-
Referensi
- Terinspirasi oleh artikel Russ Cox serta makalah Cyril Allauzen dan Mehryar Mohri.
1 komentar
Komentar Hacker News
Keren, menantikan perkembangan proyek ini
cat:dogditafsirkan sebagaica(t:d)ogalih-alih(cat):(dog)Merekomendasikan XFST (Xerox Finite-State Transducer)
Merekomendasikan Rosie Pattern Language sebagai alternatif regex standar
Membagikan pengalaman menulis makalah tentang finite-state transducer pada 1997
:agar berikatan lebih kuat daripadaabdalam sintaksMerasa ini tidak cukup saat melakukan substitusi terstruktur
Meragukan klaim bahwa regex tidak alami untuk penyuntingan teks
Memuji bahwa kode C-nya sangat rapi
theory.pdfdi README salah dan perlu diperbaikiMeragukan saran untuk tidak menggunakan
*atau+Merasa contoh pertama aneh
echo 'cat' | trre 'c:da:ot:g'terasa janggalMeragukan apakah contoh-contohnya adalah keluaran nyata dari program
echo 'cat dog' | trre 'c:bat|d:hog'terasa aneh