Tôi cần một CFG sẽ tạo ra các chuỗi khác với palindromes. Giải pháp đã được cung cấp và như sau (Giới thiệu về lý thuyết tính toán - Sipser)Ngữ cảnh miễn phí ngữ cảnh cho không phải palindrome
R -> XRX | S
S -> aTb | bTa
T -> XTX | X | <epsilon>
X -> a | b
Tôi có ý tưởng chung về cách thức hoạt động của ngữ pháp này. Nó yêu cầu chèn một chuỗi con có các bảng chữ cái không bằng nhau tương ứng trên một nửa của nó, thông qua việc sản xuất S -> aTb | bTa
, do đó đảm bảo rằng một palindrome không bao giờ có thể được tạo ra.
Tôi sẽ viết ra ngữ nghĩa của hai tác phẩm đầu tiên như tôi đã hiểu nó,
S
tạo ra chuỗi mà không thể palindromes vì 1 và bảng chữ cái cuối cùng không bằng nhauR
bao gồm ít -S
là một chuỗi phụ đảm bảo rằng nó không bao giờ là palindrome.
Tôi không hiểu hoàn toàn ngữ nghĩa của quá trình sản xuất thứ ba, tức là.
T -> XTX | X | <epsilon>
X -> a | b
Cách tôi xem, T có thể tạo bất kỳ kết hợp nào của a và b, tức là {a, b} *. Tại sao nó không giống như
T -> XT | <epsilon>
X -> a | b
Không phải là hai tương đương? Vì sau này trực quan hơn, tại sao nó không được sử dụng?
bạn đã sai trong đoạn cuối. phải là aSa và bSb –