Trình soạn thảo văn bản

Một phần của tài liệu Ôtômát hữu hạn và ứng dụng (Trang 40 - 41)

Hiển nhiên, các trình soạn thảo văn bản hoặc các chương trình tương tự cho phép thay thế một chuỗi bởi mọi chuỗi kết hợp với một biểu thức chính quy cho trước.

Chẳng hạn, trình soạn thảo văn bản ed trong UNIX cho phép một câu lệnh như sau :/aba*c/ để tìm sự xuất hiện đầu tiên của chuỗi có dạng như trên.

Hay câu lệnh :s/bbb*/b/ cho phép thay thế các chuỗi có dạng bbb* thành chuỗi có một ký tự b.

Hay trong các câu lệnh của MS-DOS và NC, ví dụ câu lệnh :

Del tmp * . ??? sẽ cho phép xóa đi tất cả các file với tên tập tin bắt đầu bằng tmp, sau đó là một chuỗi bắt kỳ và có phần mở rộng là 3 ký tự tùy ý.

Dấu * trong trường hợp này ký hiệu cho một chuỗi bất kỳ, còn dấu ? ký hiệu cho một ký tự tùy ý. Đây cũng là một dạng ký hiệu của biểu thức chính quy thay thế cho chuỗi.

Hay chẳng hạn, một ví dụ về xử lý chuỗi khác được áp dụng cho việc tìm kiếm theo mẫu trên các trang Web.

Trong tất cả các ví dụ trên, ký hiệu * xác định “mọi” biểu thức

a1 + a2 + ... + an trong đó các ai là tất cả các ký tự cho phép trong máy tính trừ ký tự xuống dòng (newline). Ta có thể chuyển một biểu thức chính quy r sang DFA chấp nhận mọi r. Chú ý rằng sự hiện diện của ký hiệu * sẽ cho phép ta nhận dạng một thành phần của L(r) bắt đầu từ bất kỳ vị trí nào trong dòng. Để làm được điều này, các ứng dụng phải thực hiện quá trình chuyển đổi từ một biểu thức chính quy sang NFA. Và vì cơ chế hoạt động của NFA khá phức tạp nên thông thường ngay sau đó, NFA lại phải được biến đổi tiếp thành dạng DFA tương đương. Tuy nhiên, sự chuyển đổi từ một biểu thức chính quy sang DFA tốn nhiều thời gian hơn việc sử dụng DFA để kiểm tra các mẫu bằng cách duyệt qua chúng một lần, tuy DFA có thể có số trạng thái là hàm mũ của độ dài biểu thức chính quy.

Một phần của tài liệu Ôtômát hữu hạn và ứng dụng (Trang 40 - 41)

Tải bản đầy đủ (DOC)

(45 trang)
w