- Quá trình phân tích cú pháp được thực hiện theo phương pháp từ dưới lên - Giai đoạn xử lý ngữ nghĩa sinh viên phải thực hiện bằng cách đặt các hành vi ngữ nghĩa vào bản đặc tả cú pháp.
Trang 1BÀI TẬP LỚN Chương Trình Dịch
ĐỀ TÀI:
“Đề tài 7”
Giáo viên hướng dẫn : Phan Thị Thu Hồng.
Nhóm sinh viên t/h : Nguyễn Thị Hồng Anh
Nguyễn Thị Thu Quỳnh
Hoàng Thị Hoa
Lớp : Tin học A - K51.
HÀ NỘI - 2012
Trang 2- Thực hiện chuyển đổi kiểu từ nguyên sang thực khi cần thiết
- Các danh hiệu phải khai báo trước
Yêu cầu:
- Viết chương trình bằng tay
- Quá trình phân tích cú pháp được thực hiện theo phương pháp từ dưới lên
- Giai đoạn xử lý ngữ nghĩa sinh viên phải thực hiện bằng cách đặt các hành
vi ngữ nghĩa vào bản đặc tả cú pháp
Nhóm 12-L p THC-K52 ớp THC-K52
Trang 3Cú pháp: <Tên biến>:=<Biểu thức>;
* Ý nghĩa :
Biến và các phát biểu gán là các khái niệm quan trọng của một họ các ngôn ngữ lập trình mà Pascal là một đại diện tiêu biểu Chúng phản ánh cách thức hoạt động của máy tính hiện nay, đó là:
- Lưu trữ các giá trị khác nhau vào 1 ô nhớ tại những thời điểm khác nhau
- Một quá trình tính toán có thể coi như là 1 quá trình làm thay đổi giá trị của 1( hay 1 số) ô nhớ nào đó, cho đến khi đạt được giá trị cần tìm
Một khối lệnh bắt đầu bằng BEGIN và chấm dứt ở END
Cú pháp:
Begin
Công việc 1;
Begin End;
Công việc 2;
End;
c Lệnh lặp for
Cấu trúc FOR cho phép lặp lại nhiều lần 1 dãy lệnh Số lần lặp lại dãy lệnh
đã biết trước Phát biểu For có 2 dạng:
Trang 4phép toán lôgic tạo thành biểu thức lôgic
- Biểu thức lôgic đơn giản là biến lôgic hoặc hằng lôgic
- Các biểu thức quan hệ phải được đặt trong cặp dấu ( )
- Giá trị biểu thức lôgic là TRUE hoặc FALSE
Được tạo bởi:
Một biến hoặc một hằng kiểu nguyên hay thực;
- Các biến hay hằng liên kết với nhau bởi các phép toán số học, các dấu ngoặc tròn
Lần lượt từ trái sang phải
- Thực hiện các phép toán trong ngoặc tròn trước
- Dãy các phép toán không chứa ngoặc thực hiện từ trái sang phải
theo thứ tự:
+ Các phép toán * /
+ Các phép toán + - thực hiện sau
Biểu thức chứa một hằng hay biến kiểu thực là biểu thức số học thực, giá trị biểu thức có kiểu thực
Nhóm 12-L p THC-K52 ớp THC-K52
Trang 5Var Var, var , (‘v’|’V’)(‘a’|’A’)(‘r’|’R’)
Begin beGin,Begin, (‘b’|’B’)(‘e’|’E’)(‘g’|’G’)
(‘i’|’I’)(‘n’|’N’)
End End,end, eNd, (‘e’|’E’)(‘n’|’N’)(‘d’|’D’)
(‘i’|’I’)(‘n’|’N’)(‘t’|’T’)(‘e’|’E’)(‘g’|’G’)(‘e’|’E’)
(‘r’|’R’) |(‘r’|’R’)(‘e’|’E’)(‘a’|’A’)
(‘l’|’L’) |(‘b’|’B’)(‘o’|’O’)(‘o’|’O’)(‘l’|’L’)(‘e’|’E’)(‘a’|’A’)
(‘n’|’N’)
IntegerRealBoolean
Trang 6OP2 *,/ ‘+’, ‘-‘ ‘*’,’/’ multi,div
Relop =, <, >, <=, >=,<> ‘=’, ’<’, ’>’, ’<=’, ’>=’, ’<>’ EQ, LT, GT,LE,GE,NE
letter → ‘a’| |’z’|’A’| |’Z’
- Thứ tự ưu tiên của các phép toán trong Pascal (tương ứng với các phép
toán đề bài đưa ra):
Trang 7 Sơ đồ dịch của id và từ khóa:
+ lặp lại một hoặc nhiều lần
? lặp lại không hoặc 1 lần
digit
digit
1
2
20 other
return(num,vtr bdb)
return(num,vtr bdb)
22
Trang 8Sơ đồ dịch nhận dạng khoảng trắng:
II Phân tích cú pháp
A Các luật sinh
s → program
1) program → khaibao body DOT
2) program → body DOT
‘Khai bao
3) khaibao → VAR n_khaibao
4) n_khaibao → kbkieu SEMI n_khaibao // x:integer ; y:real
5) n_khaibao → kbkieu
6) kbkieu→ n_id COLON TYPE SEMI // x:integer
7) n_id → ID COMMA n_id //x,y,z
15) Lgan → ID ASSGN exp SEMI
16) exp → exp OP1 term
Trang 922) term → LPARA exp RPARA
23) term → OP1 term
24) term → NOT term
25) term → TRUE
26) term → FALSE
27) lenh_For→FOR Lgan TO Tricuoi DO body SEMI
28) lenh_For →FOR Lgan DOWNTO Tricuoi DO body SEMI29)Tricuoi→ID|NUM
Trang 11kbkieu→ n_id COLON TYPE SEMI
n_id → ID COMMA n_id
Lgan → ID ASSGN exp SEMI
lenh_For→.FOR Lgan TO Tricuoi DO body SEMI
lenh_For →.FOR Lgan DOWNTO Tricuoi DO body SEMII6=goto(I3,body)
program→khaibao body dot
goto(I3,begin)=I5
Trang 12lenh_For→FOR Lgan TO Tricuoi DO body SEMI
lenh_For →FOR Lgan DOWNTO Tricuoi DO body SEMI Lgan → ID ASSGN exp SEMI
I18=goto(I6,DOT)
program→khaibao body dot
I19=goto(I8,SEMI)
n_khaibao → kbkieu SEMI n_khaibao
n_khaibao → kbkieu SEMI n_khaibao
n_khaibao → kbkieu
kbkieu→ n_id COLON TYPE SEMI
n_id → ID COMMA n_id
n_id → ID
I20=goto(I9,COLON)
Nhóm 12-L p THC-K52 ớp THC-K52
Trang 13kbkieu→ n_id COLON TYPE SEMI
I21=goto(I10,COMMA)
n_id →ID COMMA n_id
n_id →.ID COMMA n_id
Lgan → ID ASSGN exp SEMI
lenh_For→.FOR Lgan TO Tricuoi DO body SEMI
lenh_For →.FOR Lgan DOWNTO Tricuoi DO body SEMII24=goto(I16,ASSGN)
Lgan → ID ASSGN exp SEMI
exp → exp OP1 term
term → LPARA exp RPARA
term → OP1 term
term → NOT term
term → TRUE
term → FALSE
I25=goto(I17,Lgan)
lenh_For→FOR Lgan TO Tricuoi DO body SEMI
lenh_For →FOR Lgan DOWNTO Tricuoi DO body SEMIgoto(I17,ASSGN)=I25
I26=goto(I19,n_khaibao)
n_khaibao → kbkieu SEMI n_khaibao
goto(I20,kbkieu)=I9
Trang 14
goto(I20, n_id) =I10
Lgan → ID ASSGN exp SEMI
exp → exp OP1 term
exp→ exp OP2 term
term → LPARA exp RPARA
exp → exp OP1 term
term → LPARA exp RPARA
term → OP1 term
Nhóm 12-L p THC-K52 ớp THC-K52
Trang 15term → NOT term
term → LPARA exp RPARA
term → OP1 term
term → NOT term
term → LPARA exp RPARA
term → OP1 term
term → NOT term
Trang 16term → LPARA exp RPARA
exp → exp OP1 term
exp→ exp OP2 term
Trang 18lenh_For→FOR Lgan TO Tricuoi DO body SEMI
body→.BEGIN n_stmt End SEMI
I57=goto(I52,DO)
lenh_For →FOR Lgan DOWNTO Tricuoi DO body SEMI
body→.BEGIN n_stmt End SEMI
III Phân tích ngữ nghĩa
- Giai đoạn phân tích ngữ nghĩa sẽ thực hiện việc kiểm tra xem chương trình
nguồn có chứa lỗi về ngữ nghĩa hay không và tập hợp thông tin về kiểu chogiai đoạn sinh mã về sau
- Phân tích ngữ nghĩa gồm 2 nội dung cơ bản:
+Kiểm tra kiểu
+Chuyển đổi kiểu
IV Sinh mã 3 địa chỉ
- Mã 3 địa chỉ là một dạng biểu diễn của mã trung gian
- Mã lệnh 3 địa chỉ là một chuỗi các lệnh có dạng tổng quát là:
x := y op z
Trong đó: - x, y, z là tên, hằng hoặc dữ liệu tạm sinh ra trong khi dịch
- op là một toán tử số học hoặc login
Nhóm 12-L p THC-K52 ớp THC-K52