-
TRRE: Biểu thức chính quy chuyển đổi
-
Tóm tắt
- Đây là một phần mở rộng của biểu thức chính quy dành cho chỉnh sửa văn bản và các công cụ dòng lệnh tương tự
grep.
- Đây là bản nguyên mẫu, không nên dùng trong môi trường thực tế.
-
Giới thiệu
- Biểu thức chính quy là công cụ hữu ích để tìm kiếm mẫu trong văn bản.
- Tác giả cảm thấy chúng không thật sự tự nhiên cho việc chỉnh sửa văn bản nên đã đề xuất một phần mở rộng.
- Tên gọi của nó là biểu thức chính quy chuyển đổi hoặc
trre.
- Nó dùng ký hiệu
: để định nghĩa phép biến đổi.
a:b là dạng đơn giản nhất, thay a bằng b.
- Tác giả đã tạo một công cụ dòng lệnh tên
trre để minh họa ý tưởng này.
-
Ví dụ
-
Cơ bản
- Đổi
cat thành dog:
$ echo 'cat' | trre 'c:da:ot:g'
dog
- Thay mọi chuỗi khớp trong văn bản như
sed:
$ echo 'Mary had a little lamb.' | trre '(lamb):(cat)'
Mary had a little cat.
- Xóa:
$ echo 'xor' | trre '(x:)or'
or
- Chèn:
$ echo 'or' | trre '(:x)or'
xor
-
Biểu thức chính quy thông qua phép chuyển đổi
-
Chuyển đổi theo khoảng
-
Bộ sinh
-
Đặc tả ngôn ngữ
trre được định nghĩa dưới dạng cặp mẫu-khớp:mẫu-sinh.
mẫu-khớp có thể là chuỗi hoặc biểu thức chính quy.
mẫu-sinh thường là chuỗi, nhưng cũng có thể là regex.
-
Vì sao nó hoạt động
trre xây dựng một dạng automata đặc biệt gọi là bộ chuyển đổi trạng thái hữu hạn (FST).
- FST xử lý các cặp đầu vào-đầu ra.
-
Lựa chọn thiết kế và các câu hỏi còn mở
- Cần đưa ra nhiều quyết định như tính kết hợp của
:, độ ưu tiên, epsilon ngầm định, v.v.
-
Chế độ và tính tham lam
trre hỗ trợ hai chế độ:
- Chế độ quét (mặc định): áp dụng các phép chuyển đổi theo trình tự.
- Chế độ khớp: kiểm tra toàn bộ chuỗi theo biểu thức.
-
Xác định hóa
- Quá trình chuyển automata không xác định sang automata xác định là rất quan trọng.
-
Hiệu năng
- Phiên bản NFT (không xác định) chậm hơn
sed một chút.
- Với các tác vụ phức tạp,
trre_dft (phiên bản xác định) có thể cho hiệu năng tốt hơn sed.
-
TODO
- Hoàn thiện bộ tính năng ERE, hỗ trợ Unicode đầy đủ, xử lý khoảng hiệu quả hơn, v.v.
-
Tài liệu tham khảo
- Lấy cảm hứng từ các bài viết của Russ Cox và các bài báo của Cyril Allauzen, Mehryar Mohri.
1 bình luận
Bình luận trên Hacker News
Hay đấy, mong chờ dự án này phát triển
cat:dogđược diễn giải thànhca(t:d)ogthay vì(cat):(dog)nghe có vẻ kỳ lạĐề xuất XFST (Xerox Finite-State Transducer)
Đề xuất Rosie Pattern Language như một lựa chọn thay thế cho biểu thức chính quy tiêu chuẩn
Chia sẻ kinh nghiệm từng viết bài báo về bộ chuyển đổi trạng thái hữu hạn vào năm 1997
:liên kết mạnh hơnabhay khôngCảm thấy chưa đủ khi thực hiện thay thế có cấu trúc
Hoài nghi về nhận định rằng biểu thức chính quy là không tự nhiên đối với việc chỉnh sửa văn bản
Khen mã C rất gọn gàng
theory.pdftrong README bị sai và cần được sửaHoài nghi về lời khuyên không nên dùng
*hay+Cảm thấy ví dụ đầu tiên khá kỳ lạ
echo 'cat' | trre 'c:da:ot:g'trông khó hiểuHoài nghi liệu các ví dụ có phải là đầu ra thực của chương trình hay không
echo 'cat dog' | trre 'c:bat|d:hog'trông kỳ lạ