Một cách tiếp cận thực tế mà trong nhiều ví dụ hoạt động [nhưng không phải lúc nào cũng vậy, tôi biết] đang cố gắng tìm cấu trúc lồng nhau của các chuỗi trong ngôn ngữ. "Các phụ thuộc lồng nhau" phải được tạo ra cùng một lúc trong các phần khác nhau của chuỗi.
Ngoài ra chúng tôi có hộp công cụ cơ bản :
ghép nối: S→S1S2 nếu bạn có thể chia ngôn ngữ thành hai phần liên tiếp sử dụng sản phẩm này
liên kết: S→S1∣S2 chia thành các phần rời rạc
lặp: S→S1S∣ε
ví dụ 1
Dưới đây là một ví dụ cho việc làm tổ (cảm ơn Raphael).
L={bkal(bc)manbo∣k,l,m,n,o∈N,k≠o,2l=n,m≥2}
Thay n bằng 2l . Bây giờ chúng ta có thể thả n trong điều kiện.
Thay k≠o bằng k>o or k<o (nhầm lẫn? o là 'oh' chứ không phải 'zero'). Áp dụng các công cụ cho công đoàn. Chúng tôi làm việc với k>o ở đây. Ngoài ra k>o iff k=s+o và s>0 trong đó s là một biến mới. Thay k bằng s+o .
L1={bs+oal(bc)ma2lbo∣l,m,o,s∈N,s>0,m≥2}
Một số cách viết đơn giản.
L1={bbsboalbcbc(bc)m(aa)lbo∣l,m,o,s∈N}
Bây giờ chúng ta thấy cấu trúc lồng nhau, và bắt đầu xây dựng một ngữ pháp.
, T → b U , U → b U | ε (xem: nối và lặp đi lặp lại ở đây)S1→TVT→bUU→bU∣ε
(chúng tôi tạo ra o b 's trên cả hai mặt)V→bVb∣Wo b
W→aWaa∣X
, Y → b c b c , Z → b c Z | εX→YZY→bcbcZ→bcZ∣ε
Ví dụ 2
K={akblcm∣l=m+k}
Một viết lại "rõ ràng" đầu tiên.
K={akbm+kcm∣m,k≥0}={akbmbkcm∣m,k≥0}
Trong ngôn ngữ học, điều này được gọi là "sự phụ thuộc nối tiếp chéo": sự xen kẽ (thường) biểu thị mạnh mẽ cho việc không bối cảnh. Tất nhiên m + k = k + m và chúng ta được lưu.k,m,k,mm+k=k+m
K={akbk+mcm∣m,k≥0}={akbkbmcm∣m,k≥0}
với tác phẩm , X → một X b | ε , Y → b Y c | εS→XYX→aXb∣εY→bYc∣ε
Tương tự như vậy K′={akblcm∣m=k+l}={akblclck∣k,l≥0}
với tác phẩm , X → b X c | εS→aSc∣XX→bXc∣ε
Nhận xét cuối cùng: những kỹ thuật này giúp bạn đưa ra một ngữ pháp không có ngữ cảnh ứng viên, hy vọng sẽ nhận ra ngôn ngữ của bạn. Một bằng chứng chính xác vẫn có thể cần thiết, để đảm bảo rằng ngữ pháp thực sự hoạt động để nhận ra ngôn ngữ của bạn (không hơn, và không kém).