Tải bản đầy đủ (.pdf) (34 trang)

NGÔN NGỮ và PHƯƠNG PHÁP DỊCH doc

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 (641.72 KB, 34 trang )

1
NGÔN NGỮ và
PHƯƠNG PHÁP DỊCH
Phạm Đăng Hải

29/4/2012
Chương 1: Những khái niệmcơ bản
1. Ngôn ngữ lậptrìnhcấp cao và trình dịch
2. Đặctrưng của ngôn ngữ lậptrìnhcấpcao
3. Các giai đoạn chính củachương trình dịch
4. Khái niệm ngôn ngữ
5. Vănphạm phi ngữ cảnh
6. Giớithiệungônngữ PL/0 mở rộng
39/4/2012
Sự cầnthiếtcủa ngôn ngữ lậptrìnhbậccao
•Nhiềuloại máy tính
–Mỗiloạinhiềukiểu
•Mỗikiểu có ngôn ngữ máy riêng
– Ngôn ngữ máy là dãy nhị phân
1. Ngôn ngữ lậptrìnhcấpcaovàtrìnhdịch
• Dùng ngôn ngữ máy
– Không phảidịch
–Phứctạp
– Không khả chuyển
•Cầnngônngữ
– Độclậpvớimáy
–Gầnvớingữ tự nhiên
• Ví dụ: C, Pascal, basic
Ngôn ngữ
bậccao
2


49/4/2012
Ngôn ngữ lậptrìnhcấp cao (NNLTCC)
Chương trình viếtbằng NNLTCC
• Độclậpvới máy tính
•Gầnvới ngôn ngữ tự nhiên
•Chương trình dễđọc, viếtvàbảotrì
•Muốnthựchiệnphảichuyển sang ngôn ngữ
– Máy hiểu được(ngôn ngữ máy)
– Ngôn ngữ trung gian mà máy hiểu được
Đượcchuyển đổibởi Chương trình dịch
•Chương trình thựchiệnchậmhơn
1. Ngôn ngữ lậptrìnhcấpcaovàtrìnhdịch
59/4/2012
Chương trình biên dịch (compiler)
•Chương trình dịch làm nhiệmvụ dịch
chương trình nguồn(thường đượcviếtbằng
ngôn ngữ lậptrìnhbậccao) sang các
chương trình đốitượng (chương trình đích)
1. Ngôn ngữ lậptrìnhcấpcaovàtrìnhdịch
Compiler
Chương trình
nguồn
Chương trình
đích
Thông báo lỗi
•Chương trình đíchcóthể không thựchiện
được ngay mà cầnliênkết (link) đếnthư viện
để đượcchương trình thựchiện
69/4/2012
Các bướcxử lý chương trình

1. Ngôn ngữ lậptrìnhcấpcaovàtrìnhdịch
Chương trình
nguồn
loader
Mã máy
tuyệt đối
Mã đối
tượng
compiler
Mã thực
hiện
linker
Thư viện
Phase
dịch
3
79/4/2012
Thông dịch (interpreter)
• Làm nhiệmvụ “giảithích”
chương trình nguồn
– Phân tích câu lệnh tiếp
–Thựchiệncâulệnh
1. Ngôn ngữ lậptrìnhcấpcaovàtrìnhdịch
Chương trình
nguồn
interpreter
Kếtquả
Dữ liệu
•Chương trình thông dịch
có kích thướcnhỏ hơn,

nhưng chạychậmhơn
89/4/2012
Dịch và thựchiệnchương trình nguồn
1. Ngôn ngữ lậptrìnhcấpcaovàtrìnhdịch
Chương trình nguồn
Chương trình bằng
ngôn ngữ trung gian
compiler
interpreter
Kếtquả
Phase 2: Thựchiện
mã trung gian
Phase 1: Chuyểntừ
chương trình nguồn
sang NN trung gian
99/4/2012
Compiler >< interpreter
1. Ngôn ngữ lậptrìnhcấpcaovàtrìnhdịch
• Compiler : Dịch trựctiếpramãmáy
• Interpreter : Trựctiếpthựchiệntừng lệnh mã nguồn
•Biếnthể của Interpreter : thông dịch mã trung gian
4
109/4/2012
Xây dựng chương trình dịch
•Viếttrựctiếptừ ngôn ngữ máy
–Khókhăn
•Sử dụng ngôn ngữ bậccao
–Dễ dàng thựchiện, hiệuquả
–Tăng tính khả chuyển,
Chương trình bậccaođầutiên?

–Chiếnlượcchương trình mồi(bootstraps) trong
đóchương trình dịch được đặctrưng bởi
•Ngônngữ nguồn đượcdịch S
•Ngônngữđích T
•Ngônngữ cài đặtI
1. Ngôn ngữ lậptrìnhcấpcaovàtrìnhdịch
ST
I
119/4/2012
Xây dựng chương trình dịch
Viếtchương trình dịch L cho máy M
• Dùng hợpngữ củaM viếtL’làtập con củaL
• Dùng L’ để viếtL
Như vậy, L đượcthựchiện qua L’ để ra M
1. Ngôn ngữ lậptrìnhcấpcaovàtrìnhdịch
LM
L’ L’ M
M
LM
M
PL0
PC
C C
C
PC
PL0
PC
PC
129/4/2012
Chương 1: Những khái niệmcơ bản

1. Ngôn ngữ lậptrìnhcấp cao và trình dịch
2. Đặctrưng của ngôn ngữ lậptrìnhcấpcao
3. Các giai đoạn chính củachương trình dịch
4. Khái niệm ngôn ngữ
5. Vănphạm phi ngữ cảnh
6. Giớithiệungônngữ PL/0 mở rộng
5
139/4/2012
Các thế hệ ngôn ngữ lậptrình
• Được chia thành 5 thế hệ.
•Việc phân chia cấp cao hay thấpphụ thuộc
mức độ trừutượng của ngôn ngữ
–Cấpthấp: gầnvớimáy
–Cấpcao: gầnvới ngôn ngữ tự nhiên
2. Đặctrưng của ngôn ngữ lậptrìnhcấpcao
149/4/2012
Các thế hệ ngôn ngữ lậptrình
• Các ngôn ngữ lậptrìnhbậcthấp
–Thế hệ thứ nhất : ngôn ngữ máy
–Thế hệ thứ hai : Assembly
•Thế hệ thứ ba
–Dễ hiểuhơn
•Câulệnh gần ngôn ngữ tự nhiên
– Cho phép thựchiện các khai báo, Ví dụ biến
–Phầnlớn các NNLT cho phép lậptrìnhcấutrúc
–Vídụ: Fortran, Cobol, C, C++, Basic .
2. Đặctrưng của ngôn ngữ lậptrìnhcấpcao
←Ngôn ngữ bậccao
159/4/2012
Các thế hệ ngôn ngữ lậptrình

• Ngôn ngữ lậptrìnhthế hệ thứ tư
–Thường đượcsử dụng trong mộtlĩnh vựccụ thể
–Dễ lậptrình,xâydựng phầnmềm
–Cóthể kèm công cụ tạo form, báo cáo
–Vídụ :SQL, Visual Basic, Oracle . . .
• Ngôn ngữ lậptrìnhthế hệ thứ năm
–Giảiquyết bài toán dựatrêncácràngbuộc đưaracho
chương trình (không phảigiảithuậtcủangườilậptrình)
–Việcgiải quyết bài toán do máy tính thựchiện
–Phầnlớn các ngôn ngữ dùng để lậptrìnhlogic
•Giảiquyết các bài toán trong lĩnh vựctrítuệ nhân tạo
2. Đặctrưng của ngôn ngữ lậptrìnhcấpcao
6
169/4/2012
Các thành phầncủaNNLTCC
1. Từ vựng và cú pháp
2. Kiểudữ liệu
3. Các đạilượng
4. Các toán tử và biểuthức
5. Các câu lệnh
6. Chương trình con
2. Đặctrưng của ngôn ngữ lậptrìnhcấpcao
179/4/2012
Từ vựng và cú pháp
Từ vựng
–Chữ cái: A Z, a z
–Chứ sô: 0 9
–Dấu: dấuchứcnăng, dấu toán tử
•Dấu đơn: +, -, ; {, }
•Dấu kép: >=, <=, /*, */

–Từ khóa : từ dành riêng cho ngôn ngữ
• Được dùng để khai báo, ra lệnh cho chương trình

Cú pháp
– Là các quy tắc để
•Viếtracácđạilượng
•Viếtcáccâulệnh
2. Đặctrưng của ngôn ngữ lậptrìnhcấpcao
189/4/2012
Kiểudữ liệu
Các kiểucơ bản
–Kiểusố nguyên int Interger
–Kiểusố thực float Real
–Kiểukýtự char Char
–Kiểu logic 0, 1 Boolean
Kiểudữ liệucócấutrúc
–Kiểumảng [ ] Array
–Kiểuchuỗi * String
–Kiểubảnghi struct Record
–Kiểu con trỏ, & ^
–Kiểu file FILE File
2. Đặctrưng của ngôn ngữ lậptrìnhcấpcao
7
199/4/2012
Các đạilượng
 Hằng
–Số nguyên
•Cáchbiểudiễn (decimal,octal, hexadecimal, )
–Số thực
•Dấuphẩytĩnh

•Dấuphẩy động
–Hằng chuỗi
•C: “Hello”
• Pascal: ‘Hello’
 Tên
–Nguyêntắc đặttên?
– Độ dài?
2. Đặctrưng của ngôn ngữ lậptrìnhcấpcao
209/4/2012
Toán tử và biểuthức
 Toán tử
–Số học: cộng (+), chia, chia dư(%, MOD),
– Logic
•Quanhệ: bằng (=,==) khác (!=, <>), lớnhơn, (>),
• Logic: Và (AND, &&), hoặc( OR, ||),
– Xâu: ghép xâu ←Pascal
 Biểuthức ← Kếthợp các toán hạng bởitoántử
–Số học: Trả về mộtcon số
– Logic: Trả về mộtgiátrị luậnlý
– Xâu: Trả về mộtchuỗikýhiệu
2. Đặctrưng của ngôn ngữ lậptrìnhcấpcao
219/4/2012
Các câu lệnh
 Câu lệnh tuầntự
–Câulệnh gán: :=, =
–Câulệnh vào/ra, gọi hàm
–Câulệnh ghép, gộp: begin end, { }
 Câu lệnh rẽ nhánh
–1 vào1 ra:if…then, if()
– 1 vào 2 ra: if …then…else, if()…else…

– 1 vào, nhiềura: case … of, switch() {}
 Câu lệnh lặp
–Số lầnlặpxácđịnh: For to/downto do, for( ; ; )
–Kiểmtrađiềukiệntrước: While Do, while ()
–Kiểmtrađiềukiện sau: Repeat Until, do while()
2. Đặctrưng của ngôn ngữ lậptrìnhcấpcao
8
229/4/2012
Chương trình con
Các dạng chương trình con
–Thủ tục→ Không trả về giá trị (void)
–Hàm→ Trả về mộtgiátrị
Vấn đề truyền tham số
– Truyềntheotrị: Không thay đổigiátrị
– Truyềntheobiến(địachỉ): thay đổigiátrị
Vấn đề Địaphương /toàn cục
– Địaphương: chỉ tồntại trong chương trình con
– Roàn cục: Tồntại trong toàn bộ chương trình
2. Đặctrưng của ngôn ngữ lậptrìnhcấpcao
239/4/2012
Nhậnxét
Ngôn ngữ lậptrìnhbậccaocó
nguyên tắcgiống nhau, cách thể
hiệncóthể khác nhau
2. Đặctrưng của ngôn ngữ lậptrìnhcấpcao
249/4/2012
Chương 1: Những khái niệmcơ bản
1. Ngôn ngữ lậptrìnhcấp cao và trình dịch
2. Đặctrưng của ngôn ngữ lậptrìnhcấpcao
3. Các giai đoạn chính củachương trình dịch

4. Khái niệm ngôn ngữ
5. Vănphạm phi ngữ cảnh
6. Giớithiệungônngữ PL/0 mở rộng
9
259/4/2012
Các phase củachương trình dịch
Chương trình dịch gồm 3 phase chính
1. Phân tích từ vựng
2. Phân tích cú pháp
– Phân tích ngữ nghĩa
3. Sinh mã
3. Các giai đoạn chính củachương trình dịch
269/4/2012
Cấutrúcchương trình dịch
Phân tích từ vựng
Chương trình nguồn
Phântíchcúpháp
Phân tích ngữ nghĩa
Sinh mã trung gian
Tối ưumã
Sinh mã máy
Chương trình đích
Bảng

hiệu
Xử lý
lỗi
279/4/2012
Bảng ký hiệu
3. Các giai đoạn chính củachương trình dịch

•Làcấutrúcdữ liệu dùng chứatênvàthuộc
tính cầnthiếtcủa chúng
–Thuộctínhcungcấp thông tin
•Vị trí, kiểu, phạmvị hoạt động…
–Nếulàtênchương trình con: số tham số, kiểutrả về
–Tênđượcxácđịnh bởibộ phân tích từ vựng
•Khichỉ ra đượcmột tên, tùy thuộcvàovị trí
của tên trong chương trình
– Đưatênvàthuộc tính vào bảng ký hiệu
–Lấy thông tin của tên trong bảng ký hiệu
10
289/4/2012
Bảng ký hiệu→Ví dụ
pos = init + 10 * size;
3. Các giai đoạn chính củachương trình dịch
float pos, init, size; //var pos, init, size: real
Bảng ký hiệu
….
….
LoạiKiểuTên
….
varrealposId1
varrealinitId2
varrealsizeId3
….
LoạiKiểuTên
Tên
Kiểu
299/4/2012
Phân tích từ vựng (Lexical Analysis - Scanner)

3. Các giai đoạn chính củachương trình dịch
Là pha đầutiêncủachương trình dịch
•Duyệttừng ký tự củachương trình nguồn
–Loạibỏ cáckýtự thừa
•Dấu tab, khoảng trắng, chú thích
•Xâydựng các từ vựng từ cáckýtựđọc được
•Nhậndạng các từ tố từ các từ vựng
– Từ tố (token) là đơnvị cú pháp đượcxử lý
trong quá trình dịch như mộtthựcthể không
thể chia nhỏ hơnnữa
• Chuyểncáctừ tố cho pha tiếp
309/4/2012
Phân tích từ vựng →Ví dụ
3. Các giai đoạn chính củachương trình dịch
Bộ PTTV thựchiện
• Đọctừng ký tự: bắt đầutừ chữ cái p
–Nhậndạng từ vựng thuộcdạng tên, hoặctừ khóa (vì bắt
đầubởi1 chữ cái)
– Đọctiếp(o, s) tớikhigặpkýtự khác chữ cái, chữ số,
•Gặpdấutrắng → xây dựng xong từ vựng pos
–Do pos không trùng vớitừ khóa. Vậy pos là tên (ident)
–Trả lạichobộ phân tích cú pháp từ tố ident
• Đọctiếp đượcdấu : rồidấu = và sau đódấucách
–Nhậndạng đượctừ vựng := và trả về từ tố gán (assign)
pos := init + 10 * size;
11
319/4/2012
Phân tích từ vựng →Ví dụ
Bộ PTTV trả về
3. Các giai đoạn chính củachương trình dịch

pos := init + 10 * size;
Chấmphẩysemicolon
;8
Tên
ident
size7
Dấu nhân
times
*6
Con số
number
105
Dấucộng
plus
+4
Tên
ident
init3
Phép gán
assign
:=2
Từ tố:
assign, ident,
plus,
do người
viếtCTD tự
đặtrađể
dễ dàng
mã hóa
c/trình

Tên
ident
pos1
Ý nghĩaTừ tốTừ vựng
329/4/2012
Phân tích cú pháp (Syntax Analysis)
3. Các giai đoạn chính củachương trình dịch
•Bộ ptcp phân tích chương trình nguồn
–Dựavàocáctừ tố nhận đượctừ pha pttv
•Kiểmtranhững từ tố có tuân theo quy tắc
cú pháp của ngôn ngữđượcdịch không
– Cú pháp thể hiệncấutrúcvănphạmcủa ngôn
ngữ, đượcmôtả dạng: đệ quy, BNF, sơđồ
•Kếtquả củabộ phân tích cú pháp:
– Cây phân tích cú pháp (nếucó)
• Có cây phân tích → chương trình đúng cú pháp
– Thông báo lỗinếungượclại
339/4/2012
Phântíchcúpháp→Ví dụ 1
3. Các giai đoạn chính củachương trình dịch
•Quytắc đinh nghĩamộtbiểuthức
1. Tênlàmộtbiểuthức
2. Con số là biểuthức
3. NếuE, E
1
, E
2
là biểuthứcthì
E
1

+E
2
, E
1
* E
2
, (E) là biểuthức
•Kiểm định: init +10 * size là biểuthức?
– Theo (2): 10 là biểuthức
– Theo (1): size là biểuthức
– Theo (3) 10 * size là biểuthức
– Theo (1): init là biểuthức
– Theo (3): init + 10 * size là biểuthức
Luậtcơ sở
Luật đệ quy
12
349/4/2012
Phântíchcúpháp→Ví dụ 2
3. Các giai đoạn chính củachương trình dịch
•Quytắc đinh nghĩamộtlệnh
1. NếuId làmột Tên, E là mộtbiểuthứcthì
Id := E là mộtcâulệnh
2. NếuE làmộtbiểuthức, S là mộtlệnh thì
If E Then S, While E Do S là câu lệnh
Kiểm định: pos := init + 10 * size là câu lệnh?
– Theo bộ phân tích từ vựng: pos là mộttên
– Theo ví dụ 1: init + 10 * size là mộtbiểuthức
–Vậy theo luật(1) pos := init+10*size là mộtlệnh
Ptcp thường đượcbiểudiễnbởi cây phân tích/cây cú pháp
359/4/2012

Phântíchcúpháp→ Cây phân tích (parse tree)
3. Các giai đoạn chính củachương trình dịch
<Statement>
<ident>
<Expr>
<Ident>
<Expr>
<Expression>
init
10
<Number>
pos
:=
*
<Expr><Expr>
+
<Ident>
size
pos := init + 10 * size
369/4/2012
Phântíchcúpháp→ Cây cú pháp (syntax tree)
3. Các giai đoạn chính củachương trình dịch
pos := init + 10 * size
init
10
pos
:=
*
+
size

• Các nút trong là các toán tử
• Các toán hạng là các nút con của toán tử
13
379/4/2012
Phân tích ngữ nghĩa (Semantic Analysis)
3. Các giai đoạn chính củachương trình dịch
•Kiểmtralỗingữ nghĩacủachương trình
–Lệnh pos := init+10*size đúng cú pháp
–Nếu pos là hằng số
→ pos := init+10*size sai ngữ nghĩa
•Kiểmtrakiểu toán hạng có phù hợp toán tử
– % (MOD) đòi hỏi toán hạng nguyên
–Mộtsố toán tử chấpnhận toán hạng khác kiểu
•Vấn đề chuyểnkiểutựđộng (nguyên

thực)
• Ví dụ pos := init+int2Real(10) * size
•Lấy thông tin về kiểucủa danh biểu (tên)
– Thông tin dùng cho giai đoạnsinhmã
389/4/2012
Sinh mã (Code Generation)
3. Các giai đoạn chính củachương trình dịch
• Đượcthựchiệnkhichương trình nguồn
đúng cả về cú pháp và ngữ nghĩa
•Thường gồm 3 giai đoạn
– Sinh mã trung gian
–Tối ưumã
–Sinhmãđích
399/4/2012
Sinh mã→Sinh mã trung gian

3. Các giai đoạn chính củachương trình dịch
• Mã nguồn đượcchuyển sang chương trình tương
đương trong ngôn ngữ trung gian
– Mã trung gian là mã máy độclập, tương tự vớitậplệnh
trong máy.
• Ưu điểmcủa mã trung gian
–Thuậnlợikhicầnthayđổicáchbiểudiễnchương trình đích
–Cóthể tối ưu hóa mã độclậpvớimáyđích cho dạng biểu
diễn trung gian.
–Giảmthờigianthựcthichương trình đích vì mã trung gian
có thểđượctối ưu
• Ngôn ngữ trung gian
–Mã3 địachỉ (thường được dùng)
– Cây cú pháp, Ký pháp Ba Lan sau (hậutố),
14
409/4/2012
Sinh mã→Sinh mã trung gian→Mã 3 địachỉ
3. Các giai đoạn chính củachương trình dịch
•Mỗicâulệnh có nhiềunhất
– 3 toán hạng
– 2 toán tử, trong đócó1 toántử gán
•Chương trình dịch phảisinhrabiếntạm để
chứagiátrị tính toán sau mỗilệnh
Ví dụ: pos := init+int2Real(10) * size
Sinh ra mã 3 địachỉ
Temp1 := Int2Real(10)
Temp2 := Temp1 * Id 3
Temp3 := Id2 + Temp2
Id1:= Temp3
Id1, Id2, Id 3 là các

con trỏ, trỏ tớicác
phầntử size, init, pos
trong bảng ký hiệu
419/4/2012
Sinh mã→Tối ưu mã trung gian
3. Các giai đoạn chính củachương trình dịch
•Mục đích:
–Tối ưuvề kích thước, tốc độ
Ví dụ
– Int2Real() đượcthaybằng số thựctạithời
điểmdịch
– Temp3 chỉ dùng 1 lầnlàmnơilưutạmthờidữ
liệutrướckhichuyểnchoId1
•Cóthể thay Id1 trựctiếpchoTemp3
–Kếtquả
Temp1 := 10.0 * Id 3
Id1 := Id2 + Temp1
429/4/2012
Sinh mã→Sinh mã đích
3. Các giai đoạn chính củachương trình dịch
• Mục đích: Tạochương trình thựcthi
• Thựchiện:
– Các biến đượccấpô nhớ cụ thể
–Cáccâulệnh trung gian đượcthaybằng chuỗi
mã máy tương đương
– Các biến được ấn định cho các thanh ghi
Ví dụ
MOVF Id3, R2
MULF #10.0, R2
MOVF Id2, R1

ADDF R2, R1
MOVF R1, Id1
Temp1 := 10.0 * Id 3
ID1:= Id2 + Temp1
15
439/4/2012
Xử lý lỗi
3. Các giai đoạn chính củachương trình dịch
Lỗicóthể gặp trong mọiphacủaCTD
• Phân tích từ vựng
–Gặpkýtự lạ. Ví dụ: @, $, trong NNLT C
• Phân tích cú pháp
– Không tuân theo cú pháp: VD while (a <> b)
• Phân tích ngữ nghĩa
– Gán giá trị cho hằng, tính toán vớitênthủ tục
•Sinhmã
–Kíchthước quá lớn
Ví dụ: int Arr[1000][1000]; → Lỗitrànô nhớ
449/4/2012
Xử lý lỗi
3. Các giai đoạn chính củachương trình dịch
•Gặplỗi, chương trình dịch cần thông báo
– Ghi nhậnkiểulỗi
– Ghi nhậnvị trí gây ra lỗi (dòng, cột, )
•Cóthể cầnhồiphụcsaukhigặplỗi
–Mục đích: cho phép tiến hành phân tích tiếptục,
tránh lãng phí
–Cóthể thông báo không chính xác
459/4/2012
Quá trình dịch mộtcâulệnh

Position := Initial+Rate*60
[
Phan Thị Tươi, 1998]
16
469/4/2012
Ghi chú
3. Các giai đoạn chính củachương trình dịch
• Phân chia thành từng pha nhằmmục đích
nghiên cứu để chọngiải pháp thích hợp
• Trong cài đặt, kếthợp các pha thành các
modul chương trình. Thường gồm2 phần
– Phần đầu: Modul liên quan tới phân tích từ
vựng, phân tích cú pháp, phân tích ngữ nghĩavà
sinh mã trung gian
– Phần sau: Tối ưu mã, sinh mã đích, xử lý lỗi
•Cơ sởđềra ngôn ngữ lậptrìnhlàlý thuyết
ngôn ngữ và vănphạm
479/4/2012
Chương 1: Những khái niệmcơ bản
1. Ngôn ngữ lậptrìnhcấp cao và trình dịch
2. Đặctrưng của ngôn ngữ lậptrìnhcấpcao
3. Các giai đoạn chính củachương trình dịch
4. Khái niệm ngôn ngữ
5. Vănphạm phi ngữ cảnh
6. Giớithiệungônngữ PL/0 mở rộng
489/4/2012
Giớithiệu
4. Khái niệm ngôn ngữ
• Ngôn ngữ (tự nhiên/nhân tạo):
– Tậphợp các câu có cấu trúc quy định

• Câu:
–Tậphợpcáctừ
•Từ:
–Kýhiệu nào đó
•Ngữ pháp/cú pháp
– Cấu trúc quy định tạocâucủa trong ngôn ngữ
– Ngôn ngữ lậptrình→ cú pháp
17
499/4/2012
Khái niệmvănphạm và ngôn ngữ
4. Khái niệm ngôn ngữ
1. Bộ chữ
2. Xâu ký tự
3. Vănphạm
4. Suy dẫn
5. Câu
6. Ngôn ngữ
7. Đệ quy
8. Phân loạivănphạm
509/4/2012
Bộ chữ
4. Khái niệm ngôn ngữ
•Tậphữuhạnvàkhácrỗng mà các thành phần
đượcgọi là các ký hiệu
–Thường đượckýhiệu V (Vocabulary)
Ví dụ
–Bảng chữ cái a,b,c…là bộ chữ cái củamột ngôn
ngữ tự nhiên
–Bộ từđiểntiếngAnhlàbộ chữ cái trong ngôn
ngữ tiếng Anh

–Cáctừ khóa, tên, ký hiệu là bộ chữ củamột
ngôn ngữ lậptrình
519/4/2012
Xâu ký tự
4. Khái niệm ngôn ngữ
Khái niệm
–Làdãyliêntiếp, hữuhạn các ký củamộtbộ chữ
–Thường đượckýhiệu α, β, γ,
–Xâurỗng: xâu không chứakýhiệu nào
•Thường đượckýhiệu ε
Ví dụ
– α : Madam → Xâutrênbảng chữ cái a, b, c,
– β : Hôm nay trời đẹp → Xâu trong tiếng Việt
– γ : while (a > b) a = a – b; → Xâu trong NNLT
18
529/4/2012
Xâu ký tự
4. Khái niệm ngôn ngữ
• Độ dài xâu
–Số ký hiệu trong xâu đó
–Thường đượckýhiệu|α| hay l(α)
–Vídụ:l(α) = 5 l(β)= 4
l(γ)= 12 l(ε) = 0
• Ghép xâu
–Ghép2 xâuα, β là việcviếtcáckýtự của α rồi đến β
• Xâu con
–Xâuv là xâu con của w nếuxâuv đượctạonêntừ dãy
cáckýhiệuliêntiếpcủaxâuw
• v là tiềntố w nếu v nằm ởđầu, nếunằm ở cuối, v là hậutố
• Ví dụ:

ada là xâu con củaxâumadam
539/4/2012
Xâu ký tự → Tính toán trên tậpxâu
4. Khái niệm ngôn ngữ
A, B là 2 tập xâu trên mộtbộ chữ
• Hợp: A ∪ B = {α| α ∈A hoặc α ∈B }
• Giao: A ∩ B = {α| α ∈A và α ∈B }
• Tích/Ghép: AB={x=αβ| α ∈A và β ∈B }
• Tích Descarter: AB={<α,β>| α ∈A và β ∈A }
• Lũythừa: A
n
= {ε} nếun = 0
A
n
= AA
n-1
= A
n-1
A nếun > 0
• Bao đóng: A
*
= lim(A
0
∪ A
1
∪ ∪ A
n
), n→∞
• Bao đóng dương : A
+

= lim(A
1
∪ A
2
∪ ∪ A
n
)
549/4/2012
Xâu ký tự → Tính toán trên xâu
4. Khái niệm ngôn ngữ
•Tínhchất
–A
+
= A A
*
= A
*
A
– A* = A
+
∪ {ε}
• Ví dụ: Cho A = {0, 1}
–A
0
= {ε}
–A
1
= {0, 1}
–A
2

= {0, 1} {0, 1} = {00, 01, 10, 11}
–…
–A
n
= {Tậpcácsố nhị phân độ dài n}
–A
+
= {0, 1, 00, 01, 10, 11, 000, 001,…}
–A
*
= {ε, 0, 1, 00, 01, 10, 11, 000, 001,…}
19
559/4/2012
Vănphạm (Grammar)
4. Khái niệm ngôn ngữ
• V
T
: Tập các ký hiệukết thúc củamộtbảng chữ
–Cácphầntử củaV
T
thường đượckýhiệu: a, b, c,
• V
N
: Tập các k/hiệukhôngkết thúc củamộtbảng chữ
–Cácphầntử củaV
N
thường đượckýhiệu: A, B, C,
–V
T
∩V

N
= ∅ ; V = V
T
∪V
N
: Bộ chữ củavănphạm
• S: Ký hiệubắt đầu. S ∈V
N
• P: Tậphữuhạncáccặp(α,β) đượcgọi là các quy
tắchay cácsảnxuất. Thường đượcviết α→β
– α ∈ V* V
N
V* //

Phảicóítnhấtmộtkýhiệu không k/thúc
– β ∈ V* //

Có thể chứaxâurỗng
G = (V
T
, V
N
, P, S)
569/4/2012
Vănphạm → Ví dụ
4. Khái niệm ngôn ngữ
Cho vănphạm
G
1
= (V

T
, V
N
, P, S)
Trong đó
–V
T
={a, b, c}
–V
N
={S, A}
–P ={S →aSA, S→b, A →bA, A→c}
Ghi chú
–Chỉ cầnnhắctớitậpsảnxuất khi giớithiệu
vănphạm
579/4/2012
Suy dẫn (Derivation)
4. Khái niệm ngôn ngữ
Cho vănphạmG = (V
T
, V
N
, P, S)
•Gọi γ viếtraδ hay δ đượcsuydẫntrựctiếp
ra từ γ, và đượckýhiệu γ ⇒ δ nếutồntại
các xâu α, β, v, w thỏa mãn các điềukiện
– γ = αvβ
– δ = αwβ
–(v, w) ∈P {có thể viếtv→w ∈ P}
– α, β ∈ V

*
, v ∈V
*
V
N
V
*
, w∈ V
*
•Vídụ vớivănphạmG
1
–aSc⇒ abc {α=a, β=c, v=S,w=b, S

b

P }
Do v→w là mộtsảnxuấtcủaP.
Thay v trong γ bằng w, sẽđược δ
20
589/4/2012
Suy dẫn
4. Khái niệm ngôn ngữ
Cho vănphạmG = (V
T
, V
N
, P, S)
•Gọi δ đượcsuydẫnratừ γ, nếutồntạidãy
các xâu α
0

, α
1
, α
2
,…, α
n
thỏamãnđiềukiện
γ = α
0
⇒ α
1
⇒ α
2
⇒ …. ⇒ α
n
= δ
•Nếun ≥ 1, áp dụng ít nhất1 bướcsuydẫn,
ký hiệu: γ ⇒
+
δ
•Nếun ≥ 0, có thể không áp dụng bước nào,
ký hiệu: γ ⇒
*
δ
599/4/2012
Suy dẫn → Ví dụ
4. Khái niệm ngôn ngữ
Xét vănphạmG
1
• abA ⇒ abbA {α=ab, β=ε, v=A,w=bA, A


bA

P }
• abA ⇒ abbA ⇒ abbbA ⇒ abbbbA ⇒ abbbbc

0
= abA, α
1
= abbA,… α
4
= abbbbc}
Vậy
abA ⇒
*
abbbbc
abA ⇒
+
abbbbc
abA ⇒
*
abA //← Áp dụng 0 bướcsuydẫn
abA ⇒
+
abA //← Sai, do áp dụng ít nhất1 suydẫn
609/4/2012
Câu
4. Khái niệm ngôn ngữ
Cho vănphạmG = (V
T

, V
N
, P, S)
•Mộtxâuδ đượcsuyratừ ký hiệukhởi đầu
S, đượcgọilàdạng câu hay dạng cú pháp
– δ là mộtdạng câu nếuS ⇒
*
δ
•Câulàmộtdạng cú pháp chỉ bao gồm toàn
ký hiệukết thúc
– δ là mộtcâunếuS ⇒
*
δ và δ∈ V
T
*
21
619/4/2012
Câu → Ví dụ
4. Khái niệm ngôn ngữ
Ví dụ vănphạmG
1
S⇒aSA ⇒abA ⇒abc
S⇒aSA ⇒abA ⇒abbA⇒abbc
S⇒aSA ⇒abA ⇒abbA ⇒abbbA⇒abbbc
Dạng câu: aSA, abA, abc, abbA, abbc,…
Câu: abc, abbc, abbbc, abbbbc,…
aabbcc có phảilàmột câu?
629/4/2012
Ngôn ngữ
4. Khái niệm ngôn ngữ

Cho vănphạmG = (V
T
, V
N
, P, S)
• Ngôn ngữ L được sinh ra từ vănphạm G, ký
hiệu L(G) là tậptấtcả các câu củavănphạm
– L(G) = {δ | δ∈ V
T
*
và S ⇒
*
δ }
•Vídụ vănphạmG
1
–L(G
1
) = {b, abc, abbc, abbbc,… aabbcc,…}
•G
2
= ({a,b}, {S,A}, {S →aA, A →a, A →b},S)
–L(G
2
) = {aa, ab}
639/4/2012
Quy ước
4. Khái niệm ngôn ngữ
NếuA→α
1
A→α

2

A→α
n
Đượcviếtgọnlại thành A→α
1
| α
2
| …| α
n
Ví dụ:
G
1
=({a,b,c},{S,A},{S →aSA|b, A →bA|c},S)
G
2
= ({a,b}, {S,A}, {S →aA, A →a|b}, S)
22
649/4/2012
Ngôn ngữ→Ví dụ
4. Khái niệm ngôn ngữ
Cho vănphạmG = (V
T
, V
N
, P, S)
–V
T
= {Mơ, Mận, thì, uống, nhanh, đẹp}
–V

N
={<Câu>,<Danh từ>,<Động từ>,<Tính từ>}
– S : Câu
– P = { <Câu>→<Danh từ><Động từ><Tính từ>,
<Danh từ> → Mơ | Mận,
<Động từ> → uống | thì,
<Tính từ> → nhanh | đẹp}
L(G) = {Mơ uống nhanh, Mơ thì nhanh, Mơ thì đẹp,
Mơ uống đẹp, Mận thì nhanh,…}
659/4/2012
Đệ quy
4. Khái niệm ngôn ngữ
Cho vănphạmG = (V
T
, V
N
, P, S)
A ∈V
N
//← A là mộtkýhiệu không kết thúc
•A đượcgọilàđệ quy nếutồntại
A⇒
+
αAβ, với α, β ∈V
*
•Nếu α=ε, (A

+
Aβ) thì gọilàđệ quy trái
–Nếu A


Aβ: Đệ quy trái trựctiếp(Sảnxuất: A

Aβ)
•Nếu β =ε, (A

+
αA) thì gọilàđệ quy phải
–Nếu A

αA : Đệ quy phải trựctiếp(Sảnxuất: A

αA)
•Nếu α,β ≠ ε, (A

+
αAβ) thì gọilàđệ quy trong
–Nếu A

αAβ: Đệ quy trong trựctiếp(Sảnxuất:A

αAβ)
Ví dụ, định nghĩaTên
<Tên>→<Chữ cái>|<Tên><Chữ cái>|<Tên><Chữ số>
669/4/2012
Vănphạmtương đương
4. Khái niệm ngôn ngữ
Hai vănphạmlàtương đương, nếu chúng
cùng sinh ra một ngôn ngữ
G

1
= (
1
V
T
,
1
V
N
, P
1
, S
1
)
G
2
= (
2
V
T
,
2
V
N
, P
2
, S
2
)
L(G

1
) = L(G
2
) ⇒ G
1
⇔G
2
23
679/4/2012
Phân loạivănphạm
4. Khái niệm ngôn ngữ
Phân thành 4 loại [Chomsky,1957]
1. Vănphạmngữ cấu(pharse structure grammar)
1. Ràng buộc: Không có ràng buộc ngoài đ/nghĩa
2. VănPhạmcảmngữ cảnh (context sensitive)
• Ràng buộc: Nếu α→β thì l(α) ≤l(β); S →εđượcchấp
nhận khi S không là vế phảicủaSX bấtkỳ
3. Vănphạmphi ngữ cảnh (context free grammar)
• Ràng buộc: Vế trái củacác sảnxuấtlàmộtkýhiệu
không kếtthúc
4. Vănphạm chính quy (regular grammar)
Ràng buộc: SX có dạng A →a|aB hoặc A →a|Ba
689/4/2012
Phân loạivănphạm
4. Khái niệm ngôn ngữ
1
2
3
4
Đượcsử dụng

trong biểudiễn
cấutrúctừ vựng
Thường được dùng
biểudiễncúphápcủa
ngôn ngữ lậptrình
699/4/2012
Chương 1: Những khái niệmcơ bản
1. Ngôn ngữ lậptrìnhcấp cao và trình dịch
2. Đặctrưng của ngôn ngữ lậptrìnhcấpcao
3. Các giai đoạn chính củachương trình dịch
4. Khái niệm ngôn ngữ
5. Vănphạm phi ngữ cảnh
6. Giớithiệungônngữ PL/0 mở rộng
24
709/4/2012
Vănphạmphi ngữ cảnh
5. Vănphạm phi ngữ cảnh
•Câysuydẫn
•Suydẫntrái, suydẫnphải
•Vănphạm đơn nghĩa
•Sảnxuất đệ quy
•Vấn đề phân tích cú pháp
719/4/2012
Cây suy dẫn
•G = (V
T
, V
N
,P, S) là văn pham phi ngữ cảnh
•Câysuydẫn D cho VP G là cây có thứ tự, trong đó

–Mỗimột nút có nhãn là ký hiệu trong tập V
T
∪V
N
∪ {ε}
–NhãncủanútgốclàS (Start Symbol)
– Các nút lá có nhãn là mộtkýhiệukết thúc hoặc
ε
–Nếu A là nút trong củaD vàX
1
,X
2
, , X
n
là các hậuduệ trực
tiếpcủa A theo tự trái qua phảithì
A → X
1
X
2
X
n
là mộtsảnxuấtcủaP
–Nếu n=0 (X= ε) thì X là hậuduệđơnvàduynhấtcủaA và
A → ε là mộtsảnxuất trong P,
–Biên(kếtquả) củacâysuydẫnlàmộttừ thu đượcbằng
cách nốicácnútlálạitheothứ tự từ trái qua phải
• Rõ ràng, nếu α là biên củaD thìS ⇒
*
α

5. Vănphạm phi ngữ cảnh
729/4/2012
Cây suy dẫn→Ví dụ
Vănphạm:
E→ E+E | E*E | (E) | a
Xét xâu: ω = a + a * a
E
a
E
+
E
a
E
*
E
a
E
a
E
+
E
a
E
*
E
a
Thay thế các biến trái nhất:
E⇒E*E ⇒E+E*E ⇒a+E*E ⇒a+a*E ⇒a+a*a
Thay thế các biến phảinhất:
E⇒E*E ⇒E*a ⇒E+E*a ⇒E+a*a ⇒a+a*a

Thay thế các biến trái nhất:
E⇒E+E⇒a+E⇒a+E*E⇒a+a*E⇒a+a*a
Thay thế các biến phảinhất:
E⇒E+E ⇒E+E*E ⇒E+E*a ⇒E+a*a ⇒a+a*a
K
h
á
c
n
h
a
u
?
5. Vănphạm phi ngữ cảnh
25
739/4/2012
Suy dẫntrái
Cho vănphạmG = (V
T
, V
N
, P, S)
•Gọi δ đượcsuydẫn trựctiếp ra từ bên trái của γ, và
đượckýkiệu γ ⇒
L
δ nếutồntại các xâu x, α, β thỏa
mãn các điềukiện
– γ = xAα ⇒ xβα = δ
– A→ β ∈P, và
– α, β ∈V

*
, x∈V
T
*
•Gọi δ đượcsuydẫnratừ bên trái của γ nếutồntại
dãy các xâu α
0
, α
1
, α
2
,…,α
n
thỏamãn
γ = α
0

L
α
1

L
α
2

L
…. ⇒
L
α
n

= δ
–Nếun ≥ 1, dùng ít nhấtmộtsuydẫn, ký hiệu: γ ⇒
L
+
δ
–Nếun ≥ 0, có thể không suy dẫn nào, ký hiệu: γ ⇒
L
*
δ
Luôn thay ký hiệukhôngkết
thúc bên trái nhất củaxâu
5. Vănphạm phi ngữ cảnh
749/4/2012
Suy dẫnphải
Cho vănphạmG = (V
T
, V
N
, P, S)
•Gọi δ đượcsuydẫn trựctiếp ra từ bên phải của γ,
và đượckýkiệu γ ⇒
R
δ nếutồntại các xâu y, α, β
thỏa mãn các điềukiện
– γ = αAy ⇒ αβy = δ
– A→ β ∈P, và
– α, β ∈V
*
, y∈V
T

*
•Gọi δ đượcsuydẫnratừ bên phảicủa γ nếutồntại
dãy các xâu α
0
, α
1
, α
2
,…, α
n
thỏa mãn:
γ = α
0

R
α
1

R
α
2

R
…. ⇒
R
α
n
= δ
–Nếun ≥ 1, dùng ít nhấtmộtsuydẫn, ký hiệu: γ ⇒
R

+
δ
–Nếun ≥ 0, có thể không suy dẫn nào, ký hiệu: γ ⇒
R
*
δ
Luôn thay ký hiệukhôngkết
thúc bên phảinhất củaxâu
5. Vănphạm phi ngữ cảnh
759/4/2012
Vănphạm đơn nghĩa
Vănphạm PNC G=(V
T
,V
N
,P,S) đơn nghĩanếu
–Vớimỗicâu ω∈L(G) chỉ có đúng mộtsuydẫn
trái (hoặcmộtsuydẫnphải) ⇔ Chỉ có đúng một
cây suy dẫn
Ngượclại, nếucónhiềuhơnmộtsuydẫntrái,
hoặcmộtsuydẫnphảihoặc có nhiều cây suy
dẫn ⇒ Vănphạmnhậpnhằng
Nếu ω∈L(G) có nhiềuhơn 2 cây suy dẫn
⇒ Có thể phân tích cú pháp theo nhiềuhơn 2 cách
⇒ Nhiềuhơn2 cáchhiểu
5. Vănphạm phi ngữ cảnh

×