Chƣơng trình dịch 1 Định nghĩa

Một phần của tài liệu Tài liệu automat (Trang 38 - 42)

2. 11 Otomat hữu hạn có lối ra

4.2.Chƣơng trình dịch 1 Định nghĩa

4.2.1. Định nghĩa

Chúng ta đều biết có rất nhiều loại máy tính khác nhau như máy PC, máy Macshintos với các chíp khác nhau và một ngơn ngữ máy khác nhau (tập các chỉ thị lệnh khác nhau).Việc xây dựng các ứng dụng trực tiếp trên ngôn ngữ máy là rất khó và phức tạp. Đối với các ứng dụng lớn thì điều này gần như là khơng khả thi.

Vì vậy nhu cầu có một ngơn ngữ trung gian, gần với ngôn ngữ tự nhiên là tất yếu, và khi đó cần có một hệ thống (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. Ngồi ra nhiê ̣m vu ̣ của mô ̣t chương trình di ̣ch không chỉ là chuyển mô ̣t chương trình từ mô ̣t ngôn ngữ lâ ̣p trình sang ngôn ngữ máy mà tổng quát là chuyển mô ̣t chương trình viết ở mô ̣t ngôn ngữ này sang ngôn ngữ khác . Thông thường ngôn ngữ nguồn là ngôn ngữ bâ ̣c cao và ngôn ngữ đích là ngơn ngữ bâ ̣c thấp, ví dụ như từ C hay Pascal sang Asembly.

Nói một cách đơn giản, trình biên dịch là một chương trình làm nhiệm vụ đọc một chương trình được viết bằng một ngơn ngữ - ngơn ngữ nguồn (source language) - rồi dịch nó thành một chương trình tương đương ở một ngơn ngữ khác - ngơn ngữ đích (target languague). Một phần quan trọng trong quá trình dịch là ghi nhận lại các lỗi có trong chương trình nguồn để thơng báo lại cho người viết chương trình.

Bài giảng mơn học: Ngơn ngữ hình thức và Otomat

35

Định nghĩa: Chương trình dịch là một chương trình thực hiện việc chuyển đổi một chương

trình hay một đoạn chương trình từ mộ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.

Sơ đồ một chương trình dịch như sau:

Hình 1.1 - Một trình biên dịch

Hệ thống biên dịch

Trong hệ thống biên dịch như Borland C, hay Turbo Pascal, tồn bộ chương trình nguồn được trình biên dịch chuyển sang chương trình đích ở dạng mã máy. Chương trình đích này có thể chạy độc lập trên máy mà khơng cần hệ thống biên dịch nữa.

Hệ thống Thông dịch (Interpreter)

Trong một hệ thống thơng dịch, chương trình thơng dịch đọc chương trình nguồn theo từng lệnh và phân tích rồi thực hiện nó, ví dụ như hệ điều hành thực hiện các câu lệnh DOS, hay hệ quản trị cơ sở dữ liệu Foxpro.

Một kiểu khác trong một hệ thống thông dịch là ngôn ngữ nguồn không được chuyển sang ngôn ngữ máy mà chuyển sang một ngơn ngữ 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, và chương trình thơng dịch thực hiện ngơn ngữ này cịn được gọi là máy ảo. Một hệ thống như vậy có thể được mơ tả như sơ đồ dưới đây:

chương trình nguồn (ngơn ngữ bậc cao) chương trình dịch chương trình nguồn (ngơn ngữ bậc cao) chương trình đích (ngơn ngữ máy) Lỗi

Bài giảng mơn học: Ngơn ngữ hình thức và Otomat

36 Một ví dụ rất đặc trưng cho hệ thống thơng dịch kiểu này là hệ thông dịch Java. Mã nguồn Java được dịch ra dạng Bytecode. File đích nà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 ta nói Java có thể chạy trên mọi hệ điều hành có cài máy ảo Java.

Một chương trình thơng dịch có kích thước nhỏ trình biên dịch nhưng chạy chậm hơn. Một chương trình biên dịch kết hợp với một chương trình thơng dịch tạo thành một chương trình dịch.

Các đặc trưng của một ngôn ngữ lập trình bậc cao

Mục đích chính của mơn học này là xây dựng một chương trình dịch cho một ngơn ngữ bậc cao. Vì vậy trong phần này chúng ta nhắc lại những đặc trưng của một ngôn ngữ bậc cao, mà những đặc trưng này sẽ được chúng ta phân tích trong các giai đoạn của một chương trình dịch. Chúng ta sẽ khơng phân tích mọi đặc điểm trong ngơn ngữ bậc cao như lớp, cấu trúc, đối tượng, … mà chỉ xét những đặc trưng cơ bản nhất để có những tìm hiểu bước đầu cho việc thiết kế và xây dựng một chương trình dịch.

Từ vựng

Cũng như ngơn ngữ tự nhiên, ngơn ngữ lập trình cũng được xây dựng dựa trên bộ từ vựng. Từ vựng trong ngơn ngữ lập trình thường được xâ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, . . . Chương trình nguồn Compiler CT ở NN trung gian Interpreter Kết quả Hình 1.2 Hệ thống thơng dịch

Bài giảng mơn học: Ngơn ngữ hình thức và Otomat

37 Các từ vựng này có những qui định nhất định ví dụ như tên thì viết bởi chữ cái đầu tiên và sau đó là khơng hoặc nhiều chữ cái hoặc chữ số, phép gán trong ngơn ngữ C là = cịn trong Pascal là :=, v. 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ựng củ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ộc tính của nó, nhiệm vụ này thuộc modun phân tích từ vựng.

Cú pháp (adsbygoogle = window.adsbygoogle || []).push({});

Cú pháp là thành phần quan 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ãn vă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úng ta quan tâm đến các cấu trúc này bao gồm:

1) các khai báo

2) biểu thức số học, biểu thức logic

3) 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, while

6) 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ó.

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ủa chương trình nguồn. Vấn đề này thuộc cơng việc của modun phân tích cú pháp.

Một vấn đề nữa là từ các cấu trúc này, phải chuyển thành các cấu trúc tương đương ở ngơn ngữ đích thế nào. Nhiệm vụ này là của phần sinh mã.

Ngữ nghĩa

Kiểm tra ngữ nghĩa của chương trình và một phần của một chương trình dịch. Ngữ nghĩa của một ngơn ngữ lập trình liên quan đến:

Bài giảng mơn học: Ngơn ngữ hình thức và Otomat

38 + Phân biệt và sử dụng đúng tên hằng, tên biến, tên hàm

Chương trình dịch phải kiểm tra được tính đúng đắn trong sử dụng các đại lượ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 được khai báo trùng, dùng cho gọi hàm phải là tên có thuộc tính hàm, . . .

Nhiệm vụ này là của phần phân tích ngữ nghĩa.

Một phần của tài liệu Tài liệu automat (Trang 38 - 42)