Tôi tự hỏi những gì đang biên dịch, điều gì sẽ xảy ra khi bạn biên dịch? Tôi có nghĩa là có bạn bấm biên dịch hoặc gõ vào trong giao diện điều khiển nhưng những gì nó thực sự làm trong "nền"?Điều gì sẽ xảy ra khi tôi biên dịch?
Trả lời
Đầu tiên, trình biên dịch "lexes" nguồn. Điều này có nghĩa là nó biến đổi nguồn thành một chuỗi các "thẻ". Tokens là chuỗi các ký tự, số và ký hiệu có ý nghĩa đối với trình biên dịch.
Tiếp theo, trình biên dịch "parses" trình tự mã thông báo từ bước một. Điều này có nghĩa là trình biên dịch kiểm tra để đảm bảo rằng nguồn tuân thủ các quy tắc (grammar) của ngôn ngữ lập trình.
Tiếp theo, trình biên dịch thực hiện syntactic analysis để tạo đại diện cho nguồn để xác định ý nghĩa ngữ nghĩa của nguồn. Đây là bước mà trình biên dịch sẽ xây dựng một syntax tree.
Cuối cùng, trình biên dịch sẽ thu được ý nghĩa ngữ nghĩa của nguồn trong biểu diễn đích (có thể là mã máy, ngôn ngữ trung gian như Microsoft's CIL hoặc ngôn ngữ lập trình khác).
Để biết chi tiết ngắn gọn, hãy xem Wikipedia. Để biết chi tiết gory, hãy xem the dragon book (mỗi sinh viên khoa học máy tính nên nghiên cứu cuốn sách này).
Xem this
Về cơ bản, yêu tinh ma thuật và nàng tiên lần lượt mã dễ đọc của con người vào mã máy.
Một tóm tắt rất ngắn gọn sẽ là một trình biên dịch phân tích mã của bạn kiểm tra lỗi và sau đó biến đổi nó thành byte hoặc mã máy.
Để có cái nhìn tốt hơn tôi sẽ đọc các bài viết trên wikipedia trình biên dịch:
Biên dịch được dịch mã nguồn thành mã máy. Thông thường một trình biên dịch (hoặc thông dịch viên) sẽ tạo ra một mã trung gian đôi khi được gọi là mã byte chạy trên một máy ảo (đây là cách java được biên dịch). Mã byte được dịch bởi vm thành mã máy cụ thể chạy trên kiến trúc cụ thể mà bạn đang nhắm mục tiêu. Toàn bộ quá trình này có thể được coi là "biên dịch"
Mục tiêu thường là, nhưng không nhất thiết phải là mã máy. Các trình biên dịch tôi làm việc trên biên dịch mã C - sau đó chúng tôi sử dụng trình biên dịch C bản địa để hoàn thành công việc biên dịch thành mã máy. Một trong số họ tạo ra một mã p (mã máy giả - nơi dấu gạch nối đi đâu?); kết quả sau đó được thông dịch bởi một thông dịch viên sử dụng các hàm C (mã máy) thông thường để thực thi các lệnh p-code. Trình biên dịch Java tạo mã byte cho JVM - đó cũng không phải là mã máy. –
Hoặc this.
Sách Rồng, nguồn gốc để xây dựng trình biên dịch.
'hoặc' hơi gây nhầm lẫn - so với cái gì? Bài đọc được đề xuất của bạn khá tốt, nhưng bạn nên làm cho câu trả lời của bạn nổi bật hơn. Sau đó, bạn sẽ nhận được các phiếu bầu ... –
Đó là để đáp ứng với câu trả lời đầu tiên tôi tìm thấy cho câu hỏi này, mà chỉ đơn giản là "Điều này". như một liên kết đến bài viết của Wikipedia về trình biên dịch. –
- 1. Điều gì sẽ xảy ra nếu tôi ReleaseMutex() hai lần?
- 2. Điều gì sẽ xảy ra nếu bạn biên dịch một tệp java rỗng?
- 3. Điều gì sẽ xảy ra khi biên dịch và chạy khi ghép nối một chuỗi rỗng trong Java?
- 4. Điều gì sẽ xảy ra khi ném ngoại lệ C++?
- 5. Điều gì sẽ xảy ra khi mongodb hết bộ nhớ?
- 6. Điều gì sẽ xảy ra sau khi gói bị bắt?
- 7. Điều gì sẽ xảy ra khi Stack và Heap Collide
- 8. Điều gì sẽ xảy ra khi va chạm băm xảy ra trong khóa Từ điển?
- 9. Điều gì sẽ xảy ra khi chúng tôi đặt Xmx và Xms bằng kích thước
- 10. Điều gì sẽ xảy ra khi tôi làm chủ gốc git pull trong nhánh phát triển?
- 11. Điều gì sẽ xảy ra với ổ cắm khi tôi rút cáp mạng?
- 12. Điều gì sẽ xảy ra khi tôi khởi động lại phiên bản EC2?
- 13. Điều gì sẽ xảy ra trong Oracle khi tôi thả một cột?
- 14. Điều gì sẽ xảy ra khi tôi chuyển đối số cho biểu tượng Clojure?
- 15. Điều gì sẽ xảy ra nếu tôi gán một giá trị âm cho biến chưa ký?
- 16. Điều gì sẽ xảy ra nếu tôi gán con trỏ hàm, thay đổi số tham số
- 17. Điều gì sẽ xảy ra nếu tôi ngừng Dịch vụ Windows trong khi đang xử lý yêu cầu WCF?
- 18. Điều gì sẽ xảy ra với AsyncTasks sau onPause?
- 19. Điều gì sẽ xảy ra khi Java Compiler thấy nhiều chuỗi nối trong một dòng?
- 20. Nếu không xóa biến ThreadLocal, Điều gì sẽ xảy ra?
- 21. Điều gì sẽ xảy ra khi chuyển tham chiếu đến chữ trong C++?
- 22. Sử dụng pin, điều gì sẽ xảy ra?
- 23. điều gì sẽ xảy ra nếu php.ini bị thiếu?
- 24. Điều gì sẽ xảy ra nếu một Dịch vụ được bắt đầu nhiều lần?
- 25. Điều gì sẽ xảy ra khi tôi ném ngoại lệ C++ từ một phương thức Java gốc?
- 26. Điều gì sẽ xảy ra khi bạn đóng ứng dụng bảng điều khiển C++
- 27. Điều gì sẽ xảy ra nếu bạn không quay trở lại giao dịch trong Hibernate?
- 28. Chế độ biên dịch tương tác trong các emacs? (điều gì sẽ xảy ra nếu trình biên dịch hỏi một câu hỏi)
- 29. Điều gì sẽ xảy ra nếu dịch vụ dữ liệu đám mây Parse không thành công?
- 30. Điều gì sẽ xảy ra trong một dịch vụ gián đoạn thường xuyên?
cảm ơn bạn, "(mọi sinh viên khoa học máy tính nên nghiên cứu cuốn sách này)." Tôi là sinh viên khoa học máy tính .. Tôi chưa bao giờ thực sự biết về cuốn sách đó và tôi tập trung nhiều hơn vào lập trình .. cấu trúc dữ liệu, đối tượng bla bla .. không bao giờ thực sự băn khoăn "ngoài" – ant
+1 cho cuốn Dragon Book – Pwninstein
Lời giải thích rất hay. +1 – Alex