9

Tôi hiện đang nghiên cứu bài kiểm tra toán học rời rạc, trong đó chúng tôi đang học Chomsky's hierarchy và loại tự động nhận dạng từng cấp của hệ thống phân cấp. Tôi đang được dạy rằng hầu hết các ngôn ngữ máy tính nằm trong "mức 2 và 1" của hệ thống phân cấp, nhưng không chính xác như thế nào.Hệ thống phân cấp và bảo vệ của Chomsky ảnh hưởng như thế nào đến thiết kế ngôn ngữ?

Câu hỏi của tôi là:

  1. Những tính năng thuộc về mỗi cấp?

  2. Điều này có gì khác ngoài cơ sở lý thuyết không? Tôi tự hỏi nếu các nhà thiết kế ngôn ngữ như Dennis Ritchie và James Gosling đã phải đi vào cân nhắc này khi thiết kế C và Java. Họ có? Ai đó sẽ áp dụng điều này?

  3. Chúng tôi đang được thông báo rằng máy Turing nhận ra mức 0 của hệ thống phân cấp. Nếu có, có bất kỳ tính năng ngôn ngữ nào thuộc về cấp 0 không? Tôi đoán rằng điều này có thể là xử lý ngôn ngữ tự nhiên, phải không?

Trả lời

7
  1. Không có. Cấp độ 1 bao gồm mức độ 2. Có lẽ tôi hiểu lầm bạn, vì vậy để được hoàn thành:

    • Ngôn ngữ thường xuyên được sử dụng trong Matching Regular Expression. Thông tục: DFA không thể đếm được. Và bạn cần phải đếm nếu bạn muốn phù hợp với dấu ngoặc đơn. [Cấp 3]
    • Cú pháp ngôn ngữ thường là Ngôn ngữ tự do ngữ cảnh. Xem 2) [Cấp 2]
    • Ngôn ngữ nhạy cảm theo ngữ cảnh chỉ được sử dụng về mặt lý thuyết. Xem 3) [Cấp 1]
  2. Giúp thiết kế lexers và phân tích cú pháp. Tôi không biết nếu những người sáng tạo của C nghĩ về điều đó, nhưng Java, chắc chắn. Parser Generator

  3. Máy xử lý tính bất kỳ thứ gì có thể được tính toán. "Có thể được tính toán" thậm chí được định nghĩa là: Có thể được chấp nhận bởi Máy Turing. Điều này bao gồm, tất nhiên, xử lý ngôn ngữ tự nhiên. Bất kỳ thứ gì trên Cấp 2 không hữu ích cho việc tạo ngôn ngữ, bởi vì chương trình đọc đầu vào như vậy có thể không dừng lại (Word Problem không còn có thể được giải quyết).

+0

a) Tôi biết cấu trúc phân cấp được tạo thành từ các bộ với 0 là bộ chứa tất cả. Những gì tôi yêu cầu là các tính năng tạo ra một ngôn ngữ thuộc về mức 1 và không phải là cấp 2. Xin lỗi nếu ngữ pháp của câu hỏi là mơ hồ. +1 – andandandand

+0

Tôi trộn các số. Chúng tôi không sử dụng chúng tại trường đại học của tôi. – ebo

+0

Tôi không biết về vấn đề Word. Cảm ơn, tôi thấy nó thú vị. – andandandand

3

Nhập 3 ngữ pháp tạo ngôn ngữ thông thường. Đây là những ngôn ngữ có các tính năng như bắt đầu bằng "xxx", chứa "xxx", kết thúc bằng "xxx", chứa số lẻ của y, v.v. Tự động hữu hạn (xác định hoặc không) nhận ra các ngôn ngữ này.

Nhập 2 ngữ pháp tạo ngôn ngữ không có ngữ cảnh. Đây là những ngôn ngữ có các tính năng như một số x được theo sau bởi ít hơn, hoặc nhiều hơn, hoặc bằng số của y, hoặc một từ được theo sau bởi cùng một từ, nhưng bị đảo ngược. Pushdown automata nhận ra những ngôn ngữ này ... nghĩ automaton hữu hạn với một ngăn xếp.

Nhập 1 ngữ pháp tạo ngôn ngữ nhạy cảm với ngữ cảnh. Đây là rất gần với loại 0 ngữ pháp mà nó thường là khó để tìm thấy một sự khác biệt giữa chúng. LBA (tự động hóa tuyến tính) nhận ra những ngôn ngữ này, cho rằng máy Turing có nguồn lực hạn chế ... hãy nghĩ đến một máy tính hiện đại.

Nhập 0 ngữ pháp tạo ngôn ngữ Turing, đôi khi được gọi là ngôn ngữ đếm ngược đệ quy. Đây là cơ bản bất kỳ ngôn ngữ mà bạn có thể viết một chương trình máy tính để nhận ra, nhưng họ thực sự pha trộn với Type 1, kể từ khi máy tính thực thường có một số loại giới hạn bộ nhớ.

Tự động hữu hạn và tự động đẩy xuống là rất quan trọng trong việc giải quyết các vấn đề nảy sinh khi viết trình biên dịch. Tuy nhiên, đó không phải là lý do tại sao bạn nghiên cứu chúng, bạn nghiên cứu chúng để tìm hiểu các giới hạn của những gì có thể/không thể được tính toán. Nhiều lập trình viên nghĩ rằng bạn có thể giải quyết mọi vấn đề với máy tính. Lý thuyết tính toán dạy bạn cách khác.

Sửa bởi "Dude" - OK, đây là một cách dễ hiểu (và nổi tiếng) vấn đề mà không thể được giải quyết bằng bất kỳ máy Turing hoặc máy tính hoặc lập trình viên hoặc thiên tài người ngoài hành tinh ...

Hãy tưởng tượng bạn có một số domino ... nhưng thay vì các mẫu chấm, bạn có một số từ ngắn ở trên và dưới, nói những từ như "aba" và "cab". Nếu tôi cung cấp cho bạn 5 hoặc 10 hoặc 50 trong số các domino này, bạn có thể sắp xếp chúng để các từ trên cùng, tất cả được nối với nhau hay không, khớp chính xác với các từ được ghép nối ở phía dưới. Bạn có thể tạo bao nhiêu bản sao tùy thích và mỗi bản sao.

Ví dụ domino (contrived :) (a/aab), (aba/ac), (cab/ab) là tập hợp 3 domino nơi đỉnh (a + aba + cab) chính xác bằng đáy (aab + ac + ab).

Dễ như điều này nghe có vẻ không thể giải quyết được.

BTW, khi lần đầu tiên tôi đọc/hiểu vấn đề này ... Tôi đã suy nghĩ .... ooooh, n! đang bắt đầu nhìn tốt!

+0

Có điều gì đó nói với tôi rằng Ritchie và Gosling đều hiểu Turing Machines và hệ thống phân cấp Chomsky. Nếu bạn dự định thiết kế ngôn ngữ (để tính toán), bạn nên hiểu các loại khác nhau và hạn chế của chúng một cách chính xác. – nik

+0

Dude, tôi biết hệ thống phân cấp. Tôi đã nói với bạn, tôi đang nghiên cứu nó. Điều tôi quan tâm là USES của hệ thống phân cấp khi thiết kế một ngôn ngữ. Và bạn không nói với tôi những vấn đề không thể được giải quyết bằng một máy Turing phổ quát. – andandandand

+0

Ví dụ về domino được gọi là: http://en.wikipedia.org/wiki/Post_correspondence_problem – ebo

Các vấn đề liên quan