•D dàng sinh mã cho nh ng ngôn ng ngu n c ng nh máy đích khác nhau.
Trang 1GI I THI U V CH NG
TRÌNH D CH
TS Nguy n H a Phùng Khoa Công ngh Thông tin
i h c Bách Khoa – i h c Qu c Gia TPHCM
2006
Trang 2CH NG TRÌNH D CH
Ch ng trình
ngôn ng ngu n
Ch ng trình ngôn ng đích
L i
• nh n d ng ch ng trình ngu n
• sinh mã đích
Trang 3CÁC LO I CH NG TRÌNH D CH
• Trình biên d ch (compiler)
• Trình thông d ch (interpreter)
Trang 4CÁC GIAI O N D CH
Mã ngu n Phân tích t v ng
Phân tích cú pháp
X lý ng ngh a
Sinh mã trung gian
T i u mã trung gian
Sinh mã máy
Chu i tokens
Cây phân tích
cú pháp
Ph n đ u (front end) Phân tích (analysis)
B ng
danh
hi u
Cây phân tích
cú pháp
Mã trung gian
Ph n cu i (back end)
T ng h p (synthesis)
Mã trung gian
đã t i u
Mã máy
Trang 5VÍ D
acc = acc + inc * 60 Phân tích t v ng
id1 = id1 + id2 * intliteral
Phân tích cú pháp
=
id2 intliteral60
acc real …
inc real …
…
1
2
X lý ng ngh a
=
id2
intliteral60 i2f
Trang 6Sinh mã trung gian
tmp1 = i2f(60) tmp2 = id2 * tmp1 tmp3 = id1 + tmp2
id1 = tmp3
T i u mã trung gian
tmp2 = id2 * 60.0
id1 = id1 + tmp2 Sinh mã máy
MOVF id2, R2 MULF #60.0, R2 MOVF id1, R1 ADDF R2, R1 MOVF R1, id1
Trang 7MÃ TRUNG GIAN
Ph n đ u cho C# Ph n cu i cho JVM
Mã trung gian
Ph n đ u cho Java Ph n cu i cho MIPS
•Có th th c hi n 1 s thao tác t i u không ph thu c máy
đích trên mã trung gian
•D dàng sinh mã cho nh ng ngôn ng ngu n c ng nh máy
đích khác nhau
Trang 8PHÂN TÍCH T V NG
• nhóm các ký t trong ch ng trình ngu n thành các
tokens ( đ n v c b n c a v n ph m)
acc = acc + inc * 60 (g m 20 ký t bao g m c các kho ng tr ng)
⇒ M t danh hi u acc
M t d u gán =
M t danh hi u acc
M t d u c ng +
M t danh hi u inc
M t d u nhân *
M t h ng nguyên 60
• lo i b các kho ng tr ng (xu ng hàng, tab, blank,…)
• Báo l i (chu i quá dài,…)
• Xác đ nh v trí hàng, c t c a m i token.
Trang 9PHÂN TÍCH CÚ PHÁP
• Xác đ nh chu i token có phù h p v i v n
ph m (context-free) c a ngôn ng ngu n.
• T o ra cây phân tích cú pháp.
• Báo l i v n ph m n u chu i token không phù h p.
• B qua token gây ra l i và ti p t c phân
tích ph n còn l i.
Trang 10X LÝ NG NGH A
• Ki m tra l i ng ngh a
– Bi n ph i đ c khai báo tr c khi dùng
– Bi n ph i đ c kh i đ ng tr tr c khi đ c
– L i ki u
• các toán h ng tham gia m t bi u th c ph i phù
h p ki u
• s th c không th dùng làm ch s cho 1 tham
kh o dãy a[1.4]
• s l ng và ki u c a thông s th c ph i phù h p
v i s l ng và ki u c a thông s hình th c
Trang 11SINH MÃ TRUNG GIAN
• T o ra mã trung gian v i các đ c tính
– d dàng sinh ra mã máy
• Các d ng mã trung gian ph bi n:
– Cây cú pháp tr u t ng (Abstract Syntax Tree - AST)
– th có h ng không l p vòng (Directed Acyclic Graph - DAG)
– Mã h u t (postfix notation)
– Mã 3 đ a ch (three-address code)
Trang 12T I U MÃ TRUNG GIAN
• Phân tích và c i thi n mã trung gian nh m
– gi m th i gian th c thi
– gi m kích th c ch ng trình đích
– gi m b nh c n thi t khi ch y
• M t s k thu t t i u đ c tr ng
– lan truy n các giá tr h ng
– tìm các tính toán d th a và lo i b chúng
– lo i b mã vô d ng ho c không đ c th c thi
Trang 13SINH MÃ MÁY
• T o ra mã máy d ng tái đ nh đ a ch
(relocatable machine code) ho c mã assembly
• L a ch n l nh máy cho m i l nh trung
gian
• L a ch n thanh ghi ho c m t v trí nh đ
c p phát cho các bi n
Trang 14CÁC CH NG TRÌNH LIÊN
QUAN
• Ti n x lý
– X lý macro
– File inclusion
– “Rational” preprocessor
– Language extensions
• Assembler
• Loader and Link-Editors
Trang 15T NG K T
• Nhi m v c a ch ng trình d ch
• Phân lo i ch ng trình d ch
• Các giai đo n c a quá trình d ch
• Các ch ng trình liên quan đ n ch ng trình d ch
c: [1] chapter 1, pages 1-24
[2] chapter 2, pages 25-82