Lỗi ngữ nghĩa là gì

Lỗi ngữ pháp là một thuật ngữ được sử dụng trong ngữ pháp theo quy định để mô tả một trường hợp sử dụng bị lỗi, không theo quy tắc hoặc gây tranh cãi, chẳng hạn như một công cụ sửa đổi không đúng chỗ hoặc một động từ không phù hợp. Cũng được gọi là lỗi sử dụng. So sánh lỗi ngữ pháp với sự đúng đắn

Lỗi ngữ pháp thường được phân biệt với (mặc dù đôi khi bị nhầm lẫn với) lỗi thực tế, sai lầm logic, lỗi chính tả, lỗi đánh máy và lỗi chấm câu.

Thật thú vị, nhiều người có xu hướng xem các lỗi sử dụng chủ yếu là các lỗ hổng hoặc các nguồn gây bối rối tiềm ẩn, không phải là trở ngại cho giao tiếp hiệu quả. Theo một quảng cáo cho một "cuốn sách tuyệt vời" về cách sử dụng, "Những sai lầm trong tiếng Anh có thể khiến bạn bối rối, kìm hãm bạn trong xã hội và trong công việc. Nó có thể khiến bạn lúng túng và che giấu trí tuệ thực sự của mình." (Lưu ý rằng trong câu thứ hai, đại từ số ít nó không có người giới thiệu rõ ràng. Nhiều giáo viên tiếng Anh sẽ coi đây là một lỗi ngữ pháp, cụ thể là một trường hợp tham chiếu đại từ bị lỗi.)

Ví dụ và quan sát

  • "Cách diễn đạt 'lỗi ngữ pháp'Âm thanh, và, theo một nghĩa nào đó, là nghịch lý, vì lý do rằng một hình thức không thể là ngữ pháp và sai lầm cùng một lúc. Một người sẽ không nói bất hòa âm nhạc…. Do mâu thuẫn rõ ràng của các điều khoản, hình thức lỗi ngữ pháp nên tránh và 'lỗi trong xây dựng,' hoặc 'lỗi trong tiếng Anh,' v.v., được sử dụng thay cho nó. Tất nhiên người ta không bao giờ nên nói, 'ngữ pháp tốt' hay 'ngữ pháp xấu'. "(J. T. Baker, Tiếng anh đúng, Ngày 1 tháng 3 năm 1901)
  • Chúng tôi tin rằng, cũng như hầu hết các nhà ngôn ngữ học, rằng người bản ngữ không mắc lỗi.(Peter Trudgill và Lars-Gunnar Andersson, 1990, được trích dẫn bởi Carl James trong Lỗi trong học và sử dụng ngôn ngữ. Addison Wesley Longman, 1998)

Garner về lỗi ngữ pháp

  • "Nếu những người mô tả tin rằng bất kỳ bằng chứng ngôn ngữ nào xác nhận việc sử dụng, thì chúng ta không được là người mô tả. Hầu như không ai muốn trở thành người thu thập bằng chứng không phán xét. Trong phạm vi mà 'quần chúng' muốn lý luận như vậy - như người ta chỉ có thể muốn - đó là vì họ muốn sử dụng ngôn ngữ một cách hiệu quả. " (Bryan A.Garner, "Những quy tắc ngôn ngữ nào để bỏ qua. Hoặc phô trương?" Thời báo New York, Ngày 27 tháng 9 năm 2012)
  • "Bởi vì ngữ pháp có thể có nghĩa là (1) 'liên quan đến ngữ pháp' chủ đề ngữ pháp hoặc (2) 'phù hợp với ngữ pháp' một câu ngữ pháp, không có gì sai với cụm từ lâu đời lỗi ngữ pháp (ý nghĩa 1). Nó được chấp nhận như các cụm từ luật sư hình sự và ngụy biện logic. "(Bryan A. Garner, Cách sử dụng hiện đại của Garner. Nhà xuất bản Đại học Oxford, 2009)

Ngữ pháp và cách sử dụng

"Cách sử dụng là một khái niệm bao hàm nhiều khía cạnh và thái độ đối với ngôn ngữ. Ngữ pháp chắc chắn chỉ là một phần nhỏ trong việc sử dụng, mặc dù một số người sử dụng một thuật ngữ khác, như khi họ gán cho cái gì thực sự là một điểm gây tranh cãi sử dụng một lỗi ngữ pháp.' (Từ điển đại học Merriam-Webster, Lần thứ 11, 2003)

Phân tích lỗi

"Phân tích lỗi, như một cách mô tả thay vì một cách tiếp cận theo quy định đối với lỗi, cung cấp một phương pháp để xác định lý do tại sao một học sinh tạo ra một đặc biệt lỗi ngữ pháp và đã được vay mượn có giá trị từ lĩnh vực này nghiên cứu về tiếp thu ngôn ngữ thứ hai, một nghiên cứu có thể đã thay đổi việc khoan theo quy định của các hình thức tiêu chuẩn vẫn bao gồm nhiều văn bản viết cơ bản. Tuy nhiên, thật không may, phân tích lỗi trong lớp học sáng tác thường chỉ đơn giản là tập trung vào lỗi. "(Eleanor Kutz," Giữa ngôn ngữ học thuật và diễn ngôn học thuật: Ngôn ngữ là trung dung. " Đàm phán văn học hàn lâm, chủ biên.

bởi Vivian Zamel và Ruth Spack. Lawrence Erlbaum, 1998)

Mặt trái của lỗi ngữ pháp

Mobster đầu tiên: Chào. Họ đang ném robot. Linh chi: Họ là ném robot. Tên cướp thứ hai: Nó thiếu tôn trọng chúng tôi. Im đi a'you face. Linh chi: Câm miệng của bạn đối mặt. Tên cướp thứ hai: Whatsa matta bạn? Mobster đầu tiên: Bạn không quá lớn. Tên cướp thứ hai: Tôi là một 'anh ta sẽ đánh bạn trong labonza. Linh chi: Ừm… À! Quá tải ngữ pháp xấu. Lỗi. Lỗi.Linguo nổ tung("Bộ ba lỗi" Gia đinh Simpsons, 2001)

Còn được biết là: lỗi, lỗi sử dụng, lỗi ngữ pháp hoặc lỗi, ngữ pháp xấu

Chúng ta đã tìm hiểu cách trình phân tích cú pháp xây dựng cây phân tích cú pháp trong giai đoạn phân tích cú pháp.

Cây phân tích cú pháp đơn giản được xây dựng trong giai đoạn đó thường không sử dụng cho trình biên dịch, vì nó không mang bất kỳ thông tin nào về cách đánh giá cây.

Việc tạo ra ngữ pháp không có ngữ cảnh, tạo ra các quy tắc của ngôn ngữ, không phù hợp với cách diễn giải chúng.

Ví dụ:

E → E + T

Quá trình xử lý CFG ở trên không có quy tắc ngữ nghĩa nào đi kèm với nó và nó không thể giúp ích cho việc tạo ra bất kỳ ý nghĩa nào cho quá trình xử lý.

Nếu bỏ lỡ hướng dẫn này thì bạn có thể xem tại đây:

Thiết kế trình biên dịch: Phân tích cụ pháp

Trong hướng dẫn này, bạn sẽ tìm hiểu chi tiết về phân tích cu pháp và trình phân tích cú pháp trong thiết kế trình biên dịch.

Ngữ nghĩa

Ngữ nghĩa của một ngôn ngữ cung cấp ý nghĩa cho các cấu trúc của nó, như mã thông báo và cấu trúc cú pháp. Ngữ nghĩa học giúp giải thích các ký hiệu, kiểu của chúng và mối quan hệ của chúng với nhau. Phân tích ngữ nghĩa đánh giá liệu cấu trúc cú pháp được xây dựng trong chương trình nguồn có phát sinh bất kỳ ý nghĩa nào hay không.

CFG + semantic rules = Syntax Directed Definitions

Ví dụ:

int a = “value”;

không nên đưa ra lỗi trong giai đoạn phân tích từ vựng và cú pháp, vì nó đúng về mặt từ vựng và cấu trúc, nhưng nó sẽ tạo ra lỗi ngữ nghĩa vì kiểu dữ liệu của phép gán khác nhau.

Các quy tắc này được thiết lập bởi ngữ pháp của ngôn ngữ và được đánh giá trong phân tích ngữ nghĩa.

Các tác vụ sau đây cần được thực hiện trong phân tích ngữ nghĩa:

  • Phân giải phạm vi
  • Kiểm tra kiểu dữ liệu.
  • Kiểm tra giới hạn mảng.

Lỗi ngữ nghĩa

Chúng tôi đã đề cập đến một số lỗi ngữ nghĩa mà trình phân tích ngữ nghĩa sẽ nhận ra:

  • Kiểu dữ liệu không phù hợp.
  • Biến không được khai báo.
  • Sử dụng sai định danh dành riêng..
  • Khai báo trùng biến trong một phạm vi.
  • Truy cập một biến ngoài phạm vi.
  • Thông số thực tế và thông số chính thức không khớp.

Ngữ pháp thuộc tính

Ngữ pháp thuộc tính là một dạng ngữ pháp đặc biệt không có ngữ cảnh, trong đó một số thông tin bổ sung (thuộc tính) được nối vào một hoặc nhiều đầu cuối không phải của nó để cung cấp thông tin nhạy cảm theo ngữ cảnh.

Mỗi thuộc tính có miền giá trị được xác định rõ ràng, chẳng hạn như số nguyên, số thập phân, ký tự, chuỗi và biểu thức.

Ngữ pháp thuộc tính là một phương tiện để cung cấp ngữ nghĩa cho ngữ pháp không có ngữ cảnh và nó có thể giúp xác định cú pháp và ngữ nghĩa của một ngôn ngữ lập trình.

Ngữ pháp thuộc tính (khi được xem như một cây phân tích cú pháp) có thể chuyển các giá trị hoặc thông tin giữa các nút của cây.

Ví dụ:

E → E + T { E.value = E.value + T.value }

Phần bên phải của CFG chứa các quy tắc ngữ nghĩa chỉ định cách diễn giải ngữ pháp. Ở đây, các giá trị của không phải đầu cuối E và T được cộng lại với nhau và kết quả được sao chép vào đầu cuối E.

Các thuộc tính ngữ nghĩa có thể được gán cho các giá trị của chúng từ miền của chúng tại thời điểm phân tích cú pháp và đánh giá tại thời điểm gán hoặc điều kiện.

Dựa trên cách các thuộc tính nhận được giá trị của chúng, chúng có thể được chia thành hai loại: thuộc tính tổng hợp và thuộc tính kế thừa.

Thuộc tính tổng hợp

Các thuộc tính này nhận giá trị từ các giá trị thuộc tính của các nút con của chúng. Để minh họa, hãy giả sử sản xuất sau:

S → ABC

Nếu S đang nhận các giá trị từ các nút con của nó (A, B, C), thì nó được cho là một thuộc tính tổng hợp, vì các giá trị của ABC được tổng hợp thành S.

Như trong ví dụ trước của chúng ta (E → E + T), nút cha E nhận giá trị từ nút con của nó. Các thuộc tính tổng hợp không bao giờ lấy giá trị từ các nút cha của chúng hoặc bất kỳ nút anh em nào.

Thuộc tính kế thừa

Ngược lại với các thuộc tính tổng hợp, các thuộc tính kế thừa có thể lấy giá trị từ các nút cha và / hoặc anh em. Như trong xử lý sau,

S → ABC

A có thể nhận giá trị từ S, B và C. B có thể nhận giá trị từ S, A và C. Tương tự như vậy, C có thể nhận giá trị từ S, A và B.

Mở rộng: Khi một non-terminal được mở rộng thành các đầu cuối (terminal) theo quy tắc ngữ pháp:

Giảm: Khi một đầu cuối (terminal) được giảm thành non-terminal tương ứng của nó theo các quy tắc ngữ pháp. Cây cú pháp được phân tích cú pháp từ trên xuống và từ trái sang phải. Bất cứ khi nào việc giảm xảy ra, chúng tôi áp dụng các quy tắc ngữ nghĩa tương ứng (hành động) của nó.

Phân tích ngữ nghĩa sử dụng bản dịch theo hướng cú pháp để thực hiện các nhiệm vụ trên.

Trình phân tích ngữ nghĩa nhận AST (Cây cú pháp trừu tượng) từ giai đoạn trước của nó (phân tích cú pháp).

Trình phân tích ngữ nghĩa đính kèm thông tin thuộc tính với AST, được gọi là AST thuộc tính.

Các thuộc tính là cặp giá trị, <tên thuộc tính, giá trị thuộc tính>

Ví dụ:

int value = 5; <type, “integer”> <presentvalue, “5”>

Đối với mỗi xử lý, chúng tôi đính kèm một quy tắc ngữ nghĩa.

SDT được phân bổ theo S

Nếu một SDT chỉ sử dụng các thuộc tính tổng hợp, nó được gọi là SDT được phân bổ theo S. Các thuộc tính này được đánh giá bằng cách sử dụng các SDT do S phân bổ có các hành động ngữ nghĩa của chúng được viết sau khi xử lý (phía bên phải).

Như được mô tả ở trên, các thuộc tính trong SDT do S phân bổ được đánh giá trong phân tích cú pháp từ dưới lên, vì giá trị của các nút cha phụ thuộc vào giá trị của các nút con.

SDT được phân bổ theo L

Dạng SDT này sử dụng cả thuộc tính tổng hợp và thuộc tính kế thừa với hạn chế là không lấy giá trị từ các anh em bên phải.

Trong SDT được phân bổ theo L, một đầu cuối (terminal) không phải là non-terminal có thể nhận các giá trị từ các nút cha, con và anh em của nó. Như trong xử lý sau

S → ABC

S có thể nhận các giá trị từ A, B và C (tổng hợp). A chỉ có thể nhận các giá trị từ S. B có thể nhận các giá trị từ S và A. C có thể nhận các giá trị từ S, A và B. Không có đầu cuối nào có thể nhận các giá trị từ phần tử anh em ở bên phải của nó.

Các thuộc tính trong SDT do L phân bổ được đánh giá theo cách phân tích cú pháp theo chiều sâu từ trái sang phải.

Chúng ta có thể kết luận rằng nếu một định nghĩa được quy cho S, thì nó cũng được quy cho L vì định nghĩa được quy cho L bao gồm các định nghĩa được quy cho S.

Trong hướng dẫn tiếp theo, bạn sẽ tìm hiểu vì sao cần phải tạo mã trung gian? Cách tạo mã trung gian trong thiết kế trình biên dịch.

Thiết kế trình biên dịch: Tạo mã trung gian

Trong hướng dẫn này, bạn sẽ tìm hiểu vì sao cần phải tạo mã trung gian? Cách tạo mã trung gian trong thiết kế trình biên dịch.

Video liên quan

Chủ đề