So sánh chương trình nguồn và chương trình dịch

  • lý thuyết
  • trắc nghiệm
  • hỏi đáp
  • bài tập sgk

Các câu hỏi tương tự


  • Toán lớp 11
  • Ngữ văn lớp 11
  • Tiếng Anh lớp 11

chương trình nguồn [ngôn ngữ bậc cao]chương trình dịchchương trình đích [ngôn ngữ máy]LỗiHình 1.1: Sơ đồ một chương trình dịchTổng quan về ngôn ngữ lập trình và chương trình dịch1. Ngôn ngữ lập trình và chương trình dịch.Con người muốn máy tính thực hiện công việc thì con người phải viết yêucầu đưa cho máy tính bằng ngôn ngữ máy hiểu được. Việc viết yêu cầu gọilà lập trình. Ngôn ngữ dùng để lập trình gọi là ngôn ngữ lập trình. Có nhiềungôn ngữ lập trình khác nhau. Dựa trên cơ sở của tính không phụ thuộcvào máy tính ngày càng cao người ta phân cấp các ngôn ngữ lập trình nhưsau:- Ngôn ngữ máy [machine languge]- Hợp ngữ [acsembly langguge] - Ngôn ngữ cấp cao [high level langguage]Ngôn ngữ máy chỉ gồm các số 0 và 1, khó hiểu đối với người sử dụng. Màngôn ngữ tự nhiên của con người lại dài dòng nhiều chi tiết mập mờ, không rõràng đối với máy. Để con người giao tiếp được với máy dễ dàng cần một ngônngữ trung gian gần với ngôn ngữ tự nhiên. Vì vậy ta cần có một chương trình đểdịch các chương trình trên ngôn ngữ này sang mã máy để có thể chạy được.Những chương trình làm nhiệm vụ như vậy gọi là các chương trình dịch. Ngoàira, một chương trình dịch còn chuyển một chương trình từ ngôn ngữ nay sangngôn ngữ khác tương đương. Thông thường ngôn ngưc nguồn là ngôn ngữ bậccao và ngôn ngữ đích là ngôn ngữ bậc thấp, ví dụ như ngôn ngữ Pascal hayngôn ngữ C sang ngôn ngữ Acsembly.* Định nghĩa chương trình dịch:Chương trình dịch là một chương trình thực hiện việc chuyển đổi mộtchương trình hay đoạn chương trình từ ngôn ngữ này [gọi là ngôn ngữ nguồn]sang ngôn ngữ khác [gọi là ngôn ngữ đích] tương đương.Để xây dựng được chương trình dịch cho một ngôn ngữ nào đó, ta cần biếtvề đặc tả của ngôn ngữ lập trình, cú pháp và ngữ nghĩa của ngôn ngữ lập trìnhđó… Để đặc tả ngôn ngữ lập trình, ta cần định nghĩa:- Tập các kí hiệu cần dùng trong các chương trình hợp lệ.- Tập các chương trình hợp lệ.- Nghĩa của từng chương trình hợp lệ.Việc định nghĩa tập các kí hiệu cần dùng của ngôn ngữ là dế dàng, ta chỉcần liệt kê là đủ. Việc xác định các chương trình hợp lệ thì khó khăn hơn.Thông thường ta dùng các luật của văn phạm để đặc tả. Việc thứ 3, định nghĩa ýnghĩa của chương trình hợp lệ là khó khăn nhất. Có 3 phương pháp để xác địnhnghĩa của chương trình hợp lệ.Chương trình nguồn Compiler CT ở NN trung gian InterpreterKết quảHình 1.2 Hệ thống thông dịch+ Phương pháp 1: định nghã bằng phép ánh xạ. ánh xạ mỗi chương trìnhvào một câu trong ngôn ngữ mà ta có thể hiểu được. + Phương pháp 2: Xác định ý nghĩa của chương trình bằng một máy lýtưởng. Ý nghĩa của chương rình được đăc tả trong ngôn từ của máy lý tưởng.Máy lý tưởng là bộ thông dịch của ngôn ngữ.+ Phương pháp 3: ý nghĩa cảu chương trình nguồn là sản phẩm xuất ra củatrình biên dịch, khi nó dịch chương trình nguồn.2. Phân loại chương trình dịch.Có thể phân thành nhiều loại tuỳ theo các tiêu chí khác nhau.- Theo số lần duyệt: Duyệt đơn, duyệt nhiều lần.- Theo mục đích: Tải và chạy, gỡ rối, tối ưu, chuyển đổi ngôn ngữ, chuyểnđôỉ định dạng…- Theo độ phức tạp của chương trình nguồn và đích: + Asembler [chương trình hợp dịch]: Dịch từ ngôn ngữ asembly ra ngônngữ máy. + Preproccessor: [tiền xử lý] : Dịch từ ngôn ngữ cấp cao sang ngôn ngữcấp cao khác [thực chất là dịch một số cấu trúc mới sang cấu trúc cũ].+ Compiler: [biên dịch] dịch từ ngôn ngữ cấp cao sang ngôn ngữ cấp thấp.- Theo phương pháp dịch chạy: + Thông dịch: [diễn giải - interpreter] chương trình thông dịch đọc chươngtrình nguồn theo từng lệnh và phân tích rồi thực hiện nó. [Ví dụ hệ điều hànhthực hiện các câu lệnh DOS, hay hệ quản trị cơ sở dữ liệu Foxpro]. Hoặc ngônngữ nguồn không được chuyển sang ngôn ngữ máy mà chuyển sang một ngônngữ trung gian. Một chương trình sẽ có nhiệm vụ đọc chương trình ở ngôn ngữtrung gian này và thực hiện từng câu lệnh. Ngôn ngữ trung gian được gọi làngôn ngữ của một máy ảo, chương trình thông dịch thực hiện ngôn ngữ này gọilà máy ảo. Ví dụ hệ thông dịch Java. Mã nguồn Java được dịch ra dạng Bytecode. File đíchnày được một trình thông dịch gọi là máy ảo Java thực hiện. Chính vì vậy mà người tanói Java có thể chạy trên mọi hệ điều hành có cài máy ảo Java.+ Biên dịch: toàn bộ chương trình nguồn được trình biên dịch chuyển sangchương trình đích ở dạng mã máy. Chương trình đích này có thể chạy độc lậptrên máy mà không cần hệ thống biên dịch nữa.- Theo lớp văn phạm: LL [1] [LL – Left to right, leftmost] LR[1] [LR – letfto right, right most] 1.3. Cấu trúc của chương trình dịch.1.3.1. cấu trúc tĩnh [cấu trúc logic]1] Phân tích từ vựng: đọc luồng kí tự tạo thành chương trình nguồn từ trái sangphải, tách ra thành các từ tố [token].- Từ vựng: Cũng như ngôn ngữ tự nhiên, ngôn ngữ lập trình cũng đượcxây dựng dựa trên bộ từ vựng. Từ vựng trong ngôn ngữ lập trình thường đượcxây dựng dựa trên bộ chữ gồm có:+ chữ cái: A .. Z, a . . z+ chữ số: 0..9+ các ký hiệu toán học: +, - , *, /, [, ], =, , !, %, /+ các ký hiệu khác: [, ], . . . Các từ vựng được ngôn ngữ hiểu bao gồm các từ khóa, các tên hàm, tên hằng,tên biến, các phép toán, . . .Các từ vựng có những qui định nhất định ví dụ: tên viết bởi chữ cái đầu tiên sauđó là không hoặc nhiều chữ cái hoặc chữ số, phép gán trong C là =, trongPascal là :=,v. . . Để xây dựng một chương trình dịch, hệ thống phải tìm hiểu tập từ vựngcủa ngôn ngữ nguồn và phân tích để biết được từng loại từ vựng và các thuộctính của nó, Ví dụ: Câu lệnh trong chương trình nguồnviết bằng ngôn ngữ pascal: “a := b + c * 60”Chương trình phân tích từ vựng sẽ trả về: a là tên [tên [định danh ]]:= là toán tử gánb là tên [định danh] + là toán tử cộngc là định danh * là toán tử nhân 60 là một sốKết quả phân tích từ vựng sẽ là: [tên,a], phép gán, [tên, b] phép cộng [tên, c]phép nhân, [số, 60] 2]. Phân tích cú pháp: Phân tích cấu trúcngữ pháp của chương trình. Các từ tố đượcnhóm lại theo cấu trúc phân cấp.- Cú pháp: Cú pháp là thành phầnquan trọng nhất trong một ngôn ngữ. Nhưchúng ta đã biết trong ngôn ngữ hình thức thì ngôn ngữ là tập các câu thỏa mãnvăn phạm của ngôn ngữ đó. Ví dụ như câu = chủ ngữ + vị ngữvị ngữ = động từ + bổ ngữv.v. . . Trong ngôn ngữ lập trình, cú pháp của nó được thể hiện bởi một bộ luật cúpháp. Bộ luật này dùng để mô tả cấu trúc của chương trình, các câu lệnh. Chúngta quan tâm đến các cấu trúc này bao gồm:1] các khai báo2] biểu thức số học, biểu thức logic3] các lệnh: lệnh gán, lệnh gọi hàm, lệnh vào ra, . . .4] câu lệnh điều kiện if 5] câu lệnh lặp: for, while6] chương trình con [hàm và thủ tục]Nhiệm vụ trước tiên là phải biết được bộ luật cú pháp của ngôn ngữ mà mìnhđịnh xây dựng chương trình cho nó.Với một chuỗi từ tố và tập luật cú pháp của ngôn ngữ, bộ phân tích cúpháp tự động đưa ra cây cú pháp cho chuỗi nhập. Khi cây cú pháp xây dựngxong thì quá trình phân tích cú pháp của chuỗi nhập kết thúc thành công. Ngượclại nếu bộ phân tích cú pháp áp dụng tất cả các luật hiện có nhưng không thểxây dựng được cây cú pháp của chuỗi nhập thì thông báo rằng chuỗi nhậpkhông viết đúng cú pháp.Chương trình phải phân tích chương trình nguồn thành các cấu trúc cúpháp của ngôn ngữ, từ đó để kiểm tra tính đúng đắn về mặt ngữ pháp củachương trình nguồn. 3]. Phân tích ngữ nghĩa: Phân tích các đặc tính khác của chương trình mà khôngphải đặc tính cú pháp. Kiểm tra chương trình nguồn để tìm lỗi cú pháp và sự hợp kiểu.Dựa trên cây cú pháp bộ phân tích ngữ nghĩa xử lý từng phép toán. Mỗi phép toánnó kiểm tra các toán hạng và loại dữ liệu của chúng có phù hợp với phép toán không. VD: tên [biến] được khai báo kiểu real, 60 là số kiểu interge vì vậy trình biên dịch đổi thành số thực 60.0.- Ngữ nghĩa: của một ngôn ngữ lập trình liên quan đến:+ Kiểu, phạm vi của hằng và biến+ Phân biệt và sử dụng đúng tên hằng, tên biến, tên hàmChương trình dịch phải kiểm tra được tính đúng đắn trong sử dụng các đạilượng này. Ví dụ kiểm tra không cho gán giá trị cho hằng, kiểm tra tính đúngđắn trong gán kiểu, kiểm tra phạm vi, kiểm tra sử dụng tên như tên không đượckhai báo trùng, dùng cho gọi hàm phải là tên có thuộc tính hàm, . . .

Sự khác biệt giữa Trình biên dịch và Trình thông dịch - Công Nghệ

NộI Dung:

Trình biên dịch là trình dịch chuyển ngôn ngữ nguồn [ngôn ngữ cấp cao] thành ngôn ngữ đối tượng [ngôn ngữ máy]. Ngược lại với trình biên dịch, trình thông dịch là một chương trình bắt chước việc thực thi các chương trình được viết bằng ngôn ngữ nguồn. Một sự khác biệt giữa Trình biên dịch và trình thông dịch là Trình biên dịch chuyển đổi toàn bộ chương trình trong một lần, mặt khác Trình thông dịch chuyển đổi chương trình bằng cách lấy một dòng duy nhất tại một thời điểm.

Rõ ràng là khả năng nhận biết của con người và một thiết bị điện tử như máy tính là khác nhau. Con người có thể hiểu bất cứ thứ gì thông qua ngôn ngữ tự nhiên, nhưng máy tính thì không. Máy tính cần một trình dịch để chuyển đổi các ngôn ngữ được viết ở dạng con người có thể đọc được sang dạng máy tính có thể đọc được.

Trình biên dịch và thông dịch viên là các loại trình dịch ngôn ngữ. Phiên dịch ngôn ngữ là gì? Câu hỏi này có thể nảy sinh trong đầu bạn.


Trình dịch ngôn ngữ là một phần mềm dịch các chương trình từ một ngôn ngữ nguồn ở dạng có thể đọc được của con người thành một chương trình tương đương trong một ngôn ngữ đối tượng. Ngôn ngữ nguồn thường là ngôn ngữ lập trình cấp cao và ngôn ngữ đối tượng thường là ngôn ngữ máy của một máy tính thực tế.

Biểu đồ so sánh

Cơ sở để so sánhTrình biên dịchThông dịch viên
Đầu vàoNó có toàn bộ chương trình cùng một lúc.
Mỗi lần cần một dòng mã hoặc chỉ dẫn.
Đầu raNó tạo ra mã đối tượng trung gian.Nó không tạo ra bất kỳ mã đối tượng trung gian nào.
Cơ chế làm việc
Việc biên dịch được thực hiện trước khi thực thi.Biên dịch và thực hiện diễn ra đồng thời.
Tốc độTương đối nhanh hơnChậm hơn
Ký ứcYêu cầu bộ nhớ nhiều hơn do việc tạo mã đối tượng.Nó yêu cầu ít bộ nhớ hơn vì nó không tạo mã đối tượng trung gian.
Lỗi
Hiển thị tất cả các lỗi sau khi biên dịch, tất cả cùng một lúc.Hiển thị lỗi của từng dòng một.
Phát hiện lỗiKhó khăn So sánh dễ dàng hơn
Thúc đẩy ngôn ngữ lập trình
C, C ++, C #, Scala, typecript sử dụng trình biên dịch.PHP, Perl, Python, Ruby sử dụng trình thông dịch.


Định nghĩa của trình biên dịch

Trình biên dịch là chương trình đọc một chương trình được viết bằng ngôn ngữ cấp cao và chuyển đổi nó thành ngôn ngữ máy hoặc ngôn ngữ cấp thấp và báo cáo các lỗi có trong chương trình. Nó chuyển đổi toàn bộ mã nguồn trong một lần hoặc có thể mất nhiều lần để làm như vậy, nhưng cuối cùng, người dùng nhận được mã đã biên dịch sẵn sàng để thực thi.

Trình biên dịch hoạt động trên các giai đoạn; các giai đoạn khác nhau có thể được nhóm lại thành hai phần:

  • Giai đoạn phân tích của trình biên dịch còn được gọi là giao diện người dùng trong đó chương trình được chia thành các phần cấu thành cơ bản và kiểm tra ngữ pháp, ngữ nghĩa và cú pháp của mã sau đó mã trung gian được tạo ra. Giai đoạn phân tích bao gồm bộ phân tích từ vựng, bộ phân tích ngữ nghĩa và bộ phân tích cú pháp.
  • Giai đoạn tổng hợp của trình biên dịch còn được gọi là phần cuối trong đó mã trung gian được tối ưu hóa và mã đích được tạo. Giai đoạn tổng hợp bao gồm trình tối ưu hóa mã và trình tạo mã.

Các giai đoạn của trình biên dịch

Bây giờ chúng ta hãy hiểu chi tiết hoạt động của từng giai đoạn.


  1. Lexical Analyzer: Nó quét mã dưới dạng một luồng ký tự, nhóm chuỗi ký tự thành từ vựng và xuất ra một chuỗi mã thông báo tham chiếu đến ngôn ngữ lập trình.
  2. Trình phân tích cú pháp: Trong giai đoạn này, các mã thông báo được tạo ở giai đoạn trước được kiểm tra dựa trên ngữ pháp của ngôn ngữ lập trình, xem các biểu thức có chính xác về mặt cú pháp hay không. Nó làm cho cây phân tích cú pháp để làm như vậy.
  3. Trình phân tích ngữ nghĩa: Nó xác minh xem các biểu thức và câu lệnh được tạo trong giai đoạn trước có tuân theo quy tắc của ngôn ngữ lập trình hay không và nó tạo ra các cây phân tích cú pháp có chú thích.
  4. Trình tạo mã trung gian: Nó tạo ra một mã trung gian tương đương của mã nguồn. Có nhiều cách biểu diễn mã trung gian, nhưng TAC [Mã ba địa chỉ] được sử dụng rộng rãi nhất.
  5. Trình tối ưu hóa mã: Nó cải thiện yêu cầu về thời gian và không gian của chương trình. Để làm như vậy, nó sẽ loại bỏ mã dư thừa có trong chương trình.
  6. Trình tạo mã: Đây là giai đoạn cuối cùng của trình biên dịch trong đó mã đích cho một máy cụ thể được tạo. Nó thực hiện các hoạt động như quản lý bộ nhớ, gán Đăng ký và tối ưu hóa máy cụ thể.

Các bảng ký hiệu là một cấu trúc dữ liệu quản lý số nhận dạng cùng với loại dữ liệu có liên quan mà nó đang lưu trữ. Xử lý lỗi phát hiện, báo cáo, sửa chữa các lỗi gặp phải giữa các giai đoạn khác nhau của trình biên dịch.

Định nghĩa của Thông dịch viên

Trình thông dịch là một giải pháp thay thế để triển khai ngôn ngữ lập trình và thực hiện công việc tương tự như trình biên dịch. Phiên dịch viên thực hiện lexing, phân tích cú phápkiểm tra loại tương tự như một trình biên dịch. Nhưng trình thông dịch xử lý cây cú pháp trực tiếp để truy cập các biểu thức và thực thi câu lệnh chứ không phải tạo mã từ cây cú pháp.

Một trình thông dịch có thể yêu cầu xử lý cùng một cây cú pháp nhiều lần, đó là lý do tại sao việc thông dịch tương đối chậm hơn so với việc thực thi chương trình đã biên dịch.

Biên dịch và thông dịch có thể được kết hợp để triển khai một ngôn ngữ lập trình. Trong đó trình biên dịch tạo ra mã cấp trung gian sau đó mã được thông dịch thay vì biên dịch thành mã máy.

Việc sử dụng thông dịch viên là một lợi thế trong quá trình phát triển chương trình, trong đó phần quan trọng nhất là có thể kiểm tra việc sửa đổi chương trình nhanh chóng thay vì chạy chương trình một cách hiệu quả.

Sự khác biệt chính giữa trình biên dịch và thông dịch viên

Hãy xem xét sự khác biệt chính giữa Trình biên dịch và Trình thông dịch.

  1. Trình biên dịch nhận một chương trình tổng thể và dịch nó, nhưng trình thông dịch dịch một câu lệnh chương trình theo câu lệnh.
  2. Mã trung gian hoặc mã đích được tạo trong trường hợp có trình biên dịch. Đối với thông dịch viên không tạo mã trung gian.
  3. Trình biên dịch tương đối nhanh hơn Trình thông dịch vì trình biên dịch thực hiện toàn bộ chương trình cùng một lúc trong khi trình thông dịch biên dịch từng dòng mã này đến dòng mã khác.
  4. Trình biên dịch yêu cầu nhiều bộ nhớ hơn trình thông dịch do việc tạo ra mã đối tượng.
  5. Trình biên dịch hiển thị tất cả các lỗi đồng thời và rất khó để phát hiện lỗi trong khi lỗi hiển thị của trình thông dịch tương phản của từng câu lệnh một và việc phát hiện lỗi sẽ dễ dàng hơn.
  6. Trong trình biên dịch khi chương trình xảy ra lỗi, chương trình sẽ dừng dịch và sau khi loại bỏ lỗi, toàn bộ chương trình sẽ được dịch lại. Ngược lại, khi một lỗi xảy ra trong trình thông dịch, nó sẽ ngăn bản dịch của nó và sau khi loại bỏ lỗi, bản dịch sẽ tiếp tục.
  7. Trong một trình biên dịch, quá trình này yêu cầu hai bước, trong đó trước hết mã nguồn được dịch sang chương trình đích sau đó được thực thi. Trong khi ở trong Trình thông dịch Đó là quy trình một bước trong đó Mã nguồn được biên dịch và thực thi cùng một lúc.
  8. Trình biên dịch được sử dụng trong các ngôn ngữ lập trình như C, C ++, C #, Scala, v.v. Mặt khác, Trình thông dịch được sử dụng trong các ngôn ngữ như PHP, Ruby, Python, v.v.

Phần kết luận

Trình biên dịch và trình thông dịch đều nhằm thực hiện cùng một công việc nhưng khác nhau về quy trình hoạt động, Trình biên dịch lấy mã nguồn theo cách tổng hợp trong khi Trình thông dịch lấy các phần cấu thành của mã nguồn, tức là từng câu lệnh.

Mặc dù cả trình biên dịch và trình thông dịch đều có những ưu điểm và nhược điểm nhất định như các ngôn ngữ được thông dịch được coi là đa nền tảng, tức là mã có tính di động. Nó cũng không cần phải biên dịch hướng dẫn trước đây không giống như trình biên dịch tiết kiệm thời gian. Các ngôn ngữ biên dịch liên quan đến quá trình biên dịch nhanh hơn.

Video liên quan

Chủ Đề