Lý thuyết Ngôn ngữ có liên quan đến Lý thuyết Tính toán. Đây là khía cạnh triết học hơn của Khoa học máy tính, về việc quyết định chương trình nào có thể, hoặc chương trình nào sẽ có thể viết được, và loại vấn đề nào không thể viết một thuật toán để giải quyết.
Biểu thức chính quy là một cách mô tả một ngôn ngữ thông thường. Một ngôn ngữ thông thường là một ngôn ngữ có thể được quyết định bởi một tự động hữu hạn xác định.
Bạn nên đọc bài viết về Máy trạng thái hữu hạn: http://en.wikipedia.org/wiki/Finite_state_machine
Và các ngôn ngữ thông thường:
http://en.wikipedia.org/wiki/Regular_language
Tất cả các Ngôn ngữ Thông thường đều là Ngôn ngữ Không có Ngữ cảnh, nhưng có những Ngôn ngữ Không có Ngữ cảnh không phải là Ngôn ngữ Thông thường. Ngôn ngữ không có ngữ cảnh là tập hợp tất cả các chuỗi được chấp nhận bởi Trình xử lý không theo ngữ cảnh hoặc Dữ liệu tự động đẩy xuống là Máy trạng thái hữu hạn với một ngăn xếp: http://en.wikipedia.org/wiki/Pushdown_automaton#PDA_and_Context-free_Languages
Có những ngôn ngữ phức tạp hơn yêu cầu Máy Turing (Bất kỳ chương trình khả thi nào bạn có thể viết trên máy tính của mình) để quyết định xem một chuỗi có phải là ngôn ngữ đó hay không.
Lý thuyết ngôn ngữ cũng rất liên quan đến vấn đề P vs. NP, và một số nội dung thú vị khác.
Cuốn sách nhập môn Khoa học Máy tính năm thứ ba của tôi khá tốt trong việc giải thích điều này: Giới thiệu về Lý thuyết Tính toán. Của Michael Sipser. Nhưng, tôi phải trả khoảng 160 đô la để mua nó mới và nó không lớn lắm. Có thể bạn có thể tìm thấy một bản sao đã sử dụng hoặc tìm một bản sao ở thư viện hoặc một cái gì đó mà nó có thể giúp bạn.
BIÊN TẬP:
Những hạn chế của Biểu thức chính quy và các lớp ngôn ngữ cao hơn đã được nghiên cứu rất nhiều trong hơn 50 năm qua. Bạn có thể quan tâm đến bổ đề bơm cho các ngôn ngữ thông thường. Nó là một phương tiện để chứng minh rằng một ngôn ngữ nhất định không phải là thường xuyên:
http://en.wikipedia.org/wiki/Pumping_lemma_for_regular_languages
Nếu một ngôn ngữ không thông thường, nó có thể là Không có ngữ cảnh, có nghĩa là nó có thể được mô tả bởi Trình phân loại ngữ cảnh miễn phí hoặc thậm chí nó có thể ở một lớp ngôn ngữ cao hơn, bạn có thể chứng minh rằng nó không phải Không có ngữ cảnh bằng bổ đề bơm cho Không có ngữ cảnh ngôn ngữ tương tự như ngôn ngữ dành cho cụm từ thông dụng.
Một ngôn ngữ thậm chí có thể không thể quyết định, có nghĩa là ngay cả một máy Turing (có thể lập trình máy tính của bạn có thể chạy) cũng không thể được lập trình để quyết định xem một chuỗi có được chấp nhận như trong ngôn ngữ hay bị từ chối.
Tôi nghĩ rằng phần bạn quan tâm nhất là Máy trạng thái hữu hạn (Cả xác định và xác định) để xem ngôn ngữ nào mà một Biểu thức chính quy có thể quyết định và bổ đề bơm để chứng minh ngôn ngữ nào không chính quy.
Về cơ bản, một ngôn ngữ không thông thường nếu nó cần một số loại trí nhớ hoặc khả năng đếm. Ví dụ, ngôn ngữ của việc khớp dấu ngoặc đơn không thường xuyên vì máy cần nhớ xem nó đã mở một dấu ngoặc đơn hay chưa để biết liệu nó có phải đóng một dấu ngoặc đơn hay không.
Ngôn ngữ của tất cả các chuỗi sử dụng các chữ cái a và b chứa ít nhất ba chữ b là ngôn ngữ thông thường: a ba ba ba
Ngôn ngữ của tất cả các chuỗi sử dụng các chữ cái a và b chứa nhiều b hơn a là không bình thường.
Ngoài ra, bạn không nên cho rằng tất cả các ngôn ngữ hữu hạn đều là thông thường, ví dụ:
Ngôn ngữ của tất cả các chuỗi dài dưới 50 ký tự sử dụng các ký tự a và b chứa nhiều b hơn a là ngôn ngữ thông thường, vì nó là hữu hạn, chúng ta biết nó có thể được mô tả là (b | abb | bab | bba | aabbb | ababb |. ..) vv cho đến khi tất cả các kết hợp có thể được liệt kê.
Automata Theorem