Tổng hợp bài giảng môn Chương trình dịch| Trường Đại học Bách Khoa Hà Nội

Ngôn ngữ lập trình cấp cao: Các ngôn ngữ lập trình được chia thành 5 thế hệ. Việc phân chia cấp cao hay thấp phụ Việc phân chia cấp cao hay thấp phụ thuộc mức độ trừu tượng của ngôn ngữ; Cấp thấp: gần với máy; Cấp cao: gần với ngôn ngữ tự nhiên

21/1/2010
1
XÂY DNG
CHƯƠNG TRÌNH
DCH
CHƯƠNG
TRÌNH
DCH
Nguyn Th Thu Hương - Khoa CNTT – ĐHBKHN
Tel (04) 38696121 - Mobi : 0903253796
Email :huongnt@it-hut.edu.vn,huongnt-fit@mail.hut.edu.vn
Môn hc s nghiên cu
Cách thc làm vic ca máy tính (tp
lnh, thanh ghi, mode địa ch, các cu trúc
d li
u đư
c s d
n
g
khi th
c hi
n. . .
)
g )
Cách thc làm vic ca b x lý ngôn ng
và chương trình dch
Sinh mã máy cho nhng cu trúc ngôn
ng c th
Thế nào là mt thiết kế ngôn ng tt?
Ti sao cn nghiên cu CT dch?
Rèn k năng phát trin ng dng quy mô
ln
Làm vicvicáccutrúcd liuphctp
Làm
vic
vi
các
cu
trúc
d
liu
phc
tp
Tìm hiu s tương tác gia các gii thut
Bước chun b cho nhng
d án ln trong tương lai.
Nhng vn đề chính
B x lý ngôn ng
Cu trúc ca mt trình biên dch (1 pha)
Văn phm sn sinh
BNF và sơ đ
cú pháp
Phân tích t vng và bng ký hiu
Phân tích cú pháp trên xung có quay lui
Phân tích cú pháp tin định
Văn phm LL(k)
21/1/2010
2
Nhng vn đề chính
Phân tích đệ quy trên dưới
Phân tích cú pháp cho ngôn ng KPL
Phân tích ng nghĩa
Phân
tích
ng
nghĩa
Stack calculator
Sinh mã trung gian
Sinh mã đích
Ti ưu mã
Tài liu tham kho
Aho.A.V, Sethi.R., Ullman.J.D.
Compiler : Principles, Techniques and Tools.
Addison Wesley.1986
Bal.H. E.
Modern Compiler Design.
John Wiley & Sons Inc (2000)
John
Wiley
&
Sons
Inc
(2000)
William Allan Wulf.
The Design of an Optimizing Compiler
Elsevier Science Ltd (1980)
Charles N. Fischer.
Crafting a Compiler
Benjamin-Cummings Pub Co (1987)
Tài liu tham kho
Niklaus Wirth
Compiler Construction.
Addison Westley. 1996
Andrew.W.Appel
Modern Compiler Implementation in Java
r
nce
on
n
vers
y.
Nguyn Văn Ba
Giáo trình k thut biên dch
Đại hc Bách Khoa Hà Ni.1994
Vũ Lc
Phân tích cú pháp
Đại hc Bách Khoa Hà Ni.1990
Bài ging v ngôn ng và phương pháp dch
www.sourceforge.net
Bài 1.
B x ngôn ng
B
x
ngôn
ng
21/1/2010
3
Ngôn ng lp trình cp cao
Các ngôn ng lp trình được chia thành 5
thế h.
Vic
phân
chia
cp
cao
hay
thp
ph
Vic
phân
chia
cp
cao
hay
thp
ph
thucmc độ trutượng ca ngôn ng
Cpthp:gnvimáy
Cpcao:gnvi ngôn ng t nhiên
Ngôn ng lp trình thế h th nht và th hai
Thế h th nht : ngôn ng máy
Thế h th hai : Assembly
Thế
h
th
hai
:
Assembly
Các ngôn ng thuc thế h th nht và
th hai là ngôn ng lp trình cp thp
Ngôn ng lp trình thế h th ba
D hiu hơn
Cho phép thc hin các khai báo, chng
hnbiến
hn
biến
Phn ln các ngôn ng cho phép lp trình
cu trúc
Ví d: Fortran, Cobol, C, C++, Basic . . . .
Ngôn ng lp trình thế h th tư
Thường đượcs dng trong mtlĩnh vc
c th (chng hnthương mi)
D l
p
trình,xâ
y
dn
g
p
hnmm
p
y
g
p
th kèm công c to form, báo cáo
d :SQL, Visual Basic, Oracle (SQL
plus, Oracle Form, Oracle Report). . . .
21/1/2010
4
Ngôn ng lp trình thế h th năm
Gii quyết bài toán da trên các ràng buc
đưarachochương trình ch không phi
giithutcangườilp trình.
ế
Vicgiiquy
ế
t bài toán do máy tính thc
hin
Phnln các ngôn ng dùng để lptrình
logic, giiquyết các bài toán trong lĩnh vc
trí tu nhân to
Đặc trưng ca ngôn ng lp trình cp cao
Độclpvi máy tính
Gnvi ngôn ng t nhiên
Chương
trình
d
đọc,
viết
bo
trì
Chương
trình
d
đọc,
viết
bo
trì
Munthchinchương trình phidch
sang ngôn ng máy
Chương trình thchinchmhơn
Cú pháp và ng nghĩa ca ngôn ng lp trình
pháp : Chính t vănphmca
các
cu
trúc
ngôn
ng
các
cu
trúc
ngôn
ng
Ng nghĩa:Ý nghĩavàhiuqu ca
các cu trúc ngôn ng
B x lý ngôn ng (Language Processor)
Phn mm dch t mt ngôn ng nào đó
sang mã máy (có th đồng thi thc thi)
d
d
Compiler
Assembler
Interpreter
Compiler - Compiler
21/1/2010
5
Compiler & Interpreter
Compiler : Dch trc tiếp ra mã máy
It t T tiế th hi t l
I
n
t
erpre
t
er :
T
rc
tiế
p
th
c
hi
n
t
ng
l
n
h
m
ã
ngu
n
Biến th ca Interpreter : thông dch mã trung gian
Compiler (trình biên dch)
Mc đích : Dch chương trình t ngôn ng
cp cao (ngôn ng ngun) sang ngôn ng
c
p
th
p
(
n
g
ôn n
g
đích
)
.
p p( g g )
Bn thân compiler được viết trên mt
ngôn ng gi là ngôn ng thc hin
Compiler Interpreter
21/1/2010
6
Các công c liên quan đến trình biên dch
Trình thông dch (Interpreter)
Assembler
Linker
Loader
Loader
B tin x lý (Preprocessor)
Editor
Debugger
Profiler
V trí ca trình biên dch trong b x lý ngôn ng
21/1/2010
1
Bài 2.
Các giai đon chính
1
c
a chương trình dch
Các thành phn chính ca trình biên dch
2
Các giai đon ca trình biên dch
Phân tích t vng (Lexical Analysis -
Scanner)
Ln lượt xem xét tng ký t ca chương trình
h h đ
3
ngu
n, p
n n
m c
ng t
n
h
n
h
ng
đ
ơn v
cú pháp gi là t t (token)
Phân tích cú pháp (Syntax Analysis)
Dãy token do b phân tích t vng đưa ra
được kim tra xem có đúng cú pháp không?
Các giai đon ca trình biên dch
Phân tích ng nghĩa (Semantic Analysis)
phân tích ý nghĩa tng lnh ca ngôn ng
n
g
un.
4
g
Sinh mã trung gian (Intermediate Code
Generation)thường là mã 3 địa ch. Mã
trung gian không ph thuc máy nên d ti
ưu.
21/1/2010
2
Các giai đon ca trình biên dch
Sinh mã đích: Sinh ra các lnh máy để
thc hin thao tác.
Ti ưumã:Thchinvi mã trung gian
5
Ti
ưu
mã:
Thc
hin
vi
trung
gian
và cđích nhm làm cho chương trình
hiu qu hơn.
Quá
trình
dch
6
m
t
câu
lnh
Pha 1:Phân tích t vng
B t vng:Chương trình làm nhim v
phân tích t vng
Các côn
g
vic ca b t vn
g
7
g g
Nhóm các ký t thành t t
T t :đơn v cú pháp được x lý trong quá
trình dch như mt thc th không th chia
nh hơn na
Nhóm các t t theo loi.
Mt s loi t t
8
21/1/2010
3
Pha 2: Phân tích cú pháp
Trình biên dch kim tra xem nhng t t
mà b t vng nhn biết được có kết hp
thành nhn
g
câu l
nh đún
g
p
p
9
g gpp
không
Do b phân tích cú pháp đảm nhn
Pha 2: Phân tích cú pháp
Đầu ra ca b phân tích cú pháp:
Cây phân tích cú pháp (nếu có)
Thông báo linếungượcli
10
Thông
báo
li
nếu
ngược
li
Vic xây dng được cây phân tích cú
pháp chng t chương trình đúng v
pháp
Ví d: câu lnh a = b + c
11
Văn phm, ngôn ng, BNF,sơ đồ cú pháp
Cú pháp
Cu trúc văn phm ca mt ngôn ng
B phân tích pháp cn đưa ra phân tích
12
B
phân
tích
pháp
cn
đưa
ra
phân
tích
cho mi câu ca ngôn ng (chương trình)
BNF : Dng chun để mô t văn phm ca
ngôn ng
Sơ đồ cú pháp:cách mô t văn phm trc
quan dưới dng đồ th định hướng
21/1/2010
4
Văn phm, ngôn ng, BNF,sơ đồ cú pháp
Các lut ca BNF cũng như văn phm
hình thc s dng 2 loi ký hiu vế phi
Ký hiu kết thúc :
T ô
13
T
t
c
a ng
ô
n ng
Không xut hin vế trái
Ký hiu không kết thúc
Ký hiu trung gian ca văn phm để mô t
cu trúc ngôn ng
Cn xut hin vế trái ca ít nht mt lut
Bao trong cp <>
Văn phm, ngôn ng, BNF,sơ đồ cú pháp
Ký hiu đầu :
Ký hiu không kết thúc mc cao nht
Xuthin gc cây pháp
14
Xut
hin
gc
cây
pháp
Khái nim và k thut phân tích cú pháp
Bng cách áp dng liên tc các lut mô t
văn phm
Nếub PTCP chuyn thành công t xâu
15
Nếu
b
PTCP
chuyn
thành
công
t
xâu
vào thành ký hiu đầu thì xâu vào đúng cú
pháp
Ngược li, câu được xem xét không đúng
cú pháp
Khái nim và k thut phân tích cú pháp
Vn đề quan trng nht khi xây dng
trình biên dch là xây dng mt văn
phm
16
phm
Bao gm đầy đủ các cu trúc ca mt
chương trình
Không th to nên mt lut nào khác
21/1/2010
5
Khái nim và k thut phân tích cú pháp
Văn phm phi không nhp nhng
ế
17
N
ế
u văn phm nhp nh
ng, xây dng
được nhiu hơn 1 cây cho mi câu
được đưa ra phân tích
Pha 3: Phân tích ng nghĩa
Duyt cây cú pháp ca chương
trình để xem mi cu trúc ng
hĩ ó đúkhô
18
ng
hĩ
a c
ó
đú
ng
khô
ng
Chương trình đúng c v cú pháp
và ng nghĩa mi sinh mã được
Pha 4: Sinh mã trung gian
Chương trình vi mã ngun được
chuyn sang chương trình tương
đươn
g
tron
g
n
g
ôn n
g
trun
g
g
ian
19
gggg gg
bng b sinh mã trung gian.
Mã trung gian là mã máy độc lp
tương t vi tp lnh trong máy.
Ưu đim ca mã trung gian
1.Thun li khi cn thay đổi cách biu
din chương trình đích.
2.Có th ti ưu hóa mã đ
c l
p
vi
20
p
máy đích cho dng bi
u din trung
gian.
3.Gim thi gian thc thi chương trình
đích vì mã trung gian có th được ti
ưu
21/1/2010
6
Ngôn ng trung gian
Được người thiết kế trình biên dch
quyết định, có th là:
21
Cây cú pháp
Ký pháp Ba Lan sau (hu t)
Mã 3 địa ch
Pha 5: Sinh mã đích
Vào: biu din trung gian ca chương
trình ngun
Rh hđíh
22
R
a: c
h
ương
t
r
ì
n
h
đí
c
h
Mã Assembly
Mã mô phng trên máy đích o
Các vn đề thiết kế b sinh mã đích
Input
Output
23
La chn câu lnh
Cp phát thanh ghi
Máy đích
21/1/2010
1
Bài 3.
Vănphmsnsinh
1
Văn
phm
sn
sinh
Làm thế nào để sn sinh ra các
xâu ?
Văn phm phi ng cnh có th dùng để
sn sinh ra các xâu thuc ngôn ng như
sau:
2
X = Ký hiu đầu
WhileWhile còn ký hiu không kết thúc Y trong X dodo
Áp dng mt trong các sn xut ca,văn
phm chng hn Y -> w
Ví d
S -> +A | -A |A
A -> B.B | B
3
B -> BC | C
C -> 0 | 1 | 2 |. . . .|9
Khi X ch cha ký hiu kết thúc, nó là xâu được
sn sinh bi văn phm.
Suy dn (Derivations)
Mi ln thc hin vic thay thế là mt
bướcsuydn
4
bước
suy
dn
.
Nếu mi dng câu có nhiu ký hiu không
kết thúc để thay thế có th s dng bt c
sn xut nào.
21/1/2010
2
Suy dn trái và suy dn phi
Nếu gii thut phân tích cú pháp chn ký
hiu không kết thúc cc trái hay cc phi
để tha
y
thế
,
kết
q
u ca nó lad su
y
dn
5
y , q y
trái hoc suy dn phi
Cây suy dn(Cây phân tích cú pháp)
Cây suy dn có nhng đặc đim sau
1) Mi nút ca cây có nhãn là ký
hiu kết thúc, ký hiu không kết
thúc hoc ε (xâu rng)
2) Nhãn ca nút gc là S (ký hiu
đầu)
6
3) Nút trong có nhãn là ký hiu
không kết thúc
4) Nút A có các nút con t trái qua
phi là X
1
, X
2
, ... , X
k
thì có mt
sn xut dng A -> X
1
X
2
... Xk
5)Nút lá có th có nhãn ε ch khi tn
ti sn xut A -> ε và nút cha ca
nút lá ch có mt nút con duy nht
Văn phm nhp nhng
Văn phm
E -> E + E
E -> E * E
7
E -> ( E )
E -> ident
Cho phép đưa ra hai suy dn khác nhau cho
xâu ident + ident * ident (chng hn x + y * z)
Văn phm là nhp nhng
Kh nhp nhng
E -> E + T
E -> T
T
>T
*
F
8
T
-
>
T
F
T -> F
F -> ( E )
F -> ident
(Bng cách thêm các ký hiu không kết thúc và các sn xut để
đảm bo th t ưu tiên)
21/1/2010
3
Đệ quy
Mt sn xut là đệ qui nếu X =>* ω
1
X ω
2
Có th dùng để biu din các quá trình lp hay cu trúc
lng nhau
Đệ quy trc tiếp X =>ω
1
X ω
2
9
Đệ quy trái X => b | Xa. X => X a => X a a => X a a a =>b a a a a a ...
Đệ quy phi X => b | a X. X => a X => a a X => a a a X =>... a a a a a b
Đệ quy gia X => b | "(" X")". X =>(X) =>((X)) =>(((X))) =>(((... (b)...)))
Đệ quy gián tiếp X =>* ω
1
X ω
2
Kh đệ quy trái
E -> E + T | T
T -> T * F | F
F -> ( E ) | ident
Kh đ
q
u
y
trái bn
g
cách thêm k
ý
hi
u khôn
g
10
qy g
kết thúc và sn xut mi
E -> T E'
E' -> + T E' | ε
T -> F T'
T' -> * F T' | ε
F -> ( E ) | ident
21/1/2010
1
Bài 4
BNF v
à
sơ
đồ
p
h
áp
1
BNF
sơ
đồ
pháp
Công thc siêu ng Backus và các biến th
Siêu ng (metalanguage ):Ngôn ng s
dng các lnh để t ngôn ng khác
BNF
(Backus
Naur
Form)
dng
siêu
2
BNF
(Backus
Naur
Form)
dng
siêu
pháp để t các ngôn ng lptrình
BNF đượcs dng rng rãi để t văn
phmca các ngôn ng lp trình, tplnh
các giao thctruyn thông.
Các biến th ca công thc siêu
ng Backus
pháp BNF mttpcáclut,vế trái
camilutlàmtcu trúc pháp.
Tên cacutrúccúphápđượcgilàký
hiu
không
kết
thúc
3
hiu
không
kết
thúc
.
Các hiu không kết thúc thường được
bao trong cp <>.
Cáckýhiukết thúc thường được phân
cách bng cp nháy đơnhoc nháy kép
Công thc siêu ng Backus và
các biến th
Mikýhiu không kết thúc được định
nghĩabng mt hay nhiulut.
Các lutcódng
4
N::=s
(N hiu không kếtthúc,slàmtxâu
gm 0 hay nhiukýhiukết thúc không
kết thúc. Các lut chung vế trái được
phân cách bng | )
21/1/2010
2
Ví d v BNF
<S>::=’-’<S thp phân>|<s thp phân>
<S thp phân>::=<Dãy ch s>|<Dãy
ch s>’.’<Dãy ch s>
5
<Dãy ch s>::=<Ch s>|<Ch s><Dãy
ch s>
<Ch s>::=’0’|’1’|’2’|’3’|’4’|’5’|’6’|’7’|’8’|’9’
EBNF
EBNF (Extended BNF ) đượcpháttrint
pháp BNF. EBNF pháp tương t BNF
nhưng được đơnginhoábng cách s dng
mt
s
hiu
đặc
bit
:
6
mt
s
hiu
đặc
bit
:
[] phn này tu chn(có hoc không)
{} phnnàycóth lplimts lntu ýhoc
không xuthinlnnào(Nếulplimhaynln
, dùng n hay m ch s trên hocdưới)
Không cn dùng ‘’ cho hiukết thúc
So sánh BNF và EBNF
Ví d
Trong EBNF
<Lnh
if>
::
=
IF
<Biu
thc>
THEN
<Lnh>
7
<Lnh
if>
::
=
IF
<Biu
thc>
THEN
<Lnh>
[ELSE <Lnh>]
Trong BNF
<Lnh if>::= ‘IF’ <Biuthc> ‘THEN’
<Lnh>| ‘IF’ <Biuthc> THEN <Lnh>
‘ELSE’ <Lnh>
Sơ đồ cú pháp
công cụđ t pháp ca ngôn
ng lptrìnhdướidng đồ th
8
Misơđ pháp mt đồ thịđnh
hướng vilivàovàliraxácđịnh.
Misơđ pháp mt tên duy nht
21/1/2010
3
Ví d mt sơ đồ cú pháp
9
Sơ đồ cú pháp ca KPL (Tng th CT)
10
Sơ đồ cú pháp ca KPL (Khi)
11
Sơ đồ cú pháp ca KPL
(tham s, hng không du)
12
21/1/2010
4
Sơ đồ cú pháp ca KPL (Khai
báo)
13
Sơ đồ cú pháp ca KPL
(lnh)
14
Sơ đồ cú pháp ca KPL (bi
u
thc)
15
Sơ đồ cú pháp ca KPL
(tha s,điu kin)
16
21/1/2010
5
Sơ đồ cú pháp ca KPL(tên, s)
17
| 1/82

Preview text:

21/1/2010 Môn học sẽ nghiên cứu XÂY DỰNG
Cách thức làm việc của máy tính (tập
lệnh, thanh ghi, mode địa chỉ, các cấu trúc CHƯƠ CH NG TRÌNH DỊ D CH dữ liệu ệ được sử dụn ụ g khi g thực hi ự ện. . . ệ ) )
Cách thức làm việc của bộ xử lý ngôn ngữ và chương trình dịch
Nguyễn Thị Thu Hương - Khoa CNTT – ĐHBKHN
Tel (04) 38696121 - Mobi : 0903253796
Sinh mã máy cho những cấu trúc ngôn
Email :huongnt@it-hut.edu.vn,huongnt-fit@mail.hut.edu.vn ngữ cụ thể
Thế nào là một thiết kế ngôn ngữ tốt?
Tại sao cần nghiên cứu CT dịch? Những vấn đề chính
Rèn kỹ năng phát triển ứng dụng quy mô Bộ xử lý ngôn ngữ lớn
Cấu trúc của một trình biên dịch (1 pha) Văn phạm sản sinh Làm vi ệc ệ v ớ v i các các c ấu ấ trúc trúc d ữ d li ệu ệ phứ ph c ứ t ạp ạ BNF và sơ ồ đ cú pháp
Tìm hiểu sự tương tác giữa các giải thuật
Phân tích từ vựng và bảng ký hiệu
Bước chuẩn bị cho những
Phân tích cú pháp trên xuống có quay lui
dự án lớn trong tương lai.
Phân tích cú pháp tiền định Văn phạm LL(k) 1 21/1/2010 Những vấn đề chính Tài liệu tham khảo
Aho.A.V, Sethi.R., Ullman.J.D.
Compiler : Principles, Techniques and Tools.
Phân tích đệ quy trên dưới Addison Wesley.1986
Phân tích cú pháp cho ngôn ngữ KPL Bal.H. E.
Modern Compiler Design. Phân tích n gữ ng nghĩ ngh a ĩ John W ile iley & Sons I n Inc ( 2000) ( Stack calculator William Allan Wulf.
The Design of an Optimizing Compiler Sinh mã trung gian Elsevier Science Ltd (1980) Charles N. Fischer. Sinh mã đích Crafting a Compiler Tối ưu mã
Benjamin-Cummings Pub Co (1987) Tài liệu tham khảo Niklaus Wirth Compiler Construction. Addison Westley. 1996 Bài 1. Andrew.W.Appel
Modern Compiler Implementation in Java Bộ B x ử lý ngôn ng ữ Princet U on ni i vers tity.1998 Nguyễn Văn Ba
Giáo trình kỹ thuật biên dịch
Đại học Bách Khoa Hà Nội.1994 Vũ Lục Phân tích cú pháp
Đại học Bách Khoa Hà Nội.1990
Bài giảng về ngôn ngữ và phương pháp dịch www.sourceforge.net 2 21/1/2010
Ngôn ngữ lập trình cấp cao
Ngôn ngữ lập trình thế hệ thứ nhất và thứ hai
Các ngôn ngữ lập trình được chia thành 5 thế hệ.
Thế hệ thứ nhất : ngôn ngữ máy Việc ệ phân chia cấp ấ cao ca hay thấ th p ấ phụ ph Thế Th h ệ h th ứ th hai : Assembly Assembly
thuộc mức độ trừu tượng của ngôn ngữ
Các ngôn ngữ thuộc thế hệ thứ nhất và
Cấp thấp : gần với máy
thứ hai là ngôn ngữ lập trình cấp thấp
Cấp cao : gần với ngôn ngữ tự nhiên
Ngôn ngữ lập trình thế hệ thứ ba
Ngôn ngữ lập trình thế hệ thứ tư Dễ hiểu hơn
Thường được sử dụng trong một lĩnh vực
cụ thể (chẳng hạn thương mại)
Cho phép thực hiện các khai báo, chẳng hạ h n ạ b i biến ế
Dễ lập trình,xây dựng ph p ần mềm
Có thể kèm công cụ tạo form, báo cáo
Phần lớn các ngôn ngữ cho phép lập trình cấu trúc
Ví dụ :SQL, Visual Basic, Oracle (SQL
plus, Oracle Form, Oracle Report). . . .
Ví dụ: Fortran, Cobol, C, C++, Basic . . . . 3 21/1/2010
Ngôn ngữ lập trình thế hệ thứ năm
Đặc trưng của ngôn ngữ lập trình cấp cao
Giải quyết bài toán dựa trên các ràng buộc Độc lập với máy tính
đưa ra cho chương trình chứ không phải
Gần với ngôn ngữ tự nhiên
giải thuật của người lập trình. Chươ Ch ng trình dễ d đọc, đọ viết ế và bả b o ả trì Việc giải qu ế
y t bài toán do máy tính thực hiện
Muốn thực hiện chương trình phải dịch sang ngôn ngữ máy
Phần lớn các ngôn ngữ dùng để lập trình
logic, giải quyết các bài toán trong lĩnh vực
Chương trình thực hiện chậm hơn trí tuệ nhân tạo
Cú pháp và ngữ nghĩa của ngôn ngữ lập trình
Bộ xử lý ngôn ngữ (Language Processor)
Phần mềm dịch từ một ngôn ngữ nào đó
Cú pháp : Chính tả và văn phạm của
sang mã máy (có thể đồng thời thực thi) các cấu ấ trúc ngôn ngữ ng Ví d ụ d Compiler Assembler
Ngữ nghĩa : Ý nghĩa và hiệu quả của Interpreter các cấu trúc ngôn ngữ Compiler - Compiler 4 21/1/2010 Compiler & Interpreter Compiler (trình biên dịch)
Compiler : Dịch trực tiếp ra mã máy
Mục đích : Dịch chương trình từ ngôn ngữ
cấp cao (ngôn ngữ nguồn) sang ngôn ngữ cấp th p ấp p (n ( gôn n g gữ g đích). ) Interpreter T : rực tiế ti p thự hi c ệ hi n từ t ng lệnh ã m ồ ngu n
Bản thân compiler được viết trên một
ngôn ngữ gọi là ngôn ngữ thực hiện
Biến thể của Interpreter : thông dịch mã trung gian Compiler Interpreter 5 21/1/2010
Các công cụ liên quan đến trình biên dịch
Vị trí của trình biên dịch trong bộ xử lý ngôn ngữ
Trình thông dịch (Interpreter) Assembler Linker Loader
Bộ tiền xử lý (Preprocessor) Editor Debugger Profiler 6 21/1/2010
Các giai đoạn của trình biên dịch Bài 2.
Phân tích từ vựng (Lexical Analysis - Các giai đoạn chính Scanner)
Lần lượt xem xét từng ký tự của chương trình của chương trình dịch ồ ngu hâ n, p hó n n m chúng thà h n h n ữ h ng đơn vị
cú pháp gọi là từ tố (token)
Phân tích cú pháp (Syntax Analysis)
Dãy token do bộ phân tích từ vựng đưa ra
được kiểm tra xem có đúng cú pháp không? 1 3
Các thành phần chính của trình biên dịch
Các giai đoạn của trình biên dịch
Phân tích ngữ nghĩa (Semantic Analysis)
phân tích ý nghĩa từng lệnh của ngôn ngữ ngu g ồn.
Sinh mã trung gian (Intermediate Code
Generation)thường là mã 3 địa chỉ. Mã
trung gian không phụ thuộc máy nên dễ tối ưu. 2 4 1 21/1/2010
Các giai đoạn của trình biên dịch Pha 1:Phân tích từ vựng
Sinh mã đích: Sinh ra các lệnh máy để
Bộ từ vựng:Chương trình làm nhiệm vụ thực hiện thao tác. phân tích từ vựng g g Tối ố ư u ư mã: mã: T hự Th c ự h i hiện ệ vớ v i mã mã t rung trung gian
Các công việc của bộ từ vựn
và cả mã đích nhằm làm cho chương trình
Nhóm các ký tự thành từ tố hiệu quả hơn.
Từ tố :đơn vị cú pháp được xử lý trong quá
trình dịch như một thực thể không thể chia nhỏ hơn nữa
Nhóm các từ tố theo loại. 5 7 Một số loại từ tố Quá trình dịch một câu lệnh 6 8 2 21/1/2010 Pha 2: Phân tích cú pháp
Ví dụ: câu lệnh a = b + c
Trình biên dịch kiểm tra xem những từ tố
mà bộ từ vựng nhận biết được có kết hợp thành những câu g lệnh ệ đúng cú g phá p p p không
Do bộ phân tích cú pháp đảm nhận 9 11 Pha 2: Phân tích cú pháp
Văn phạm, ngôn ngữ, BNF,sơ đồ cú pháp
Đầu ra của bộ phân tích cú pháp: Cú pháp
Cây phân tích cú pháp (nếu có)
Cấu trúc văn phạm của một ngôn ngữ Thông báo lỗi ỗ nế n u ế ngượ ng c ượ lại ạ Bộ phân tích c ú cú pháp c ần ầ đưa đư ra ra phân tích
Việc xây dựng được cây phân tích cú
cho mỗi câu của ngôn ngữ (chương trình)
pháp chứng tỏ chương trình đúng về cú
BNF : Dạng chuẩn để mô tả văn phạm của pháp ngôn ngữ
Sơ đồ cú pháp:cách mô tả văn phạm trực
quan dưới dạng đồ thị định hướng 10 12 3 21/1/2010
Văn phạm, ngôn ngữ, BNF,sơ đồ cú pháp
Khái niệm và kỹ thuật phân tích cú pháp
Các luật của BNF cũng như văn phạm
hình thức sử dụng 2 loại ký hiệu ở vế phải
Bằng cách áp dụng liên tục các luật mô tả văn phạm Ký hiệu kết thúc : Nế N u ế b ộ b PTCP chuyể chuy n ể thành thành công t ừ xâu Từ tố củ ô a ng ữ n ng
vào thành ký hiệu đầu thì xâu vào đúng cú
Không xuất hiện ở vế trái pháp Ký hiệu không kết thúc
Ký hiệu trung gian của văn phạm để mô tả
Ngược lại, câu được xem xét không đúng cấu trúc ngôn ngữ cú pháp
Cần xuất hiện ở vế trái của ít nhất một luật Bao trong cặp <> 13 15
Văn phạm, ngôn ngữ, BNF,sơ đồ cú pháp
Khái niệm và kỹ thuật phân tích cú pháp Ký hiệu đầu :
Vấn đề quan trọng nhất khi xây dựng
Ký hiệu không kết thúc ở mức cao nhất
trình biên dịch là xây dựng một văn Xuấ Xu t ấ hi hiện ệ ở gố g c ố cây cây cú pháp phạm
Bao gồm đầy đủ các cấu trúc của một chương trình
Không thể tạo nên một luật nào khác 14 16 4 21/1/2010
Khái niệm và kỹ thuật phân tích cú pháp Pha 4: Sinh mã trung gian
Văn phạm phải không nhập nhằng
Chương trình với mã nguồn được
chuyển sang chương trình tương
đương trong ngôn ngữ trung gian ế
N u văn phạm nhập nhằng, xây dựng
bằng bộ sinh mã trung gian.
được nhiều hơn 1 cây cho mỗi câu được đưa ra phân tích
Mã trung gian là mã máy độc lập
tương tự với tập lệnh trong máy. 17 19
Ưu điểm của mã trung gian
Pha 3: Phân tích ngữ nghĩa
Duyệt cây cú pháp của chương
1.Thuận lợi khi cần thay đổi cách biểu
diễn chương trình đích.
trình để xem mọi cấu trúc ngữ
2.Có thể tối ưu hóa mã độc lập ậ với nghĩa có đ ú k ng hô không
máy đích cho dạng biểu diễn trung gian.
Chương trình đúng cả về cú pháp
và ngữ nghĩa mới sinh mã được
3.Giảm thời gian thực thi chương trình
đích vì mã trung gian có thể được tối ưu 18 20 5 21/1/2010 Ngôn ngữ trung gian
Các vấn đề thiết kế bộ sinh mã đích
Được người thiết kế trình biên dịch Input
quyết định, có thể là: Output Lựa chọn câu lệnh Cây cú pháp
Ký pháp Ba Lan sau (hậu tố) Cấp phát thanh ghi Mã 3 địa chỉ … Máy đích 21 23 Pha 5: Sinh mã đích
Vào: biểu diễn trung gian của chương trình nguồn Ra: chươ t ng rình đ ích Mã Assembly
Mã mô phỏng trên máy đích ảo 22 6 21/1/2010
Làm thế nào để sản sinh ra các xâu ? Bài 3.
Văn phạm phi ngữ cảnh có thể dùng để
sản sinh ra các xâu thuộc ngôn ngữ như Vă V n p h phạm sản s inh sinh sau: X = Ký hiệu đầu Wh W ile h
còn ký hiệu không kết thúc Y trong X do
Áp dụng một trong các sản xuất của,văn
phạm chẳng hạn Y -> w
1 2 Ví dụ Suy dẫn (Derivations) S -> +A | -A |A A -> B.B | B
Mỗi lần thực hiện việc thay thế là một bướ b c s uy suy dẫ d n ẫ . B -> BC | C
Nếu mỗi dạng câu có nhiều ký hiệu không C -> 0 | 1 | 2 |. . . .|9
kết thúc để thay thế có thể sử dụng bất cứ sản xuất nào.
Khi X chỉ chứa ký hiệu kết thúc, nó là xâu được sản sinh bởi văn phạm. 3 4 1 21/1/2010
Suy dẫn trái và suy dẫn phải
Cây suy dẫn(Cây phân tích cú pháp)
Cây suy dẫn có những đặc điểm sau
1) Mỗi nút của cây có nhãn là ký
Nếu giải thuật phân tích cú pháp chọn ký
hiệu kết thúc, ký hiệu không kết
hiệu không kết thúc cực trái hay cực phải thúc hoặc ε (xâu rỗng)
2) Nhãn của nút gốc là S (ký hiệu để thay th y ế, kết qu q ả của nó lad suy d y ẫn đầu) trái hoặc suy dẫn phải
3) Nút trong có nhãn là ký hiệu không kết thúc
4) Nút A có các nút con từ trái qua
phải là X1, X2, ... , Xk thì có một
sản xuất dạng A -> X1 X2 ... Xk
5)Nút lá có thể có nhãn ε chỉ khi tồn
tại sản xuất A -> ε và nút cha của
nút lá chỉ có một nút con duy nhất 5 6 Văn phạm nhập nhằng Khử nhập nhằng Văn phạm E -> E + T E -> E + E E -> T E -> E * E E -> ( E ) T > - T * F E -> ident T -> F
Cho phép đưa ra hai suy dẫn khác nhau cho F -> ( E )
xâu ident + ident * ident (chẳng hạn x + y * z) F -> ident Văn phạm là nhập nhằng
(Bằng cách thêm các ký hiệu không kết thúc và các sản xuất để
đảm bảo thứ tự ưu tiên) 7 8 2 21/1/2010 Đệ quy Khử đệ quy trái
Một sản xuất là đệ qui nếu X =>* ω1X ω2 E -> E + T | T
Có thể dùng để biểu diễn các quá trình lặp hay cấu trúc T -> T * F | F lồng nhau F -> ( E ) | ident
Đệ quy trực tiếp X =>ω X ω 1 2 Khử đệ ệ qu q y trái y bằng cách g thêm ký hiệu khôn ệ g g
Đệ quy trái X => b | Xa. X => X a => X a a => X a a a =>b a a a a a ...
kết thúc và sản xuất mới
Đệ quy phải X => b | a X. X => a X => a a X => a a a X =>... a a a a a b E -> T E'
Đệ quy giữa X => b | "(" X")". X =>(X) =>((X)) =>(((X))) =>(((... (b)...))) E' -> + T E' | ε
Đệ quy gián tiếp X =>* ω X ω 1 2 T -> F T' T' -> * F T' | ε F -> ( E ) | ident 9 10 3 21/1/2010
Công thức siêu ngữ Backus và các biến thể Bài 4
Siêu ngữ (metalanguage ):Ngôn ngữ sử
dụng các lệnh để mô tả ngôn ngữ khác BNF v BNF à và s ơ đồ cú p háp pháp
BNF (Backus Naur Form) là dạ d ng ạ siêu si cú
pháp để mô tả các ngôn ngữ lập trình
BNF được sử dụng rộng rãi để mô tả văn
phạm của các ngôn ngữ lập trình, tập lệnh
và các giao thức truyền thông. 1 2
Các biến thể của công thức siêu
Công thức siêu ngữ Backus và ngữ Backus các biến thể
Ký pháp BNF là một tập các luật ,vế trái
Mỗi ký hiệu không kết thúc được định
của mỗi luật là một cấu trúc cú pháp.
nghĩa bằng một hay nhiều luật.
Tên của cấu trúc cú pháp được gọi là ký Các luật có dạng hiệu ệ không kết ế thúc. N::=s
Các ký hiệu không kết thúc thường được
(N là ký hiệu không kết thúc, s là một xâu bao trong cặp <>.
gồm 0 hay nhiều ký hiệu kết thúc và không
Các ký hiệu kết thúc thường được phân
kết thúc. Các luật có chung vế trái được
cách bằng cặp nháy đơn hoặc nháy kép phân cách bằng | ) 3 4 1 21/1/2010 Ví dụ về BNF EBNF ::=’-’|
EBNF (Extended BNF ) được phát triển từ ký
::=|pháp BNF. EBNF có ký pháp tương tự BNF
nhưng được đơn giản hoá bằng cách sử dụng chữ số>’.’ mộ m t ộ số ký hiệu ệ đặc đặ biệt ệ :
::=|[] phần này là tuỳ chọn(có hoặc không) chữ số>
{} phần này có thể lặp lại một số lần tuỳ ý hoặc
::=’0’|’1’|’2’|’3’|’4’|’5’|’6’|’7’|’8’|’9’
không xuất hiện lần nào (Nếu lặp lại m hay n lần
, dùng n hay m là chỉ số trên hoặc dưới)
Không cần dùng ‘’ cho ký hiệu kết thúc 5 6 So sánh BNF và EBNF Sơ đồ cú pháp Ví dụ
Là công cụ để mô tả cú pháp của ngôn Trong EBNF
ngữ lập trình dưới dạng đồ thị if>:: if> = IF ể thứ th c> THEN [ELSE ]
Mỗi sơ đồ cú pháp là một đồ thị định
hướng với lối vào và lối ra xác định. Trong BNF
Mỗi sơ đồ cú pháp có một tên duy nhất ::= ‘IF’ ‘THEN’ | ‘IF’ THEN ‘ELSE’ 7 8 2 21/1/2010
Ví dụ một sơ đồ cú pháp
Sơ đồ cú pháp của KPL (Tổng thể CT) 9 10 Sơ đồ cú pháp của KPL
Sơ đồ cú pháp của KPL (Khối)
(tham số, hằng không dấu) 11 12 3 21/1/2010
Sơ đồ cú pháp của KPL (Khai Sơ đồ cú pháp của KPL báo) (lệnh) 13 14
Sơ đồ cú pháp của KPL (biểu Sơ đồ cú pháp của KPL thức) (thừa số,điều kiện) 15 16 4 21/1/2010
Sơ đồ cú pháp của KPL(tên, số) 17 5