Máy tínhLập trình

Phát thanh viên - là ... Các loại trình biên dịch. Chuyển đổi và các chương trình phát sóng

Chương trình, cũng như người dịch từ một ngôn ngữ khác cần một thông dịch viên hoặc người phiên dịch.

khái niệm cơ bản

Chương trình này là một đại diện ngôn ngữ tính toán: i → P → P (i). Một thông dịch viên là một chương trình được cung cấp cho các chương trình đầu vào P và một số đầu vào x. Nó thực hiện tại P x: I (P, x) = P (x). Thực tế là chỉ có một phiên dịch là khả năng thực hiện tất cả các chương trình có thể (có thể được biểu diễn trong hệ thống chính thức) là một khám phá Turing rất sâu sắc và có ý nghĩa.

Bộ xử lý là một thông dịch viên của chương trình bằng ngôn ngữ máy. Nói chung quá đắt để ghi các thông dịch viên cho các ngôn ngữ cấp cao, vì vậy họ chuyển thành một hình thức đó là dễ dàng hơn để giải thích.

Một số loại dịch có tên rất lạ:

  • Assembler dịch chương trình ngôn ngữ lắp ráp sang ngôn ngữ máy.
  • Trình biên dịch chuyển một ngôn ngữ cấp cao sang ngôn ngữ thấp hơn.

Phát thanh viên - là một chương trình mà mất như dữ liệu đầu vào chương trình trong một số ngôn ngữ S và sản xuất chương trình T trong một cách mà cả hai đều có cùng một ngữ nghĩa: P → X → Q. Đó là, ∀x. P (x) = Q (x).

Nếu phát sóng toàn bộ chương trình vào một cái gì đó interpretable, nó được gọi là một bộ sưu tập trước khi thực hiện, hoặc AOT biên dịch. biên dịch AOT có thể được sử dụng trong hàng loạt, thì sau đó thường là lắp ráp, ví dụ:

Mã nguồn biên dịch → (phiên dịch) → → lắp ráp mã lắp ráp (biên dịch) mã → → CPU máy (phiên dịch).

biên soạn hoạt động hoặc động xảy ra nếu chương trình được phát sóng, khi được thực hiện bởi một phần biên soạn trước khác. JIT-trình biên dịch nhớ những gì họ đã làm như vậy là không để lặp lại các mã nguồn một lần nữa và một lần nữa. Họ thậm chí có thể sản xuất tổng hợp thích ứng và biên dịch lại dựa trên hành vi của môi trường thực hiện chương trình.

Nhiều ngôn ngữ cho phép để thực thi mã tại thời gian biên dịch và biên dịch mã mới khi chạy.

giai đoạn dịch

Broadcast bao gồm các bước phân tích và tổng hợp:

Máy phân tích mã nguồn → → → khái niệm phát biểu (tổng hợp) → đang Target.

Điều này là do những nguyên nhân sau:

  • Bất kỳ phương pháp khác là không phù hợp. Lời dịch chỉ đơn giản không hoạt động.
  • giải pháp kỹ thuật tốt: nếu bạn muốn viết dịch cho các ngôn ngữ M và N nguồn nhắm mục tiêu cần viết chỉ M + N chương trình đơn giản (polukompilyatorov) chứ không phải là M × N phức tạp (tổng số dịch giả).

Tuy nhiên, trong thực tế, một cái nhìn khái niệm rất hiếm khi đủ ý nghĩa và đủ mạnh để trang trải tất cả các nguồn và mục tiêu ngôn ngữ có thể tưởng tượng. Trong khi một số đã có thể đến gần này.

trình biên dịch Bất động đi qua nhiều giai đoạn. Khi tạo trình biên dịch riêng của bạn không cần phải lặp lại tất cả các công việc khó khăn mà mọi người đã thực hiện để tạo ra cơ quan đại diện và máy phát. Bạn có thể dịch ngôn ngữ của bạn trực tiếp trong JavaScript hoặc C và tận dụng lợi thế của hiện Javascript động cơ và trình biên dịch C để làm phần còn lại. Bạn cũng có thể sử dụng các đại diện trung gian hiện có và các máy ảo.

kỷ lục phiên dịch

Phát thanh viên - là một chương trình hay phần cứng, trong đó liên quan đến ba ngôn ngữ: nguồn, đích và cơ sở. Chúng có thể được viết bằng một hình chữ T, đặt bản gốc trái, phải và mục tiêu cơ bản dưới đây.

Có ba loại trình biên dịch:

  • Phát thanh viên - là samokompilyator nếu nó tương ứng với ngôn ngữ nguồn cơ bản.
  • Trình biên dịch mà nhắm mục tiêu ngôn ngữ là đường cơ sở, được gọi là samorezidentnym.
  • Broadcaster - một cross-biên dịch, nếu anh nhắm mục tiêu và các ngôn ngữ khác nhau cơ bản.

Tại sao điều này lại quan trọng?

Thậm chí nếu bạn không bao giờ thực hiện một trình biên dịch thực tế, một kiến thức tốt về các công nghệ sáng tạo của nó, bởi vì các khái niệm sử dụng cho mục đích này được sử dụng rộng rãi, ví dụ:

  • văn bản định dạng;
  • truy vấn ngôn ngữ cơ sở dữ liệu;
  • kiến trúc máy tính tiên tiến;
  • bài toán tối ưu tổng quát;
  • GUIs;
  • ngôn ngữ kịch bản;
  • bộ điều khiển;
  • máy ảo;
  • Máy dịch thuật.

Ngoài ra, nếu bạn muốn viết preprocessors, linkers, bộ tải, bộ dò lỗi và profilers, bạn phải đi qua các bước tương tự như khi viết một trình biên dịch.

Bạn cũng có thể học cách để viết các chương trình tốt hơn, kể từ sự ra đời của dịch cho ngôn ngữ có nghĩa là một sự hiểu biết tốt hơn về những phức tạp và mơ hồ của nó. Việc nghiên cứu các nguyên tắc chung về phát thanh truyền hình cũng cho phép bạn trở thành một ngôn ngữ thiết kế tốt. Vì vậy, nó quan trọng như thế nào dốc ngôn ngữ nếu nó không thể được thực hiện một cách hiệu quả?

công nghệ toàn diện

công nghệ biên dịch bao gồm nhiều lĩnh vực khác nhau của khoa học máy tính:

  • lý thuyết chính thức của ngôn ngữ: ngữ pháp, phân tích, computability;
  • kiến trúc máy tính:. bộ giảng dạy, RISC hoặc CISC, pipelined xử lý lõi chu kỳ đồng hồ, vv;
  • khái niệm về ngôn ngữ lập trình, ví dụ, thực hiện kiểm soát trình tự, điều kiện thực hiện, lặp, đệ quy, phân hủy chức năng, mô đun, đồng bộ hóa, meta-lập trình, phạm vi, liên tục tiểu chủng loại, mẫu, loại đầu ra, nguyên mẫu, chú thích, lưu lượng, monads, hộp thư, tiếp tục , kí hiệu, biểu thức chính quy, bộ nhớ giao dịch, thừa kế, đa hình, cài đặt chế độ, và vân vân vân vân..;
  • ngôn ngữ trừu tượng và các máy ảo;
  • thuật toán và cấu trúc dữ liệu: biểu thức thông thường, các thuật toán phân tích cú pháp, các thuật toán đồ họa, lập trình năng động, đào tạo;
  • ngôn ngữ lập trình: cú pháp, ngữ nghĩa (tĩnh và động), mô hình hỗ trợ (cấu trúc, OOP, chức năng, hợp lý, ngăn xếp, xử lý song song, meta-lập trình);
  • phần mềm sáng tạo (trình biên dịch, thường lớn và phức tạp): định vị, bộ nhớ đệm, componentize, API-giao diện, tái sử dụng, đồng bộ hóa.

thiết kế trình biên dịch

Một số trong những vấn đề gặp phải trong sự phát triển của dịch thực tế:

  • Vấn đề với ngôn ngữ nguồn. Là nó dễ dàng để biên dịch nó? Có tiền xử lý? Làm thế nào là các loại? Có một thư viện?
  • Nhóm đèo biên dịch: đơn hoặc đa chiều?
  • Mức độ tối ưu hóa mong muốn. các chương trình phát sóng nhanh và ô uế với ít hoặc không tối ưu có thể được bình thường. Over-tối ưu hóa trình biên dịch sẽ chậm lại, nhưng mã tốt hơn trong thời gian chạy có thể được giá trị nó.
  • Mức độ cần thiết của phát hiện lỗi. Có thể một người phiên dịch chỉ dừng lại ở lỗi đầu tiên? Khi nó nên dừng lại? Cho dù tin tưởng vào sự điều chỉnh biên dịch báo lỗi?
  • Tính khả dụng của các công cụ. Nếu ngôn ngữ ban đầu không phải là rất nhỏ, máy quét và máy phát điện máy phân tích được yêu cầu. Ngoài ra còn có máy phát điện, máy phát điện mã, nhưng họ không phải là quá phổ biến.
  • Loại mã mục tiêu để được tạo ra. Được lựa chọn từ tinh khiết bổ sung hoặc ảo mã máy. Hoặc chỉ cần viết một phần nhập tạo ra một đại diện trung gian phổ biến như LLVM, RTL, hoặc JVM. Hoặc thực hiện một bản dịch của bản gốc trong mã nguồn trong C hoặc JavaScript.
  • Định dạng của mã mục tiêu. Bạn có thể chọn một ngôn ngữ lắp ráp, một mã số máy di động, hình ảnh máy bộ nhớ mã.
  • Nhắm mục tiêu lại. Khi bộ máy phát điện là tốt để có một phần đầu vào chung. Vì lý do này, nó là tốt nhất để có một máy phát điện cho đầu vào của nhiều bộ phận.

Kiến trúc biên dịch: linh kiện

Đây là những thành phần chức năng chính của một trình biên dịch mà tạo ra mã nguồn gốc (nếu chương trình đầu ra là một chương trình trong C hoặc một máy ảo, bạn không cần phải quá nhiều giai đoạn):

  • Chương trình đầu vào (dấu dòng chảy) được đưa vào máy quét (từ vựng phân tích), trong đó chuyển đổi nó thành một dòng thẻ.
  • Parser (phân tích cú pháp) xây dựng một cây cú pháp trừu tượng.
  • phân tích ngữ nghĩa phân hủy các thông tin ngữ nghĩa và kiểm tra các nút cây cho các lỗi. Kết quả là, xây dựng ngữ nghĩa đồ thị - cây cú pháp trừu tượng với thuộc tính bổ sung và các liên kết thành lập.
  • tạo mã trung xây dựng một biểu đồ dòng chảy (tuples được nhóm lại thành các khối chính).
  • Máy độc lập đang tiến hành tối ưu hóa cả hai địa phương (trong đơn vị cơ sở) và toàn cầu (cho tất cả các khối) tối ưu hóa về cơ bản còn lại trong thói quen. Giảm mã dư thừa và đơn giản hóa các tính toán. Kết quả là một đồ thị dòng chảy thay đổi.
  • Máy phát điện liên kết có mã khối cơ bản vào một mã điều khiển truyền thẳng, tạo ra một tập tin đối tượng lắp ráp thanh ghi ảo (có thể không hiệu quả).
  • Máy phụ thuộc vào tôi ưu hoa, mối liên kết phân bổ bộ nhớ giữa thanh ghi và làm cho đội lên kế hoạch. Nó thực hiện các chương trình chuyển đổi trong ngôn ngữ lắp ráp tại Đại hội này với một dụng tốt pipelining.

Bên cạnh đó, việc sử dụng của người quản lý hệ thống phụ phát hiện lỗi và bảng biểu tượng.

phân tích từ vựng (quét)

Máy quét chuyển đổi ký tự nguồn suối vào một dòng thẻ, loại bỏ khoảng trắng, ý kiến và macro mở rộng.

Máy quét thường gặp phải vấn đề, chẳng hạn như có hay không đưa vào tài khoản các trường hợp, lề, ngắt dòng và ý kiến nhúng.

Lỗi có thể xảy ra trong quá trình quét, được gọi là từ vựng và bao gồm:

  • nhân vật không có trong bảng chữ cái;
  • vượt quá số ký tự trong một từ hoặc dòng;
  • không phải là một dấu hiệu khép kín hoặc một chuỗi chữ;
  • cuối tập tin trong nhận xét.

Phân tích (phân tích)

Các phân tích cú pháp chuyển đổi trình tự của thẻ vào một cây cú pháp trừu tượng. Mỗi nút trong cây được lưu giữ như một đối tượng với các lĩnh vực được đặt tên, trong đó có nhiều bản thân các nút cây. Ở giai đoạn này không có chu kỳ. Khi bạn tạo một phân tích cú pháp là cần thiết phải chú ý đến mức độ phức tạp của ngữ pháp (LL hoặc LR) và tìm hiểu xem có bất kỳ quy tắc định hướng. Một số ngôn ngữ nào yêu cầu phân tích ngữ nghĩa.

Lỗi được tìm thấy ở giai đoạn này được gọi là cú pháp. Ví dụ:

  • k = 5 * (7 - y;
  • j = / 5;
  • 56 = x * 4.

phân tích ngữ nghĩa

Trong quá trình phân tích ngữ nghĩa để kiểm tra sự thừa các quy tắc và các bộ phận sư của cây phân tích cú pháp (cho phép tên tài liệu tham khảo chèn hoạt động cho các chuyển đổi kiểu ngầm, và vân vân. D.) Đối với hình thành các biểu đồ ngữ nghĩa.

Rõ ràng, các bộ chấp nhận của quy tắc trong ngôn ngữ khác nhau khác nhau. Nếu bạn biên dịch các ngôn ngữ Java như thế nào, trình biên dịch có thể tìm thấy:

  • nhiều khai báo biến trong phạm vi của nó;
  • một tham chiếu đến một biến trước khi tuyên bố của nó;
  • tham chiếu đến tên của không khai báo;
  • hành vi xâm phạm quyền sáng chế;
  • số lượng quá nhiều hoặc không đủ các đối số trong một lời gọi phương thức;
  • loại không phù hợp.

thế hệ

Trung cấp hệ mã tạo ra biểu đồ dòng chảy bao gồm các bộ, nhóm lại thành các khối cơ bản.

sinh mã tạo ra một mã máy thực sự. Trong trình biên dịch truyền thống cho RISC-máy trên bước đầu tiên, bạn tạo một lắp ráp với một số lượng vô hạn của thanh ghi ảo. Đối với CISC-máy có lẽ sẽ không xảy ra.

Similar articles

 

 

 

 

Trending Now

 

 

 

 

Newest

Copyright © 2018 vi.delachieve.com. Theme powered by WordPress.