2009-12-17 37 views
16

Bằng khái niệm/chức năng/triển khai, sự khác biệt giữa trình biên dịch và trình phân tích cú pháp là gì?Sự khác biệt giữa trình biên dịch và trình phân tích cú pháp?

+16

Sự khác nhau giữa tủ lạnh và máy nén. – Nifle

+6

Tủ lạnh sử dụng nhiều máy nén để thực hiện công việc nhưng máy nén không phải là tủ lạnh. Trình biên dịch thay thế cho bộ lọc và trình phân tích cú pháp cho máy nén. – Nifle

+1

Đẹp tương tự, Nifle :-) – Joey

Trả lời

37

Trình biên dịch thường được tạo thành từ một số thành phần, một trong số đó là một trình phân tích cú pháp. Một tập hợp chung các thành phần trong trình biên dịch là:

  • Lexer - chia nhỏ chương trình thành các từ.
  • Trình phân tích cú pháp - hãy kiểm tra xem cú pháp của câu có đúng không.
  • Phân tích ngữ nghĩa - kiểm tra xem các câu có hợp lý hay không.
  • Trình tối ưu hóa - chỉnh sửa câu ngắn gọn.
  • Trình tạo mã - xuất nội dung có ý nghĩa ngữ nghĩa tương đương bằng một từ vựng khác.
    Để thêm một chút:

Như đã đề cập ở những nơi khác, nhỏ C là một trình biên dịch đàng hoàng đệ quy mà tạo ra mã như nó phân tích cú pháp. Về cơ bản phân tích cú pháp, phân tích ngữ nghĩa và tạo mã trong một lần truyền. Khi tôi nhớ lại, nó cũng lexed trong phân tích cú pháp. Một thời gian dài trước đây, tôi đã viết một trình biên dịch C (thực sự là một số: họ Introl-C cho vi điều khiển) sử dụng đệ quy và cú pháp và kiểm tra ngữ nghĩa trong phân tích cú pháp và tạo ra biểu diễn cây của chương trình từ mã nào đã được tạo ra.

Hôm nay, tôi đang làm việc trên compiler có nguồn -> mã thông báo -> AST -> IR -> mã, khá nhiều như tôi đã mô tả ở trên.

+1

+1 để lưu ý các phần khác nhau và cũng đề cập đến cách chúng liên quan đến văn bản (mặc dù cho một nhà khoa học máy tính lý thuyết một chương trình hoàn chỉnh sẽ là một từ duy nhất :-)). – Joey

+1

Một trình phân tích cú pháp sẽ kiểm tra cú pháp của câu đúng. Và người lexer có thể đã nhìn vào một cuốn từ điển để xem liệu các từ đó được tạo thành hay là những từ đúng để sử dụng. Tuy nhiên, nhiệm vụ đó hơi mờ giữa các lexer và các trình phân tích cú pháp. – Joey

+0

Trình phân tích cú pháp không chỉ kiểm tra cú pháp, mà việc kiểm tra cú pháp là một sản phẩm phụ của việc xây dựng một biểu diễn trừu tượng, đúng không? –

1

Trình phân tích cú pháp chỉ đọc văn bản thành một biểu diễn nội bộ, trừu tượng hơn, thường là một cây hoặc đồ thị của một số loại.

Trình biên dịch dịch một biểu diễn bên trong thành một định dạng khác. Thông thường, điều này có nghĩa là chuyển đổi mã nguồn thành các chương trình thực thi. Nhưng mục tiêu không phải là mã máy. Nó cũng có thể là một ngôn ngữ lập trình khác; trình biên dịch sẽ vẫn là trình biên dịch. Rõ ràng một trình biên dịch cần một trình phân tích cú pháp để thực sự đọc đầu vào của nó.

3

A là một phần tử của compiler.

Bạn đang tìm kiếm sự khác biệt giữa interpreter và trình biên dịch?

3

Trình biên dịch luôn có trình phân tích cú pháp bên trong. Trình phân tích cú pháp chỉ xử lý ngôn ngữ và trả về biểu diễn cây của nó, trình biên dịch tạo ra một cái gì đó từ cây đó, các mã máy thực tế hoặc một ngôn ngữ khác.

-2

Trình biên dịch là một loại chương trình máy tính đặc biệt dịch một tệp văn bản có thể đọc được thành dạng mà máy tính có thể dễ dàng hiểu hơn. Ở cấp độ cơ bản nhất của nó, một máy tính chỉ có thể hiểu hai điều, 1 và 0. Ở cấp độ này, một con người sẽ hoạt động rất chậm và tìm thấy thông tin chứa trong chuỗi dài 1s và 0s không thể hiểu được. Trình biên dịch là một chương trình máy tính thu hẹp khoảng cách này.

Trình phân tích cú pháp là một phần mềm đánh giá cú pháp của tập lệnh khi được thực thi trên máy chủ web. Đối với các ngôn ngữ kịch bản được sử dụng trên web, trình phân tích cú pháp hoạt động giống như trình biên dịch có thể hoạt động trong các môi trường phát triển ứng dụng khác.Parsers thường được sử dụng trong phát triển tập lệnh vì chúng có thể đánh giá mã khi kịch bản được thực thi và không yêu cầu mã phải được biên dịch Đầu tiên.

1

Trình phân tích cú pháp lấy dữ liệu thô và parses nó vào cấu trúc cây. Cây cú pháp này sau đó được truyền cho máy phát, nó sẽ biến nó thành bất cứ thứ gì nó được cho là tạo ra.

Vì vậy, trình phân tích cú pháp là một phần của trình biên dịch.

+0

trình phân tích cú pháp không phải tạo ra cấu trúc cây –

+0

Bạn có ví dụ về trình phân tích cú pháp không tạo ra cây không? –

+0

Điều gì về một trình phân tích cú pháp cho một ngôn ngữ đại diện cho các đồ thị tùy ý? Phân tích cú pháp thường chỉ dịch một cái gì đó văn bản vào một số đại diện nội bộ. Cái thứ hai thường là một cây cho các ngôn ngữ với các ngữ pháp không có ngữ cảnh được định nghĩa chính thức nhưng nó thực sự có thể là bất cứ thứ gì thuận tiện để xử lý. – Joey

0

Nói chung, trình phân tích cú pháp là một phần của trình biên dịch, nhưng trình biên dịch được thiết kế để chuyển đổi tập lệnh nhận được thành mã máy có thể đọc được hoặc đôi khi sang một ngôn ngữ khác.

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