Làm thế nào là ý kiến ​​thể hiện trong ngữ pháp ngôn ngữ lập trình?


8

Tôi đang học cách xây dựng trình phân tích cú pháp bằng ngữ pháp, nhưng tôi gặp khó khăn khi cố gắng bày tỏ ý kiến, bởi vì chúng có thể xuất hiện ở hầu hết mọi nơi.

Điều này cho thấy rằng các nhận xét có thể bị xóa khỏi luồng mã thông báo trước khi phân tích cú pháp diễn ra.

Đó có phải là thông lệ tiêu chuẩn, hoặc là nhận xét bao giờ / thường được chỉ định trong ngữ pháp?


"Chúng có thể xuất hiện alomost ở khắp mọi nơi" có phần hơi căng. Có khá nhiều ngôn ngữ chỉ cho phép bình luận giữa các câu.
MSalters

1
Như một ví dụ về ngôn ngữ KHÔNG xóa các bình luận trước khi phân tích cú pháp, hãy xem TCL - các bình luận là một phần của ngữ pháp và nếu bạn đặt chúng sai chỗ, bạn có thể mong đợi trình phân tích cú pháp hét lên với bạn.
Michael Kohne

@Michael Tôi không thể tìm thấy một ngữ pháp cho TCL, mặc dù: trang này dường như chỉ ra rằng không có một ngữ pháp tĩnh.

1
@MattFenwick - nước thịt ngon. Tôi không biết đó là dễ uốn nắn. Theo những gì nói, bạn không thể có một ngữ pháp TCL, nó không có ý nghĩa. Tôi không có ý tưởng, xin lỗi vì dẫn sai.
Michael Kohne

Câu trả lời:


2

Nó rất phổ biến để coi nó như một dạng không gian màu trắng. Rất giống với các dòng mới trong các ngôn ngữ định hướng dấu chấm phẩy như C.

Khi nó là một dạng của khoảng trắng, bạn thường bỏ qua nó cao hơn trong trình phân tích cú pháp.


17

Họ thường không.

Chúng được loại bỏ bởi lexer, khi mã nguồn được chuyển đổi từ các ký tự thành mã thông báo.

Sau đó, trình phân tích cú pháp sẽ nhận được mã thông báo và xây dựng AST. Khi trình phân tích cú pháp thực hiện công việc của nó, bình luận đã biến mất, vì vậy chúng không phải xuất hiện trong ngữ pháp.


5

Trả lời nhanh

Vâng, đó là thông lệ tiêu chuẩn, để phát hiện các bình luận trong "lexer" hoặc "trình phân tích cú pháp"

Đôi khi, "trình phân tích cú pháp" có "lexer" tích hợp hoặc được trộn với "trình phân tích cú pháp" như một công cụ duy nhất ("lexer-Parser").

Trả lời mở rộng

Tôi chỉ làm việc trong trường hợp đó.

Hầu hết các "máy quét" (còn được gọi là "mã thông báo" hoặc "từ vựng"), phát hiện các nhận xét, nhưng, đã bị xóa khi trả lại mã thông báo cho "trình phân tích cú pháp".

Đôi khi, một ngôn ngữ lập trình, sử dụng một số ý kiến ​​có ý nghĩa đặc biệt, như "chỉ thị của trình biên dịch" hoặc "tài liệu".

Ví dụ bình luận tiêu chuẩn:

/*
 This function does something cool.
*/
int doSomething()
{
  return 0;
}

Ví dụ bình luận chỉ thị:

/*
 ##override
*/
int doSomething()
{
  return 0;
}

Nhận xét cho trình tạo tài liệu Ví dụ:

/*
 @description: This Function text will be turn,
  into an external pdf file, togheter with other
  similar comments.
*/
int doSomething()
{
  return 0;
}

Hầu hết các công cụ liên quan đến trình biên dịch, phát hiện các nhận xét đặc biệt này, với bộ phân tích hoặc bộ xử lý trước, đó không phải là trình phân tích chính hoặc trình phân tích cú pháp, và, thậm chí còn có một bộ từ vựng nhỏ của riêng nó.

Chúc mừng.


0

Một số trình phân tích cú pháp giữ lại các nhận xét và / hoặc đầu vào bất hợp pháp trong AST thêm chúng làm thuộc tính cho tất cả các nút của AST.

Bạn có thể xem dự án Microsoft roslyn thực hiện điều đó nếu tôi nhớ chính xá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.