Sự khác biệt giữa biểu thức chính quy và ngữ pháp trong automata


12

Tôi chưa quen với automata và tôi đã được giới thiệu ngắn gọn về các biểu thức thông thường chỉ ngày hôm qua. Tôi đã đọc các quy tắc khác nhau để xác định một biểu thức chính quy. Nhưng tôi không thể phân biệt giữa các thành ngữ thông thường và ngữ pháp của một ngôn ngữ (tôi chưa được dạy ngữ pháp cho các thành ngữ thông thường).

Tôi hiểu rằng ngữ pháp giúp chúng ta tạo ra các chuỗi hợp lệ trong một ngôn ngữ, nhưng đây là những quy tắc để xác định trạng thái biểu thức chính quy. Vậy sự khác biệt nằm ở đâu? Tôi đã hỏi giáo sư của mình và ông nói rằng regex là các chuỗi cơ bản nhất trong ngôn ngữ và ngữ pháp là tập hợp các quy tắc cho bất kỳ ngôn ngữ nào, có thứ tự cao hơn regex. Ai đó có thể cung cấp một số thông tin sâu hơn?

Câu trả lời:


22

Các biểu thức chính quy, ngữ pháp thông thường và automata hữu hạn chỉ đơn giản là ba hình thức khác nhau cho cùng một thứ. Có các thuật toán để chuyển đổi từ bất kỳ trong số chúng sang bất kỳ khác.

Lý do cơ bản mà chúng ta có cả ba là chúng được tạo ra một cách độc lập, với tập hợp tương đương đầu tiên (cũng có một số hình thức khác) được chứng minh bởi Kleene (kết quả này, hoặc một phần của nó được gọi là Định lý Kleene).

Vì vậy, trong bối cảnh đó, tùy thuộc vào việc bạn muốn chạy các mô hình theo cách nào, tất cả đều nhận ra hoặc tạo ra các chuỗi ngôn ngữ thông thường, và về mặt toán học, theo nghĩa đó, không có sự khác biệt.

Tất nhiên đôi khi một mô hình dễ sử dụng hơn mô hình khác cho một nhiệm vụ cụ thể, do các chi tiết của hình thức. Hơn nữa, cách chúng hoạt động trong đầu của con người thường hơi khác một chút, tự động hữu hạn "cảm giác" giống như máy tính, các biểu thức thông thường "cảm thấy" giống như bạn đang xây dựng một chuỗi từ các chuỗi nhỏ hơn và ngữ pháp thông thường "cảm thấy" giống như một ngữ pháp truyền thống hơn dẫn xuất hoặc phân loại một câu trong một ngôn ngữ (không ngạc nhiên khi bạn nhìn vào lịch sử).

Vì vậy, để so sánh hai, hãy xác định chúng:

Biểu thức chính quy

Vì vậy, các biểu thức chính quy được định nghĩa đệ quy như sau:

  1. là một biểu thức chính quy
  2. là một biểu thức chính quyε
  3. là một biểu hiện thường xuyên cho mỗi một ΣaaΣ
  4. nếu B là biểu thức chính quy thì AB
    • là một biểu thức chính quy (concatentation)AB
    • là một biểu thức chính quy (luân phiên)AB
    • là một biểu thức chính quy (sao Kleene)A

Cùng với một số ngữ nghĩa (nghĩa là cách chúng tôi diễn giải các toán tử để có được một chuỗi), chúng tôi có được cách tạo các chuỗi từ một ngôn ngữ thông thường.

Ngữ pháp thông thường

Ngữ pháp thông thường bao gồm bốn tuple nơi N là tập hợp các phi cảng, Σ là tập hợp các thiết bị đầu cuối, S là sự khởi đầu không cuối và P là tập hợp các tác phẩm đó cho chúng tôi biết cách thay đổi biểu tượng bắt đầu, từng bước một, thành một chuỗi trong Σ . P có thể có các sản phẩm được rút ra từ một trong hai loại (không phải cả hai):(N,Σ,P,SN)NΣSPΣP

Ngữ pháp tuyến tính bên phải

Đối với phi bến , C , thiết bị đầu cuối một và chuỗi rỗng ε , tất cả các quy tắc có dạng:BCaε

  1. Ba
  2. BaC
  3. Bε

Ngữ pháp tuyến tính bên trái

Các ngữ pháp tuyến tính bên trái là như nhau, nhưng quy tắc # 2 là .BCa

Những điều cần suy ngẫm

Vì vậy, nhìn vào các định nghĩa này và chơi với chúng, chúng ta có thể thấy rằng các biểu thức chính quy trông giống như các quy tắc khớp hoặc các cách xử lý chuỗi một chút tại một thời điểm.

Các ngữ pháp dường như "gắn nhãn" các phần của chuỗi và nhãn nhóm dưới nhãn mới để xác thực chuỗi (nghĩa là nếu chúng ta có thể chuyển từ sang chuỗi hoặc ngược lại, chúng tôi rất vui).S

Tuy nhiên những điều này thực sự đang làm điều cơ bản tương tự, và cách bạn xem ẩn dụ về chức năng của chúng thực sự tùy thuộc vào bạn.


Tôi nhấn mạnh hơn vào thực tế là các ngữ pháp tạo ra các chuỗi trong ngôn ngữ, trong khi các biểu thức thông thường (như bạn đã nói) có nhiều mẫu phù hợp với (hoặc "kiểm tra") mọi chuỗi trong ngôn ngữ.
Ran G.

@RanG., Đó thực sự là cách thông thường để nghĩ về nó, nhưng bạn có thể lật cả hai; phân tích cú pháp từ dưới lên kiểm tra một chuỗi đối với một ngữ pháp và bạn có thể sử dụng một biểu thức chính quy như một mô tả nhỏ gọn của một ngôn ngữ (mặc dù điều này có lẽ ít phổ biến hơn).
Luke Mathieson

@simpleBob là tập hợp các nonterminals,N là nonterminal bắt đầu. R sẽlà gì? SR
Luke Mathieson

@LukeMathieson Lỗi của tôi, tôi đọc đoạn văn và nghĩ rằng đó là một lỗi đánh máy với vì thứ tự R được xác định. Bây giờ tôi đã đọc định nghĩa chính thức ở nơi khác, có vẻ như lỗi đánh máy là RNRR nên là (tôi nghĩ) (Dòng thứ hai trong đoạn Ngữ pháp thông thường đầu tiên)P
Daniel

@simpleBob, À đúng rồi, đó chắc chắn là một lỗi đánh máy. Cảm ơn!
Luke Mathieson
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.