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?
Trả lời
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 để 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
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
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? –
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ó.
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?
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.
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.
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.
trình phân tích cú pháp không phải tạo ra cấu trúc cây –
Bạn có ví dụ về trình phân tích cú pháp không tạo ra cây không? –
Đ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
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.
- 1. Sự khác biệt giữa trình phân tích cú pháp SAX XML, Kéo trình phân tích cú pháp & Trình phân tích cú pháp DOM trong android
- 2. Sự khác biệt giữa trình phân tích cú pháp bầu cử và trình phân tích phụ thuộc
- 3. Sự khác nhau giữa biên dịch(), phân tích cú pháp(), và render() trong mustache.js
- 4. Trình tạo trình phân tích cú pháp và trình phân tích cú pháp cho Common Lisp
- 5. Sự khác nhau giữa các trình phân tích cú pháp LR, SLR và LALR là gì?
- 6. Sự khác biệt giữa trình biên dịch và trình liên kết là gì?
- 7. Sự khác biệt giữa Phân tích cú pháp và Truyền đạt?
- 8. LL (*) so với các trình phân tích cú pháp PEG: sự khác biệt là gì?
- 9. Sự khác biệt giữa Trình biên dịch Chỉ trong thời gian và Phiên dịch là gì?
- 10. Sự khác biệt chính xác giữa Trình biên dịch và Phiên dịch?
- 11. Sự khác biệt giữa trình thông dịch Java và JVM
- 12. Cần trình phân tích cú pháp C++
- 13. Trình phân tích cú pháp HTML
- 14. Kết hợp phân tích cú pháp phân tích cú pháp, phân tích cú pháp và phân tích cú pháp rừng
- 15. Trình phân tích cú pháp Wiki nào?
- 16. Chọn trình phân tích cú pháp Haskell
- 17. Trình phân tích cú pháp SVG Python
- 18. Sự khác biệt giữa lỗi thời gian chạy và lỗi trình biên dịch là gì?
- 19. Phân tích html với trình phân tích cú pháp SAX
- 20. Trình phân tích cú pháp email Java?
- 21. Xây dựng trình phân tích cú pháp (Phần I)
- 22. Máy tạo phân tích cú pháp và Ragel ... Làm cho trình phân tích cú pháp D của riêng tôi
- 23. RazorEngine phân tích cú pháp ném Không thể biên dịch
- 24. Máy phát PHP và trình phân tích cú pháp PHP?
- 25. Trình phân tích cú pháp Boolean và Math
- 26. Trình phân tích và phân tích cú pháp JavaScript trong C# .NET 4.5
- 27. Trình phân tích cú pháp tùy chọn cho C/C++?
- 28. Trình phân tích cú pháp phân tích cú pháp Haskell để gặp phải [...]
- 29. Tìm kiếm trình phân tích cú pháp mã C#
- 30. Trình phân tích cú pháp để đọc Mục tiêu-C
Sự khác nhau giữa tủ lạnh và máy nén. – Nifle
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
Đẹp tương tự, Nifle :-) – Joey