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

BÁO CÁO CHƯƠNG TRÌNH DỊCH Viết trình biên dịch để dịch một đoạn chương trình gồm các phát biểu sau ra dạng mã 3 địa 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 (168.59 KB, 13 trang )

BÁO CÁO CHƯƠNG TRÌNH DỊCH
Giáo viên hướng dẫn: PhanThị Thu Hồng
Nhóm sinh viên thực hiện
Vũ Thị Ngọc Bích
Lê Thị Dung
Nhâm Thị Nhàn
Nguyễn Thị Thảo
Lớp : THC-K52
Đề tài 10: “Viết trình biên dịch để dịch một đoạn chương trình gồm các
phát biểu sau ra dạng mã 3 địa chỉ:
 Phát biểu gán , for trong C
 Các phát biểu kết thúc bởi dấu ;
 Các biểu thức trong các phát biểu gồm các phép toán: +, -, *, /, ^ và
các toán hạng gồm các định danh, hằng số thực và nguyên (kể các
biểu thức). Độ ưu tiên các phép toán tương tự C. Các phép toán kết
hợp trái trừ phép ^ là kết hợp phải.
 Thực hiện chuyển đổi kiểu dữ liệu từ nguyên sang thực khi cần thiết.
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ừ
trên xuống.
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
Bài làm
I. Phân tích từ vựng
1. Xác định các từ tố
1. Phép gán (ASG) : =; +=; -=; *=; /=; %=; >>=; <<=; &=; |=;
^=
- Gán giá trị trực tiếp: =
- Phép gán giá trị + them, - bớt: += , -=
- Phép gán giá trị nhân, chia, chia có dư: *=, /=, %=


- Phép gán bit shift: >>= , <<=
- Phép gán bít and, or, xor: &=, |=, ^=
2. Các phép toán số học :
OP1: +, -
OP2: * , / , ^
3. Phép tăng, giảm (TG): ++,
4. Toán tử for
5. id
Định danh để đặt cho biến, hằng , kiểu hàm, được đặt
theo quy định:
+/ Gồm chữ cái( letter), chữ số( degit) và dấu _
+/ Bắt đầu bằng chữ cái hoặc dấu _ không bắt đầu bằng
chữ số
+/ Không trùng với từ khóa
6. TYPE
+/ Biểu diễn kiểu số nguyên int, short( số nguyên ngắn),
long( số nguyên dài gấp đôi)
+/ Biểu diễn kiểu số thực float( 4 byte), double( số thực chính
xác kép 8 byte)
7. Relop (các toán tử quan hệ): <; <=; ==; !=; > ; >=
8. Keyword( Các từ khóa) : void, goto, break, case, return,…
9. Các ký tự khác: . , : ; { }! \ $ % # &
10. ws : blank, tab, newline
11.Chương trình: Lời chú thích, đoạn chương trình, hàm, câu
lệnh
2. Xây dựng bảng phân tích Token
Token Lexeme Match
Attribute
 





  
  
  
  
 ! !
  
  
"#$  %&%&%&%& "" 
"#' ! %&%!& (
 )*$)*+, % /.01&% /.0,23245
1&
6,.7
8 9$:';<:9'' 2324,2324 =)->.
"# % %
# & &
?"  
#$  
#'  
@# 2645AB04-B63
CB)4,B>*
2645AB04-B63CB)4
,B>* 
8 $;;$9DE9F ,2324%,2324& #B264.04B4)*
.640G
8" $:'';9:H.D ,2324

:,2324


,2324

%:,2324


∈&%.&%∈&,2324

#B264.04B4)*
.640G
  
2. Xây dựng các sơ đồ chuyển tiếp
2.1 Sơ đồ chuyển tiếp các Token của phép gán
1
Start
2
6
11
4
9
14
18
3
5
8
7
1
0
1
2

1
3
1
5
1
7
1
9
1
6
2
0
0

B4A.0






B4A.0
B4A.0
B4A.0



 






2
3
22
25
28
2
6
2
7
2
9
30
3
1
32
34
3
3
3
5
36
3
7
3
8
2
4

*
B4A.0
B4A.r
B4A.0









!



2
1
2.2 Sơ đồ chuyển tiếp cho Token id (Định danh)
2.3 Sơ đồ chuyển tiếp cho Token số nguyên và số thực
40
41
39
"./.0B0,2324
/.0 B4A.0 *
4
5
44
4

3
4
2
4
8
4
7
46
,2324
,2324
:
,2324
B4A.0
50
4
9

,2324

B0
,2324
,2324
B4A.0

,2324

5
1
B4A.0
*

4)04
II: Phân tích cú pháp
1. Văn phạm gia tố
sct (Luật 1)
ctVOID MAIN "#RPAR body (Luật 2)
bodyBEGIN tct END (Luật 3)
tctdecl n_stmt (Luật 4)
declTYPE n_id SEMI (Luật 5)
n_idID COLON n_id (Luật 6)
n_idID (Luật 7)
n_stmtstmt SEMI n_stmt (Luật 8)
n_stmtstmt SEMI (Luật 9)
stmtpbgan (Luật 10)
stmtbody (Luật 11)
stmtFOR LPAR btkht SEMI btkt SEMI bttg RPAR n_stmt (Luật 12)
btkhtID RELOP NUM (Luật 13)
btktID RELOP NUM (Luật 14)
bttgID TG (Luật 15)
pbganID ASG exp (Luật 17)
exp->term exp’ (Luật 18)
exp’->OP1 term exp’| I %">J4$E&
term KL)+4B04.0M %">J4'9&
4.0MK#'L)+4B04.0MI %">J4'$&
factorID| NUM| NUMF (Luật 22)
factorK#$L)+4B0 %">J4';&
2. Kí hiệu kết thúc
ASG
VOID MAIN
BEGIN
END

SEMI
FOR
NOT
AND
OR
RELOP
ID
NUM
NUMF
LPAR
RPAR
OP1
OP2
COLON
TYPE
TG
$
3. Kí hiệu chưa kết thúc
ct
body
tct
decl
n_stmt
stmt
n_id
pbgan
btkht
btkt
bttg
exp

term
exp’
term’
factor
4. Tính FIRST và FOLLOW
4.1. FIRST
first(S)= { VOID MAIN LPAR RPAR}
first(ct) = { VOID MAIN LPAR RPAR}
first(body)= {BEGIN}
first(tct)= {TYPE}
first(decl)= {TYPE}
first(n_id)= {ID}
first(n_stmt)= { BEGIN, FOR, ID}
first(stmt)= {BEGIN, FOR, ID}
first(btkht)= {ID}
first(btkt)= {ID}
first(bttg)= {ID}
first(pbgan)= {ID}
first(factor)= {OP1, ID, NUM, NUMF}
first(term)= { ID, NUM, NUMF, OP1}
first(exp)= {ID, NUM, NUMF, OP1}
first(exp’)=(I#$&
N054%4.0M&%KI#'&
4.2. FOLLOW
Follow(s) = {$}
Follow(ct) = { $}
Follow(body) = {$}
Follow(tct)= {END, $}
Follow(decl) = {$}
Follow(n_id) = {SEMI, $}

Follow(n_stmt)= {END, $}
Follow(stmt) ={SEMI, $}
Follow(btkht) ={$, SEMI}
Follow(btkt) ={SEMI, $}
follow(pbgan)= {$}
follow(exp’)={$}
follow(exp)={$}
follow(term’)={OP1, $}
follow(term)={OP1, $}
follow(factor)={OP2, $}
5. Bảng phân tích M
K
ý
hi

u
c
h
ư
Ký hiệu nhập
A
S
G
V
O
I
D
M
A
B

E
G
I
N
E
N
D
S
E
M
I
F
O
R
N
O
T
A
N
D
O
R
R
E
L
O
P
I
D
N

U
M
N
U
M
F
L
P
A
R
R
P
A
R
O
P
1
O
P
2
T
Y
P
E
T
G
C
O
L
O

N
$
a
k
ết
t
h
ú
c
I
N

ct
2 2 2

B
o
d
y
3
T
ct
4
D
e
cl
5
N
_
st

m
t
8 8 8
St
m
t
1
2
1
2
1
2
n
_i
d
6
P
b
g
a
n
1
7
B
tk
ht
1
3
B
tk

t
1
4
B
tt
g
1
5
E
x
p
1
8
1
8
1
8
1
8
T
er
m
2
0
2
0
2
0
2
0

F
a
ct
or
2
3
2
3
2
3
2
3
E
x
p’
1
9
Ex
p’

I
T
er
m

2
1
.
0M



I

×