Tầm quan trọng của các hình thức bình thường như hình thức bình thường Chomsky đối với CFG


12

Tôi hiểu rằng ngữ pháp không ngữ cảnh có thể được sử dụng để thể hiện các ngôn ngữ không ngữ cảnh. Nó có thể có sự mơ hồ. Chúng tôi cũng có các hình thức bình thường như ChomskyGreibach hình thức bình thường. Tôi không thể hiểu sự cần thiết của điều đó.

Tại sao chúng quan trọng trong lý thuyết ngôn ngữ? Tất cả các sách giáo khoa tôi đề cập để kể về các hình thức bình thường này nhưng không nói gì về tầm quan trọng của chúng.


2
Các hình thức bình thường là tiện dụng khi đưa ra bằng chứng xây dựng.
Karolis Juodelė

Câu trả lời:


12

Có ít nhất hai cách sử dụng có liên quan.

  1. Tính đơn giản của bằng chứng
    Có rất nhiều bằng chứng xung quanh ngữ pháp không ngữ cảnh, bao gồm khả năng giảm và tương đương với automata. Chúng càng đơn giản thì bộ ngữ pháp bạn phải xử lý càng bị hạn chế. Do đó, các hình thức bình thường có thể hữu ích ở đó.

    Như một ví dụ cụ thể, hình thức bình thường Greibach được sử dụng để hiển thị (tính xây dựng) rằng có một -transition miễn PDA cho mỗi CFL (không chứa ε ).εε

  2. Cho phép phân tích cú pháp
    Trong khi các thiết bị PDA có thể được sử dụng để phân tích các từ với bất kỳ ngữ pháp nào, điều này thường bất tiện. Các biểu mẫu thông thường có thể cho chúng ta nhiều cấu trúc hơn để làm việc, dẫn đến các thuật toán phân tích cú pháp dễ dàng hơn.

    Như một ví dụ cụ thể, thuật toán CYK sử dụng dạng bình thường Chomsky. Greibach, dạng bình thường, mặt khác, cho phép phân tích cú pháp gốc đệ quy; mặc dù quay lui có thể là cần thiết, độ phức tạp không gian là tuyến tính.


5

Dạng bình thường Chomsky cho phép thuật toán thời gian đa thức quyết định xem một chuỗi có thể được tạo bởi một ngữ pháp hay không. Thuật toán khá lắt léo nếu bạn biết lập trình động ...

Nếu độ dài của đầu vào ( ) của bạn là n thì bạn lấy một mảng 2d ( A ) dim n x n .InAnn

A[i,j]GI(i,j)

A[1,n]SS

def decide (string s,grammar G):
    //base case
    for i=1 to n:
        N[i,i]=I[i]    //as the substring of length one can be generated by only a
                       terminal.
    //end base case

    //induction
    for s=1 to n:       //length of substring
        for i=1 to n-s-1: //start index of substring
            for j=i to i+s-1:   //something else
                 if there exists a rule A->BC such that B belongs to N[i,j] and C
                 belongs to N[j+1,i+s-1] then add A to N[i,i+s-1]
    //endInduction

    if S belongs to N[1,n] then accept else reject.

Tôi biết rằng các chỉ số có vẻ khá điên rồ. Nhưng về cơ bản đây là những gì đang xảy ra.

  • Các trường hợp cơ bản là khá rõ ràng tôi nghĩ.

  • ss

  • 5sub1A>BCBCAN[1,6]

  • Cuối cùng, nếu bạn có biểu tượng bắt đầu trong N[1,n]


  • 3
    Đây là thuật toán CYK mà a) bạn nên đặt tên như vậy và b) đã được đề cập trong câu trả lời của tôi. Lưu ý rằng thời gian chạy đa thức chỉ ấn tượng vì thuật toán thống nhất trên tất cả các CFG, đó là chung.
    Raphael

    @Raphael ok .... tôi không biết tên :)
    ishan3243

    4

    Sheila Greibach đã phát minh ra hình thức bình thường của Greibach để chứng minh rằng mọi CFG đều có thể được nhận ra bởi một máy PDA hoạt động trong thời gian thực (nghĩa là không có ϵ

    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.