Tải bản đầy đủ (.doc) (12 trang)

Đề cương chương trình dịch

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (143.21 KB, 12 trang )

ĐỀ CƯƠNG CHƯƠNG TRÌNH DỊCH
Họ tên: Giáp Thị Hiền
Lớp: sp tink45
Câu 1: Định nghĩa chương trình dịch, cấu trúc tĩnh cấu trúc động
Định nghĩa chương trình dịch:
- Chương trình 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 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.chương trình dịch còn gọi là chương trình biên dịch.
- Một phần quan trong 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.

Một trình biên dịch
Các giai đoạn của chương trình dịch:
1 .Cấu trúc tĩnh của chương trình dịch.
- Theo cấu trúc tĩnh (cấu trúc logic), chương trình dịch chia là 2 giai
đoạn:
+ Phân tích (kỳ trước): xác định các từ nào là đúng ? các thành phần
của câu lệnh có
tuân theo luật cú pháp hay không ?. từ đó hiểu được phải giải thích?
Hiểu được dạng trình bày của ngôn ngữ.
+ Tổng hợp.( kỳ sau) : tổng hợp các thông tin thu được chuyển thành
câu mới trong ngôn ngữ đích sao cho nó có ý nghĩa với câu ban đầu.
Trình biên dịch
Chương
trình
nguồn
Thông
báo lỗi
Chương


trình đích
Các giai đoạn của một chương trình biên dịch
“Các giai đoạn phân tích”
a. Phân tích từ vựng : là đọc chương trình nguần từ trái qua phải để
tách ra thành các thẻ từ (tocken).
- Trong quá trình phân tích từ vựng các khoảng trăng (blank) sẽ bị bỏ
qua
b. Phân tích cú pháp
- Thực hiện công việc nhó các token của chương trình nguần thành
các cụm từ văn phạm sau đó sẽ biên dịch tổng hợp ra thành phần .
- Thông thường các cụm từ văn phạm này được biểu diên bằng cây
phân tích cú pháp với:
+ Ngôn ngữ được ddin bởi luật sinh
+ Phân tích cú pháp dựa vào luật sinh để xây dưng cây phân tích cú
pháp.
Cấu trúc phân cấp của một chương trinh thường được diễn tả bởi quy
luật đệ quy.
c. phân tích ngữ nghĩa:
- Kiểm tra xem chương trình nguồn có chứa lỗi về ngữ nghĩa hay
không.
Phân tích từ vựng
Phân tích cú pháp
Phân tích ngữ nghĩa
Sinh mã trung gian
Quản lý lỗi
Quản lý bảng
ký tự
Tối ưu mã
Sinh mã đích
Chương trình nguồn

2
Chương trình đích
- Tập hợp thông tin về các kiểu dữ liệu cho giai đoạn sinh mã về sau.
- Sử dụng cấu trúc phân cấp của giai đoạn phân tích cú pháp để xác
định các toán tử, toán hạng của các biểu thức câu lệnh .
- Một phần quan trong của giai đoạn phân tích ngữ nghĩa là kiểm tra
và ép chuyển đổi kiểu.
“các giai đoạn tổng hợp”
d. Sinh mã trung gian
- Sau khi phân tích cấu trúc và ngữ nghĩa, 1 số trình biên dịch sẽ tạo ra
một số dạng biểu diễn trung gian của chương trình nguồn
- Một chương trình dành cho một máy trừu tượng
- Mã trung gian có hai đặc tính quan trọng:
+ Dễ tạo:
+ Dễ dàng chuyển đổi thành chương trình đích
- Thường sử dụng “mã máy 3 địa chỉ”
e. Tối ưu mã:
- Giai đoạn tối ưu mã cố gắng tối ưu mã trung gian để thu được mã
máy thực hiện nhanh hơn.
f. Sinh mã đích:
- Giai đoạn cuối cùng của biên dịch là sinh mã đích, thường là mã máy
hoặc là hợp ngữ.
- Vị trí các vùng nhớ gán cho các biến được chương trình sử dụng.
- Sau đó, các lệnh trung gian được dịch lần lượt thành chuỗi các chỉ
thị mã máy.
g. Quản lý bảng ký tự:
- Một nhiệm vụ quan trọng của trình biên dịch là ghi lại các định danh
được sử dụng trong chương trình nguồn và thu thập các thông tin về
thuộc tính khác nhau của mỗi định danh .
- Các thuộc tính cung cấp thông tin về vị trí bộ nhớ được cấp phát cho

một định danh, kiểu và phạm vi định danh.
- Nếu định danh là tên của một thủ tục thì thuộc tính các tin về số
lượng và kiểu của các đối số, phương pháp truyền đối số về kiểu trả về
của thủ tục.
h. Xủ lý lỗi.
- Mỗi giai đoạn có thể gặp nhiều lỗi, tuy nhiên sau khi phát hiện ra lỗi,
tùy thuộc vào trình biên dịch mà mà có cách xử lý lỗi khác nhau.
- Giai đoạn phân tích cú pháp gặp lỗi khi các token không thể kết hợp
với nhau theo đúng cấu trúc ngôn ngữ.
- Giai đoạn phân tích từ vựng thường gặp lỗi khi các ký tự không thể
ghép thành một token.
- Giai đoạn phân tích ngữ nghĩa báo lỗi khi các toán hạng có kiểu
không đúng yêu cầu của phép toán hay các kết cấu không có nghĩa đối
với thao tác thực hiện mặc dù chúng hoàn toàn đúng về mặt cú pháp.
3
2. Cấu trúc động của chương trình
- Cho biết mối quan hệ giữa các thành phần khi nói hoạt động các giai
đoạn của chuong trình dịch (phân tích từ vựng, phân tích cú pháp,
phân tích ngữ nghĩa, tối ưu, sinh mã) có thể hoạt động theo hai cách
lần lượt hoặc đồng thời.
- Một số giai đoạn biên dịch thường được cài đặt bằng một lượt duy
nhất bao gồm việc đọc một file dữ liệu vào rồi phân tích và cho kết
quả ra một file đích.
- Người ta thường nhóm một giai đoạn vào một lượt vào hoạt động
của các giai đoạn này đan xen lần nhau
a. Thiết kế duyệt lần lượt
- Một số thành phần của chương trình được thực hiện đồng thời.
+ Bộ phân tích cú pháp đóng vai trò trung tâm, nó sẽ gọi bộ phân tích
từ vựng khi nó cần một từ đó tiếp theo và nó gọi bộ phân tích ngữ
nghĩa khi nó muốn chuyển cho một cấu trúc cú pháp đã được phân

tích.
+ Bộ phân tích ngữ nghĩa lại đưa cấu trúc sang phần sinh mã trung
gian để sinh ra các mã rồi đưa vào bộ tối ưu và sinh mã.
+ Sơ đồ
Phân tích cú pháp
Phân tích từ vựng
phân tích ngữ ngĩa
Sinh mã trung gian
Chương trình nguồn Tối ưu mã
Sinh mã

Chươntrình đích
b. Thiết kế duyệt nhiều lượt.
- Các thành phần trong chương trình dịch được thực hiện lật lượt và
độc lập với nhau.
Qua mỗi phần, kết quả sẽ được lưu lại và làm đầu vào cho bước tiếp
theo.
- Đơn giản về mặt logic thực hiện (hết giai đoạn này => gđ khác)
- Tuy nhiên, chương trình chạy chậm hơn nhiều lần vì phải truy xuất
lại kết quả của các giai đoạn trước từ thiết bị lưu trữ ngoài.
4
Câu 2. Mục đích của phân tích từ vựng? Tại sao phải tách rời
phân tích từ vựng với phân tích cú pháp?
Mục đích.
- phân tích từ vựng là giai đoạn đầu của mọi trình biên dịch. Mục
đích của phân tích từ vựng là giúp cho nhiệm vụ của các giai đoạn
biên dịch tiếp theo dế dàng hơn, hiệu quả hơn trình biên dịch được cải
thiện.
Lý do phải tách rời phân tích từ vựng với phân tích cú pháp.
Ví dụ: bộ phân tích cú pháp không phải xử lý các khoảng trắng hay

các lời chú thích vì chúng đã được bộ phân tích từ vựng loại bỏ
+ Nó làm cho việc thiết kế đơn giản và dễ hiểu hơn. Chẳng hạn bộ
phân tích cú pháp sẽ không phải xử lý các khoảng trắng hay các lời
chú thích nữa vì chúng đã được bộ phân tích từ vựng loại bỏ.
+ Hiệu quả của chương trình dịch cũng sẽ được cải thiện, nhờ vào một
số chương trình xử lý chuyên dụng, sẽ làm giảm đáng kể thời gian đọc
dữ liệu từ chương trình nguồn và nhóm các token.
+ Tính đa tương thích của trình biên dịch cũng được cải thiện
Đặc tính của bộ ký tự nhập và những khác biệt của từng loại thiết bị
có thể giới hạn trong các bước phân tích từ vựng. Dạng biểu diễn của
các ký hiệu đặc biệt hoặc là những ký hiệu không chuẩn, chẳng hạn
như ký hiệu ( trong pascal có thể được cô lập trong bộ phân tích từ
vựng.
Câu 3. các chiến lực khắc phục hồi lỗi trong phân tích từ vựng.
- Chỉ 1 số ít lỗi được phát hiện tại bước phân tích từ vựng, bởi vì bộ
phân tích từ vựng có nhiều cách nhận chương trình nguồn.
- Ví dụ: chuỗi fi được nhìn thấy lần đâu tiên trong một chương trình
C với ngữ cảnh:
fi (a= =f(x)….
- Bộ phân tích từ vựng không thể biết đây là lỗi không viết đúng từ
khóa if hay một đinh danh chưa được khai báo.
Vì if là một định danh hợp lệ nên bộ phân tích từ vựng phải trả về một
token và để giai đoạn khác sau đó xác định lỗi .
+ Các lỗi mà bộ phân tích từ vựng phát hiện là các lỗi về từ vị không
đúng
Ví dụ: trong pascal viết nhầm lệnh := thành !=
Lỗi xẩy ra khi bộ phân tích không thể tìm được một luật thành từ đó
nào đúng với phần lại của xâu.
- Cách 1: hệ thống ngừng hoạt động và thông báo lỗi cho người sử
dụng .

- Cách tốt hơn bộ phân tích từ vựng sẽ ghi lại các lỗi này và cố gắng
bỏ quả chúng để hệ thống có thể tiếp tục làm việc, nhằm phát hiện
đồng thời thêm nhiều lỗi khác.
- Tuy nhiên trong 1 vài tình huống phải khắc phục lỗi để phân tích
tiếp.
5
- Chiến lược đơn giản nhất là “phương thức hoảng sợ” các kí tự tiếp
theo xóa ra khỏi chuỗi nhập còn lại cho đến khi tìm ra một token hoàn
chỉnh.
- Kỹ thuật này đôi khi cũng gay ra sự nhầm lẫn cho giai đoạn phân
tích cú pháp nhưng vẫn có thể sử dụng được;
Một số chiến lược khác phục lỗi khác là:
+ Xóa đi hoặc nhảy qua các kí tự mà bộ phân tích không tìm được từ
tố.
+ Thêm một kí tự bị mất.
+ Thay thế một kí tự không đúng bằng kí tự đúng.
+ Chuyển đổi 2 kí kế tiếp nhau.
Câu 4. Mục đích nhiệm vụ của phân tích cú pháp, các phương
pháp phân tích cú pháp cơ bản.
Mục đích nhiệm vụ của phân tích cú pháp:
- Nhận chuỗi các token từ bộ phân tích từ vựng và xác định xem
chuỗi đó có được sinh ra bởi văn phạm của ngôn ngữ nguồn bằng cách
tạo ra cây phân tích cú pháp cho chuỗi.
- Có cơ chế ghi nhận các lỗi cú pháp theo một phương thức linh hoạt.
- Có khả năng phục hồi được các lỗi thường gặp để có thể tiếp tục xử
lý phần chuỗi nhập.
 Mục đích. Phân tích cú pháp là để tìm ra cấu trúc cú pháp dựa
trên văn phạm của một chương trình nguần.
 Các phương pháp phân tích cú pháp cơ bản:
- Có hai chiên lược phân tích cơ bản:

Bộ phân
tích từ
vựng
Bộ phân
tích cú
phap
6
1. Phân tích từ trên xuống (topdown )
- Là cách tạo ra một cây phân tích cho xâu nhập bắt đầu từ đỉnh vào
đi xuống cho đến lá.
- Dùng 1 con chỏ chỉ đến xâu vào : kí hiệu trên xâu vào do con trỏ
chỉ đến gọi là kí hiệu vào hiện tại. Vị trí đầu tiên của con trỏ là kí hiệu
bên trái nhất của xâu vào.
- Bắt đầu với cây phân tích chỉ có một nút duy nhất là nút gốc s:
- Tiến hành các bước đệ quy như sau:
+ Nếu nút đang xét là một kí hiệu không kết thúc A thi lấy chọn đầu
tiên, kí hiệu là x
1
…x
k
Lại lấy nút x
1
là nút đang xét. Trường hợp k=0 thì lấy ngay nút bên
phải A làm nút đang xét.
+ Nếu nút đang xét là nút kí hiệu kết thúc a, thì so sánh nó với, kí hiệu
vào hiện tại.
+ Nếu trùng nhau thì lấy nút ngay bên trái a làm nút đang xét và
chuyển con trỏ xâu vào sang bên phải một kí hiệu.
Nếu a không giống thì quay lại nút do sản xuất trước tạo ra: điều chỉnh
lại con trỏ xâu vào nếu cần thiết sau đó lại quay lại nút trước đó và cứ

như vậy.
2. phân tích buttom up.
- Là phương pháp phân tích bắt đầu từ là cố gắng xây dựng thành cây
bằng cách hướng lên
- Phân tích butoom-up được gọi là phân tích gạt thu gon.
- Cấu tạo:
+ Dùng 1: bộ đệm để chứa xâu cần phân tích w.
+ Dùng 1 stack để đẩy các kí tự trên xâu vào
+ Khởi đầu: đầu đọc trỏ vào kí tự đầu tiên và đánh dấu stack.
- Hoạt đông:
+ Khởi đầu thì satck rỗng, chuỗi w nằm trong bộ đệm
+ Bộ phân tích lần lượt gạt các kí hiệu đầu vào từ trái sang phải vào
ngăn xếp đến khi gạt được một thu gọn thì thu gọn (thay thế vp trên
đỉnh ngăn xếp bởi vt của sản xuất đó)
+ Nếu có nhiều cách thu gọn tại một trạng thái thì lưu lại cho quá trình
quay lui. Quá trình cứ thế tiếp tục, nếu dừng lại mà chưa đạt đến trạng
thái kết thúc thì quay lại tại bước quay lui gần nhất.
+ Nếu quá trình đạt đến trạng thái ngăn xếp là $s$ xâu vào là $ thì quá
trình kết thúc $ phân tích thành công.
+ Nếu đã xét tất cả các trường hợp $ không thể quay lui được nữa mà
chưa đạt đên trạng thái kết thúc thì dừng lại $ thông báo xâu vào
không phân tích được bởi vp đã cho.
3. Phân tích bằng cyk.
4. Phương pháp phân tích LL
5. Phương pháp phân tích LR.
Câu 5. Trình bày các lỗi được phát hiện trong phương pháp phân
tích LL.
7
- Một lỗi sẽ được tìm thấy trong phân tích dự đóan khi.
- Kí hiệu kết thúc trên đỉnh stack không phù hợp với token kế tiếp trong

dòng nhập hoặc:
- Trên đỉnh stack là kí hiệu chưa kết thúc A, token trong dòng nhập là a
nhưng M[A,a] rỗng
- Phục hồi lỗi theo phương pháp panic-mode là bỏ qua các kí hiệu
trong dòng nhập là cho đến khi gặp một phần tử trong tập hợp token
đồng bộ.
- Tính hiệu quả của phương pháp này tùy thuộc vào cách chọn tập
hợp các token đồng bộ . Một số heuristics có thể là:
+ Ta có thể đưa tất cả các kí hiệu trong folow(a) vào trong tập hợp
token đồng bộ cho kí hiệu chưa kết thúc A.
+ Follow(A) cũng chưa phải là một tập hợp các token đồng bộ cho A
VD: các lệnh của C kết thúc bởi chấm phẩy (dấu ;) nếu lệnh thiếu dấu
chấm phẩy thì từ khóa của lệnh kế tiếp sẽ bị bỏ qua. Thông thường các
ngôn ngữ có cấu trúc phân cấp.
- Vd biểu thức nằm trong một câu lệnh, lệnh nằm trong một khối
lệnh chúng ta có thê thêm vào tập hợp của một cấu trúc những ký hiệu
mà nó bắt đầu cho một cấu trúc cao hơn.
VD: ta có thể thêm các từ khóa bắt đầu cho các lệnh vào tập đồng bộ
cho ký hiệu chưa kết thúc sinh ra biểu thức.
+ Nếu chúng ta thêm các phần tử của first(A) vào tập đồng bộ cho ký
hiệu chưa kết thúc thì quá trình phân tích có thể hòa hợp với A nếu 1 ký
hiệu trong first(A) xuất hiện trong dòng nhập.
+ Nếu một ký hiệu không kết thúc có thể sinh ra môt xâu rỗng thì sản
xuất suy dẫn ra có thể được sử dụng như ngầm định. Thực hiện điều
này thì có thể phát hiện được lỗi nhưng không làm mất được lỗi nên
dùng để giảm số lượng các kí hiệu không kết thúc phải xem xét trong
lúc phải khắc phục lỗi.
+ Nếu 1 ký hiệu kết thúc nằm trên đỉnh ngăn xếp không đúng thì loại
bỏ ký hiệu kết thúc này dựa ra một thông báo vào tiếp tục phân tích=>
tạo nên tập đồng bộ của một từ tố co chứa tất các từ tố khác.

Câu 6. Mục đích, ý nghĩa bộ xử lý lỗi trong phân tích cú pháp và các
chiến lược phục hồi lỗi?
• Mục đích ý nghĩa bộ xử lý lỗi trong phân tích cú pháp
- Phần lớn việc phát hiện và phục hồi lỗi trong một trình biên dịch
tập trung vào giai đoạn phân tích cú pháp. Vì thế bộ xử lý lỗi trong
quá trình phân tích cú pháp phải đạt mục đích sau:
+ Ghi nhận và thông báo lỗi một cách rõ ràng và chính xác.
+ Phục hồi lỗi một cách nhanh chóng để có thể xác định các lỗi tiếp
theo.
+ Không làm chậm tiến trình của một chương trinh đúng.
• Các chiến lược phục hồi lỗi.
- Phục hồi lỗi là kỹ thuật vượt qua các lỗi để tiếp tục quá trình dịch.
- Phục hồi kiểu “trừng phạt”
8
+ Là phương pháp đơn giản nhất cho cài đặt, có thể dùng cho hầu hết
các phương pháp phân tích.
+ Khi 1 lỗi được phát hiện thị bộ phân tích cú pháp bỏ qua từng kí
hiệu một cho đến khi tìm thấy một tập hợp được chỉ định của các
token đồng bộ.
+ Các token đồng bộ thường đã được xác đinh trước.
- Khôi phục cụm từ:
+ Khi phát hiện một lỗi bộ phân tích cú pháp cố gắng phân tích cục bộ
trên phần còn lại của dòng nhập.
- Nó có thể thay thế phần đầu của phần còn lại này bằng một xâu
nào đó cho phép bộ phân tích làm việc tiếp.
- vd: thay dấu(,) bởi(;) xóa một dấu(,) lạ hoặc thêm vào một dấu(;)
- Chiến lược dùng các luật sinh sửa lỗi
+ Thêm vào vp của ngôn ngữ luật sinh hay sinh ra các cấu trúc lỗi và
sử dụng văn phạm này để xây dựng bộ phân tích cú pháp.
+ Nếu bộ phân tích dùng một luật lỗi chúng ta có thể sinh ra bộ đoán

lỗi thích hợp để chỉ ra cấu trúc lỗi được nhận biết trong dòng nhập.
- Chiến lược hiệu chỉnh toàn cục:
+ Một cách lý tưởng là tạo ra một số thay đổi trong khi xử lý một lỗi
có những giải thuật để lựa chọn được chuỗi thay đổi nhỏ nhất để đạt
được sự hiệu chỉnh toàn cục là nhỏ nhất.
- Các thuật toán này thường tốn thời gian và bộ nhớ nên chỉ được quan
tâm về mặt lý thuyết.
câu 7. định nghĩa dữa cú pháp của biểu thức trung vị với thuộc
tính là hậu vị của biểu thức?
- Sử dụng văn phạm phi ngữ cảnh để đặc tả cấu trúc cú pháp của
nguyên liệu, liên kết mỗi ký hiệu văn phạm với một thuộc tính.
- Một luật sinh với một tập quy tắc ngữ nghĩa để tính gá trị các thuộc
tính đi kèm với những kí hiệu có trong luật sinh.
- Phiên dịch là phép ánh xa từ nhập -> xuất
- Dạng xuất của chuỗi nhập x được xác định như sau:
+ Xác định cây phân tích cho chuỗi x.
+ Giả sử nút(n) trong cây phân tích được gán nhãn là kí hiệu văn
phạm x. viết là x.a biểu thị giá trị thuộc tính a đi kèm với luật sinh x
được dùng tại nút n.
- Cây phân tích cú pháp có chú thích các giá trị thuộc tính ở mỗi nút
được gọi là cây phân tích chú thích.
Câu 8. trình bày nhiệm vụ của bộ phân tích ngữ nghĩa, hệ thống
các kiểu và việc kiểm tra kiểu trong phân tích ngữ nghĩa.
- Nhiệm vụ: Một chương trình dịch phải kiểm tra xem chương trình
nguồn có theo các quy định về cú pháp và ngữ nghĩa của ngôn ngữ
nguồn hay không?
- Có hai cách kiểm tra:
+ Kiểm tra tĩnh được thực hiện trong thời gian biên dịch chương trình
nguồn.
9

+ Kiểm tra động được thực hiện trong thời gian thực thi chương trình
đích.
• Kiểm tra tĩnh:
- Kiểm tra kiểu: Kiểm tra về tính đúng đắn của các kiểu toán hạng
trong biểu thức
ví dụ: cộng một xâu với số nguyên.
- Kiểm tra dòng điều khiển: các câu lệnh làm thay đổi dòng điều
khiển từ một khối phải có vài nơi để chuyển điều khiển tới đó.
Vd: lệnh break phải nằm trong một vòng lặp.
- Kiểm tra tính nhất quán: có những ngữ cảnh mà trong đó một đối
tượng được định nghĩa chỉ đúng một lần
vd: trong pascal: một tên phải được khai báo một lần, các nhận trong
lệnh case phải khác nhau.
- Kiểm tra quan hệ tên: Đôi khi một tên phải xuất hiện từ 2 lần trở
lên.
Vd : trong assembly, 1 chương trình chỉ có một tên mà chúng phải
xuất hiện ở đầu và ở cuối chương trình
• Hệ thống và kiểm tra kiểu.
1. Kiểu biểu thức:
- Kiểu của một cấu trúc ngôn ngữ được biểu diễn bởi “biểu thức
kiểu”
- Một biểu thức kiểu có thể là:
+ Kiểu cơ sở.
+ Kiểu hợp thành: được xây dựng từ các kiểu cơ sở theo một số toán
tử nào đó
• Kiểu cơ sở:
+ boolean, char, integer, real;
+ type-eror: một kiểu cơ bản đặc biệt dùng để trả về một cấu trúc bị
lỗi kiểu.
+ void : 1 kiểu cở bản đặc biệt khác, biểu thị các cấu trúc không cần xác

định kiểu như câu lệnh.
+ Kiểu biểu thức có thể được đặt tên khác, một kiểu tên cũng là kiểu
biểu thức.
+ Kiểu hợp thành: một toán tử xây dựng kiểu áp dụng vào một kiểu
biểu thức là một kiểu biểu thức toán tử này bào gồm:
+ Mảng(aray): nếu t là một biểu thức kiểu thì array(I,t) là một biểu
thức kiểu đối với một mảng có tập chỉ số I và các phần tử có kiểu T
Vd: trong pascal:khai báo var a:aray[1 10] of integer;
Sẽ xác định kiểu của a là aray[1 10], integer)
- Tích đề các của biểu thức là một biểu thức. nếu t1 và t2 là kiểu biểu thức
thì t1 và t2 là biểu thức.
- Bản ghi: kiểu của bản ghi chính là biểu thức kiểu được xác định từ
các kiều của các chương trình hợp của nó.
- Con trỏ: giả sử t là một biểu thưc thì pointer(t) là một biểu thị của
một biểu thức kiểu xác định kiểu cho con của một đối tượng kiểu t
10
- Hàm là một ánh xạ từ các phần tử của một tập vào một tập khác như
vậy hàm là ánh xạ từ một kiểu miền d vào một kiểu phạm vi biểu thức
kiểu cho một hàm như vậy sẽ được kí hiệu là d->R
2. hệ thống kiểu:
- Hệ thống kiểu là một tập các luật để gán kiểu biểu thức cho các
thành phần trong chương trình nguần.
- Bộ kiểm tra kiểu: làm nhiệm vụ thực thi của các luật trong hệ
thống kiểu
- Kiểu hệ thống thực chất chỉ là các định nghĩa cú pháp điều khiển.
→ Kĩ thuật: cú pháp điều khiển và lược đồ dịch .
- Các kiểu hệ thống khác nhau có thể được dùng trong chương trình
dịch khác nhau hay trong các bộ xử lý khác nhau của cùng ngôn ngữ
Câu 10: Những đặc trưng cơ bản của ngôn ngữ lập trình.
- Từ vựng

+ trong ngôn ngữ lập trình từ vự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
 Khái niệm toán họ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 quy định nhất định
VD: tên thì viết bởi chữ cái đầu tiên,
Phép gán trong C là =, trong pascal là :=
- Cú pháp: đây là thành phần quan trọng nhất của ngôn ngữ lập trình,
nó được thể hiện bởi một bộ luật cú pháp để mô tả cấu trúc của một
chương trình, các câu lệnh bao gồm:
+ Các khai báo
+ Biểu thức số học, biểu thức logic
+ Các lệnh: gán, gọi hàm, vào ra…
+ Câu lệnh điều khiển if
+ Câu lệnh lặp for, while
+ Chương trình con: hàm và thủ tục
- Ngữ nghĩa:
+ Việc kiểm tra ngữ nghĩa của một chương trình là một phần ko
thể thiếu của chương trình dịch
+ Ngữ nghĩa của 1 chương 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, hàm, biến
+ Chương trình dịch phải kiểm tra được tính đúng đắn trong sử
dụng đại lượng này
VD: kiểm tra không cho gán giá trị hằng, kiểm tra tính đúng đắn
trong gán kiểu, kiểm tra phạm vi

11
* Các đặc trưng trên đều ảnh hưởng đến quá trình xây dựng một
chương trình dịch cụ thể là:
- Từ vựng: xây dựng 1 CTD, hệ thống phải tìm hiểu tập từ vựng của
ngôn ngữ nguồn và phích để biết được từ loại từ vựng, các thuộc tính
của nó, nhiệm vụ này thuộc modul phân tích từ vựng.
- Cú pháp:
+ 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.
+ 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
modul phân tích cú pháp
12

×