BÁO CÁO CHƯƠNG TRÌNH DỊCHNhó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
Trang 1BÁO CÁO CHƯƠNG TRÌNH DỊCH
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
Trang 2Bà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
Trang 3+/ 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
ASG :=, +=, -=, *=,/=,
%=, >>=, <<=, &=,
|=, ^=
‘:=’, ‘+=’, ‘-=’, ‘*=’, ‘/=’, ‘%=’,
‘>>=’, ‘<<=’, ‘&=’, ‘|=’, ‘^=’
AND && ‘&’’&’
RELOP1 >=,<=,>,< (‘>’’=’)|(‘<’’=’)|(‘>’)|(‘<’) LE, GE, LT, GT
ID a, b1, abcd (letter | ‘_’) | (letter | digits Index
Trang 4| ‘_’)*
TYPE int, short, long,
float, double
‘int’, ‘short’, ‘long’, ’float’,
‘double’
NUM 1,33,10,490,… digit(digit)* Pointer to table
entry NUMREAL 1.2, 2E-3 ,0.5e+4 digit + digit + | digit + (.digit + |
)(‘e’|’E’)(‘+’|’- ‘|)digit +
Pointer to table entry
TG ++ , ‘- -‘, ‘++’
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
Trang 5Start
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
other
=
=
=
=
<
<
other
other
other
>
>
=
=
-=
Trang 6
2 3 22
25
28
2 6
2 7
2 9
1 32
34
3 3
3 5
7
3 8
2 4
*
other
other
other
=
=
=
=
=
=
=
/
%
!
&
|
^
2 1
Trang 72.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
39
Letter or digit
4 5
44 4
3
4
2
4 8
4 7 46
digit
other
50
4 9
*
digit
-digit digit
other
*
digit E
5 1
other
*
Start
Trang 8II: Phân tích cú pháp
1 Văn phạm gia tố
sct (Luật 1)
stmtFOR LPAR btkht SEMI btkt SEMI bttg RPAR n_stmt (Luật 12)
exp->term exp’ (Luật 18)
exp’->OP1 term exp’| ɛ (Luật 19)
term → factor term’ (Luật 20)
2 Kí hiệu kết thúc
Trang 9VOID MAIN BEGIN
END
SEMI
FOR
NOT
AND
OR
RELOP
ID
NUM
NUMF
LPAR
RPAR
OP1
OP2
COLON TYPE
TG
$
Trang 103 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}
Trang 11first(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’)=( ɛ, OP1)
first(term’)=( →ɛ ,OP2)
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)= {$}
Trang 12follow(exp)={$}
follow(term’)={OP1, $}
follow(term)={OP1, $}
follow(factor)={OP2, $}
5 Bảng phân tích M
K
ý
hi
ệ
u
c
h
ư
a
k
ết
t
h
ú
c
Ký hiệu nhập
A
S
G
V
O
I
D
M
A
I
N
B
E
G
I
N
E N D
S E M I
F O R
N O T
A N D
O
R RE L O P
I
D NU 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 CO L O N
$
B
o
d
y
3
T
D
e
cl
5
N
_
st
m
Trang 13St
m
t
1
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
T
er
m
2
F
a
ct
or
2
E
x
p’
1
’
ɛ
Trang 14m
’
m’
ɛ