ngữ nghĩa là gì?


13

Có nhiều ngôn ngữ phổ biến. Nhưng, các nhà khoa học máy tính nói với chúng ta rằng để hiểu hành vi của các chương trình trong các ngôn ngữ đó một cách dứt khoát và rõ ràng tranh luận về hành vi của chương trình (ví dụ: chứng minh danh tính của chúng), chúng ta cần dịch chúng sang ngôn ngữ khác, được hiểu rõ. Họ gọi ngôn ngữ đó là "một ngữ nghĩa". Các tác giả đề xuất một trong nhiều ngữ nghĩa. Họ giải thích ý nghĩa của các công trình của họ và cách bạn có thể dịch ngôn ngữ của bạn sang ngôn ngữ của họ. Một khi bạn làm điều đó, mọi người sẽ hiểu chương trình của bạn chắc chắn, họ nói.

Có vẻ tốt, tuy nhiên, tôi không hiểu điều gì đó. Họ có nói với chúng tôi rằng họ giới thiệu một ngôn ngữ khác để hiểu ngôn ngữ đầu tiên không? Tại sao chúng ta hiểu nó tốt hơn bản gốc? Tại sao ngữ nghĩa này tốt hơn thế? Tại sao không học ngữ nghĩa của C ngay lập tức thay vì phát minh ra ngôn ngữ khác, để mô tả ngữ nghĩa của C? Điều tương tự áp dụng cho cú pháp. Tại sao tôi không hỏi cùng một câu hỏi về cú pháp?

PS Trong các ý kiến ​​tôi nghe rằng ngữ nghĩa không có nghĩa là ngôn ngữ khác hoặc dịch sang ngôn ngữ đó. Nhưng ngữ nghĩa chính thức cho VHDL nói rằng nếu bạn hiểu một cái gì đó chỉ bằng một cách thì bạn không hiểu nó và "ý nghĩa của nghĩa" có thể được chỉ định nếu chúng ta cung cấp một ngôn ngữ với cơ chế dịch nó sang ngôn ngữ khác (đã biết). Đó là, "ngữ nghĩa là một mối quan hệ giữa các hệ thống chính thức". Hennessy, trong Ngữ nghĩa của Ngôn ngữ lập trình , nói rằng ngữ nghĩa cho phép xử lý chính thức chương trình "nghĩa", khi ngữ nghĩa được cung cấp dưới dạng Sơ đồ BNF hoặc Cú pháp. Một hệ thống chính thức là gì nếu không phải là một ngôn ngữ?

PS2 Cần tôi nói rằng HW tổng hợp các chương trình HDL đưa vào kết nối của cửa, là một quá trình khai thác ngữ nghĩa? Chúng tôi dịch mô tả (cấp cao) sang ngôn ngữ (cấp thấp) mà chúng tôi hiểu sau đó.


Những loại sơ đồ có nghĩa là gì? Tôi làm việc với ngữ nghĩa, nhưng hầu như không bao giờ sử dụng sơ đồ.
Dave Clarke

1
Tôi sẽ không gọi ngữ nghĩa là "ngôn ngữ". Ngữ nghĩa xác định ý nghĩa của ngôn ngữ. Ví dụ: cú pháp của số nhị phân nó . Chỉ với ngữ nghĩa giá trị ( w ) = Σ | w | i = 1 w i 2 n - i + 1 chúng ta có được các số thực tế không; lưu ý rằng đây không phải là ngữ nghĩa duy nhất có thể, còn có BCD, 2 bổ sung và nhiều hơn nữa. {0,1}+value(w)=i=1|w|wi2ni+1
Raphael

@Dave Xin lỗi, tôi đã tạo câu hỏi của mình dưới ấn tượng về Sơ đồ quyết định chuyển nhượng. Tôi cũng chỉ là ngữ nghĩa chính thức cho VHDL, một cuốn sách mà các tác giả đề xuất các ngữ nghĩa khác nhau, rất nhiều sơ đồ trong mỗi. Tôi đã nghĩ rằng đây là ngôn ngữ mà chúng tôi ánh xạ tới.
Val

Điều này nghe có vẻ ít giống với ngữ nghĩa và giống như một bước trung gian trên con đường biên dịch sang phần cứng.
Dave Clarke

Có, nhưng họ trích xuất "ý nghĩa" từ mô tả.
Val

Câu trả lời:


15

Tại sao không học ngữ nghĩa của C ngay lập tức thay vì phát minh ra ngôn ngữ khác, để mô tả ngữ nghĩa của C?

Bởi vì để xác định ngữ nghĩa của C, bạn cần một số loại ngôn ngữ, ví dụ như tiếng Anh. Tiếng Anh có thể mơ hồ, và đặc biệt là ngữ nghĩa C99.

Khái niệm khoa học máy tính về ngữ nghĩa nói chung là một mô tả toán học của một chương trình và mô tả này không chính xác là một bản dịch. Có một số loại ngữ nghĩa, có thể là về những thứ khác nhau:

  1. về chức năng toán học nào mà chương trình tính toán ( ngữ nghĩa biểu thị ),
    lambda x: x + x = =(x2x)
  2. về các thuộc tính sẽ giữ trước và sau chương trình ( ngữ nghĩa tiên đề ),
    {một>0} x = a; y = 0; trong khi (1 <x) {x = x / 2; y ++; } {y= =đăng nhập(một)}
  3. về cách chương trình sẽ giảm ( ngữ nghĩa hoạt động ). trong đó đại diện cho bộ nhớ của bạn trước và sau. Trong trường hợp này và nếu và là các ô nhớ chovàvà nếu .σ , σ ' σ = ( x một , y b ) σ ' = ( x một + b , y 0 ) x y x y
    (σ, trong khi (x) {x -; y ++;})σ'
    σ,σ'σ= =(xmột,yb)σ'= =(xmột+b,y0)xyxymột

Một chút đáng buồn cho bây giờ, phổ biến việc hiểu một chương trình thông qua ngữ nghĩa của nó là không dễ dàng cũng không phải là ý định của tất cả. Nó không phải là trước đây bởi vì, tốt, những toán học có thể lộn xộn. Nó không phải là cái thứ hai bởi vì ngữ nghĩa cung cấp thực sự cung cấp một mô tả chung và rõ ràng, nhưng nó không được sử dụng để hiểu một chương trình.

Nếu việc đọc ngữ nghĩa không có nhiều ý nghĩa, thì việc đọc và đồng ý về ngữ nghĩa về các yếu tố cơ bản của ngôn ngữ là rất quan trọng, ví dụ để giải thích rõ ràng về cách thức của Ccông trình nguyên thủy.tiếp tục

Tóm lại là:

Họ có nói với chúng tôi rằng họ giới thiệu một ngôn ngữ khác để hiểu ngôn ngữ đầu tiên không?

Về mặt kỹ thuật không, ngôn ngữ là toán học. Ngoài ra, về cơ bản là giống nhau cho tất cả các ngôn ngữ lập trình, do đó, ngay cả việc giới thiệu một ngôn ngữ mới, nếu nó giống nhau cho tất cả, sẽ khá ổn.

Tại sao chúng ta hiểu nó tốt hơn bản gốc?

Bởi vì nó là toán học nên có thể khó hiểu hơn, nhưng nó chính xác và đầy đủ hơn.

Điều tương tự áp dụng cho cú pháp.

Có những công trình trên các trình phân tích cú pháp đã được xác minh, nhưng câu hỏi về ý nghĩa ngữ nghĩa của trình phân tích cú pháp không phải là chuyện nhỏ.


2
"toán học [...] là cách chính xác và đầy đủ hơn." - tất nhiên đặt ra câu hỏi cho cú pháp chính thức và ngữ nghĩa của chính toán học. ;)
Raphael
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.