2014-12-19 20 views
8

Một điều tôi thực sự không hiểu là về chức năng của clang, nếu clang là phần kết thúc trước của trình biên dịch, nó chỉ nên làm việc phân tích cú pháp cho mã nguồn, công việc vẫn sẽ được thực hiện bởi LLVM. Nhưng clang cũng có thể tạo ra file thực thi. Vậy làm thế nào để hiểu nó? Mối quan hệ giữa clang và llvm là gì?Nếu clang là phần đầu của trình biên dịch, thì tại sao nó có thể tạo ra tệp thực thi?

Trả lời

13

Nếu bạn rất cụ thể: khả năng thực thi của trình điều khiển là trình điều khiển trình biên dịch. Nó gọi tất cả các phần cần thiết để tạo ra một tệp thực thi. Nó gọi libclang làm công việc front-end: parser/lexer, phân tích ngữ nghĩa, xây dựng AST và tạo mã. Khi AST được hạ xuống LLVM IR, công việc front-end được thực hiện và trình tối ưu hóa và LLVM sẽ khởi động. Sau khi mã hóa trình điều khiển trình biên dịch sẽ gọi ra back-end LLVM được chỉ định bởi đích và cuối cùng là trình liên kết xây dựng tệp thực thi. Và đó là lý do tại sao trình điều khiển trình biên dịch clang có thể xây dựng các tệp thi hành.

+1

sự khác biệt giữa LLVM IR và LLVM là gì? – storen

+1

LLVM IR là đại diện trung gian mà các mặt trước sản xuất và back-end biến đổi thành một ISA riêng biệt. LLVM chỉ là tên của dự án. –

2

LLVM là một trình phụ trợ trình biên dịch được viết trước khi clang, ban đầu sử dụng giao diện người dùng từ gcc trong công cụ có tên 'llvm-gcc'. Clang là tên của mã giao diện người dùng, nhưng clang cũng là tên của một công cụ bao gồm cả giao diện người dùng, nhưng cũng sẽ chạy toàn bộ biên dịch cho bạn. Các giai đoạn biên dịch sau này được xây dựng trong công cụ clang như các thư viện, hoặc nếu chúng là các tập tin thực thi riêng biệt, clang biết cách gọi chúng. Với các đối số dòng lệnh đúng, bạn có thể làm cho vang dừng phần cách thru

  • -emit-ast chỉ làm phân tích cú pháp và làm cho các cú pháp trừu tượng Tree
  • -emit-llvm làm cho Trung cấp Đại diện LLVM, nhưng không biến nó thành mã cho máy tính của bạn

Clang sẽ hoạt động như trình điều khiển cho toàn bộ công trình vì đó là những gì người lập trình thường muốn, phân tích cú pháp, đối tượng được tạo, thực thi. Muốn cây cú pháp trừu tượng nhổ vào bạn thì khá hiếm.

Rõ ràng đây là souce cho tất cả các điều LLVM http://llvm.org

Dưới đây là một đoạn video của Chriss Lattner explaing gì LLVM là https://www.youtube.com/watch?v=029YXzHtRy0. Chandler Carruth có một số vids trên Youtuble giải thích các phần của tiếng kêu vang mà ông đã làm việc.

2

Có 3 ý nghĩa của Clang:

  1. Các front-end (libclang)
  2. Trình biên dịch lái xe (kêu vang thực thi)
  3. Các truyền thống biên dịch. Điều này không chỉ bao gồm front-end, mà còn sử dụng rộng rãi của trung cấp và back-end, hoặc thậm chí là assembler tích hợp để hoàn thành giai đoạn biên dịch. (trình điều khiển chủ yếu bao gồm biên soạn và liên kết)
Các vấn đề liên quan