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

Tiểu luận chương trình dịch Viết trình biên dịch để dịch 1 đoạn chương trình gồm các phát biểu sau sang 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 (177.9 KB, 21 trang )

Chương trình dịch- Đề tài 7
BÀ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
Nhóm 12-L p THC-K52ớ
Chương trình dịch- Đề tài 7
NHÓM 12
Thành viên nhóm: Nguyễn Thị Thu Quỳnh
Hoàng Thị Nga
Nguyễn Thị Hồng Anh
Hoàng Thị Hoa
Đề số 7
Viết trình biên dịch để dịch 1 đoạn chương trình gồm các phát biểu sau sang
mã 3 địa chỉ:
- Phát biểu ghép, gán, for trong Pascal
- Các phát biểu kết thúc bằng dấu ;
- Các biểu thức trong các phát biểu là các biểu thức số học và logic, gồm
các phép toán +, -, *, / vàcác phép so sánh. Các toán hạng gồm các danh
hiệu, hằng số thực, nguyên, true, false (kể cả biểu thức). Độ ưu tiên các phép
toán tương tự Pascal.
- 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ớ
Chương trình dịch- Đề tài 7
I.
I.
PHÂN TÍCH TỪ VỰNG
PHÂN TÍCH TỪ VỰNG
1.Tìm hiểu các lệnh trong Pascal
a. Lệnh gán (Assignment statement)
Một trong các lệnh đơn giản và cơ bản nhất của Pascal là lệnh gán. Mục đích
của lệnh này là gán cho 1 biến đã khai báo 1 giá trị nào đó cùng kiểu với
biến.
Cú 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.
b. Lệnh ghép( Compound statement)
Một nhóm các câu lệnh đơn được đặt giữa 2 chữ BEGIN và END sẽ tạo
thành 1 câu lệnh ghép.
Trong Pascal ta có thể đặt các lệnh ghép con trong các lệnh ghép lớn hơn
bao ngoài của nó và có thể hiểu tương tự như cấu trúc ngoặc đơn() trong các
biểu thức toán học.
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:
Vòng lặp tiến: For…to…do
Vòng lặp lùi : For…Downto….do
Cú pháp:
For< biến đếm>:=<Trị đầu>to<Trị cuối>Do<Công việc>;
d. Biểu thức lôgic
Các biểu thức lôgic đơn giản, các biểu thức quan hệ liên kết với nhau bởi
Nhóm 12-L p THC-K52ớ
Chương trình dịch- Đề tài 7
phé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.
Ví dụ 1:
( 5< X) AND (X <=100)
Kết quả: TRUE
Nếu X = 50
Ví dụ 2:
NOT( X > 9)
Nếu X = 2
Kết quả: FALSE

e. Biểu thức số học
Ví dụ:
Đượ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.
-Trong PasCal
Biểu thức trong toán học
5*a – (2*b + 3)
5a – (2b + 3)
x*y/(5 + x)
3*x*x*x – (2 + x)*y*y
Trình tự thực hiệ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ớ
Chương trình dịch- Đề tài 7
2.BẢNG TOKEN
2.BẢNG TOKEN
Token Lexeme Thông tin mô tả pattern Attribute
id a1,d_e3c,ba2, (letter|’_’)(letter|digit|’_’)*
Assign := ‘:=’
Semi ; ‘;’
Colon : ‘:’

dot .
Var 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’)
FOR For,fOr… (‘f’|’F’)(‘o’|’O’)(‘r’|’R’)
DO Do,DO,do (‘D’|’d’)(‘o’|’O’)
TO tO,TO (‘T’|’t’)(‘o’|’O’)
DOWNTO Downto, (‘d’|’D’)(‘o’|’O’)(‘W’|’w’)
(‘t’|’T’)(‘o’|’O’)
NOT not,Not,… (‘n’|’N’) (‘o’|’O’) (‘t’|’T’)
Lpar ( ‘(‘
Rpar ) ‘)’
TYPE Integer, iNteger,

Real, rEal, …
Boolean,
bOolean, …
(‘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’)
Integer
Real
Boolean
True TRUE,TrUE,true


(‘T’|’t’)(‘R’|’r’)(‘U’|’u’)
(‘e’|’E’)
False FALSE,False,
false….
(‘F’|’f’)(‘A’|’a’)(‘L’|’l’)
(‘S’|’s’)
(‘e’|’E’)
Num 1,33,10,490,… digit(digit)*
NumReal 1.2, 2E-3 ,
0.5e+4
digit
+
.digit
+
| digit
+
(.digit
+
|∈)
(‘e’|’E’)(‘+’|’- ‘|∈)digit
+
OP1 +,- ‘+’, ‘-‘ plus,minus
OP2 *,/ ‘+’, ‘-‘ ‘*’,’/’ multi,div
Nhóm 12-L p THC-K52ớ
Chương trình dịch- Đề tài 7
Relop
=, <, >, <=, >=,
<>
‘=’, ’<’, ’>’, ’<=’, ’>=’, ’<>’

EQ, LT, GT,
LE,GE,NE
letter → ‘a’| |’z’|’A’| |’Z’
digit → ‘0’| |’9’
delim→ blank | tab |newline
id → letter(letter|digit)*
ws → delim
+
endline → newline
unsco → “_”
 Ghi chú:
- Các từ khóa(keyword) được insert vào bảng danh biểu trước khi phân tích
từ vựng.
- 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):
• Dấu ngoặc ( )
• Phép toán một ngôi: NOT.
• Phép toán *, /, AND.
• Phép toán +, -, OR
• Phép toán so sánh =, <, >, <=, >=, <>
LƯỢC ĐỒ DỊCH
LƯỢC ĐỒ DỊCH
*
*
Sơ đồ dịch nhận dạng token relop:
Sơ đồ dịch nhận dạng token relop:
Nhóm 12-L p THC-K52ớ
*
*
Start

0
2
1
return(relop, LE)
3
4
return(relop, NE)
return(relop, LT)
5
6
7
8
return(relop, EQ)
return(relop, EG)
return(relop, GT)
< =
>
other
=
=>
other
Chương trình dịch- Đề tài 7


Sơ đồ dịch của id và từ khóa:
Sơ đồ dịch của id và từ khóa:
id → letter(letter|digit)*
Ghi chú: * lặp lại không hoặc nhiều lần



Sơ đồ dịch nhận dạng hằng số:
Sơ đồ dịch nhận dạng hằng số:
NumReal→digit
+
(.digit
+
)? (E ( + | -) ? digit
+
) ?
NumReal→digit
+
.digit
+
Num→digit
+
Ghi chú:
+ lặp lại một hoặc nhiều lần
? lặp lại không hoặc 1 lần
Nhóm 12-L p THC-K52ớ
Start
letter | digit
|‘_’
letter
return(id, lookup(id))
other
9 1
0
1
1
*

*
*
1
4
19
‘.’
other
return(numreal,vtrbdb)
digit
digit

‘+’|’-‘
1
7
1
8
digit
‘E’ |’e’
1
5
1
6
digit
return(numreal,vtr bdb)
digit
other
21
other
*
*

‘E’ |’e’
Start
digit
1
3
digit
1
2
20
other
return(num,vtrbdb)
return(num,vtr bdb)
22
Chương trình dịch- Đề tài 7
Sơ đồ 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
8) n_id → ID
//L_chuyen→ LPARA REAL RPARA n_id
‘Câu lệnh ghép

9) body → BEGIN n_stmt END SEMI
10) n_stmt → stmt SEMI n_stmt
11) n_stmt → stmt SEMI
12) stmt → Lgan
13) stmt → body
14) stmt →Lenh_FOR
‘Phep gan
15) Lgan → ID ASSGN exp SEMI
16) exp → exp OP1 term
17) exp → term
18) exp→ exp OP2 term
19) term → ID
20) term → NUM
21) term → NUMREAL
Nhóm 12-L p THC-K52ớ
Start
delim
delim
other
2
3
2
4
25
*
Chương trình dịch- Đề tài 7
22) 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 SEMI
29)Tricuoi→ID|NUM
1. Kí hiệu không kết thúc
1.program
2.khaibao
3.body
4.n_khaibao
5.kbkieu
6.n_id
7.n_stmt
8.stmt
9.Lgan
11.lenh_For
12.exp
13.term
14. Tricuoi
2. Kí hiệu kết thúc.
1.VAR
2.COLON
3.TYPE
4.SEMI //;
5.ID
6.COMMA //,
7.BEGIN
8.END
9.ASSGN //:=
10.FOR
11. TO

12. DOWNTO
11.DO
12.AND
13.OR
14.NOT
Nhóm 12-L p THC-K52ớ
Chương trình dịch- Đề tài 7
15.OP1
16.OP2
17.NUM
18.NUMREAL
19.LPARA //(
20.RPARA //)
21.DOT //.
22.TRUE
23.FALSE
24. $
3. Tính First
1. first(program) ={var,begin}
2. first(khaibao)={var}
3. first(body)={begin}
4. first(n_khaibao)={ID}
5. first(kbkieu)={ID}
6. first(n_id)={ID}
7. first(n_stmt)={begin,ID,while}
8. first(stmt)={begin,ID,while}
9. first(Lgan)={ID}
10.first(lenh_For)={FOR}
16.first(exp)= {ID,num,numreal,Lpara,OP1,NOT,True,False}
17.first(term)= {ID,num,numreal,Lpara,OP1,True,False}

18.First(Tricuoi)={ID,NUM}
4. Tính Follow
1. Follow(program)={$}
2. Follow(khaibao)={$}
3. Follow(body)={SEMI,DOT,$}
4. Follow(n_khaibao)={$}
5. Follow(kbkieu)={SEMI,$}
6. Follow(n_id)={COLON,$}
7. Follow(n_lenh)={End,$}
8. Follow(stmt)={SEMI,$}
9. Follow(Lgan)={SEMI,TO.DOWNTO,$}
10.Follow(lenh_FOR)={SEMI,$}
11.Follow(exp)={OP1,do,Rpara,SEMI,$}
12.Follow(term)={OP1,OP2,do,Rpara,SEMI,$}
13.Follow(Tricuoi)={DO}
Nhóm 12-L p THC-K52ớ
Chương trình dịch- Đề tài 7
5. Tính các tập tuyển
I0:
S→.program
program→.khaibao body dot
program→.body
khaibao→.VAR n_khaibao
body→.BEGIN n_stmt End SEMI
I1=goto(I0,program)
S→program.
I2=goto(I0,body)
Program→body.
I3=goto(I0,khaibao)
program→khaibao.body DOT

body→.BEGIN n_lenh End SEMI
I4=goto(I0,VAR)
khaibao→VAR. 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
I5=goto(I0,BEGIN)
body→BEGIN .n_stmt End SEMI
n_stmt →. stmt SEMI n_stmt
n_stmt → .stmt SEMI
stmt → .Lgan
stmt→ .body
body→.BEGIN n_stmt END SEMI
stmt →. lenh_For
Lgan → .ID ASSGN exp SEMI
lenh_For→.FOR Lgan TO Tricuoi DO body SEMI
lenh_For →.FOR Lgan DOWNTO Tricuoi DO body SEMI
I6=goto(I3,body)
program→khaibao body .dot
goto(I3,begin)=I5.
Nhóm 12-L p THC-K52ớ
Chương trình dịch- Đề tài 7
I7=goto(I4,n_khaibao)
khaibao→VAR n_khaibao.
I8=goto(I4,kbkieu)
n_khaibao → kbkieu. SEMI n_khaibao
n_khaibao →kbkieu.
I9=goto(I4,n_id)

kbkieu→ n_id .COLON TYPE SEMI
I10=goto(I4,ID)
n_id →ID . COMMA n_id
n_id → ID .
I11=goto(I5,n_stmt)
body→Begin n_stmt .End SEMI
I12=goto(I5,stmt)
n_ stmt →stmt .SEMI n_ stmt
n_ stmt → stmt .SEMI
I13=goto(I5,pgan)
stmt → Lgan .
I14=goto(I5,body)
stmt → body .
goto(I5,BEGIN)=I5
I15=goto(I5,lenh_For)
stmt→lenh_For.
I16=goto(I5,ID)
Lgan → ID. ASSGN exp SEMI
I17=goto(I5,FOR)
lenh_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ớ
Chương trình dịch- Đề tài 7
kbkieu→ n_id COLON. TYPE SEMI
I21=goto(I10,COMMA)
n_id →ID COMMA. n_id
n_id →.ID COMMA n_id
n_id →. ID
I22=goto(I11,END)
body→Begin n_stmt End. SEMI
I23=goto(I12,SEMI)
n_ stmt →stmt SEMI. n_ stmt
n_ stmt → stmt SEMI.
n_stmt →. stmt SEMI n_stmt
n_stmt → .stmt SEMI
stmt → .Lgan
stmt→ .body
body→.BEGIN n_stmt END SEMI
stmt →. lenh_For
Lgan → .ID ASSGN exp SEMI
lenh_For→.FOR Lgan TO Tricuoi DO body SEMI
lenh_For →.FOR Lgan DOWNTO Tricuoi DO body SEMI
I24=goto(I16,ASSGN)
Lgan → ID ASSGN. exp SEMI
exp → .exp OP1 term
exp → .term
exp→ .exp OP2 term
term →.ID
term → .NUM

term → .NUMREAL
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 SEMI
goto(I17,ASSGN)=I25
I26=goto(I19,n_khaibao)
n_khaibao → kbkieu SEMI n_khaibao.
goto(I20,kbkieu)=I9

Nhóm 12-L p THC-K52ớ
Chương trình dịch- Đề tài 7
goto(I20, n_id) =I10
goto(I20,ID)=I11
I27=goto(I20,TYPE)
kbkieu→ n_id COLON TYPE. SEMI
I28=goto(I21,n_id)
n_id →ID COMMA n_id.
Goto(I22,ID)=I11
I29=Goto(I22,SEMI)
body→Begin n_stmt End SEMI.
I30=goto(I23,n_stmt)
n_ stmt →stmt SEMI n_ stmt.
goto(I23,stmt)=I12
goto(I23,Lgan)=I13
goto(I23,body)=I14

goto(I23,Lenh_For)=I15
Goto(I24,BEGIN)=I5
Goto(I24,ID)=I17
Goto(I24,FOR)=I18
I31=goto(I24,exp)
Lgan → ID ASSGN exp. SEMI
exp → exp. OP1 term
exp→ exp. OP2 term
I32=goto(I24, term)
exp → term.
I33=goto(I24,ID)
term →ID.
I34=goto(I24,NUM)
term → NUM.
I35=goto(I24, NUMREAL)
term → NUMREAL.
I36=goto(I24, LPARA)
term → LPARA. exp RPARA
exp → .exp OP1 term
exp → .term
exp→ .exp OP2 term
term →.ID
term → .NUM
term → .NUMREAL
term → .LPARA exp RPARA
term → .OP1 term
Nhóm 12-L p THC-K52ớ
Chương trình dịch- Đề tài 7
term → .NOT term
term → .TRUE

term → .FALSE

I37=goto(I24, OP1)
term → OP1. term
term →.ID
term → .NUM
term → .NUMREAL
term → .LPARA exp RPARA
term → .OP1 term
term → .NOT term
term → .TRUE
term → .FALSE
I38=goto(I24, NOT)
term → NOT. Term
term →.ID
term → .NUM
term → .NUMREAL
term → .LPARA exp RPARA
term → .OP1 term
term → .NOT term
term → .TRUE
term → .FALSE
I39=goto(I24, TRUE)
term → TRUE.
I40=goto(I24, FALSE)
term → FALSE.
I41=goto(I25, TO)
lenh_For→FOR Lgan TO. Tricuoi DO body SEMI
Tricuoi→.ID
Tricuoi→.NUM

I42=goto(I25, DOWNTO)
lenh_For →FOR Lgan DOWNTO .Tricuoi DO body SEMI
Tricuoi→.ID
Tricuoi→.NUM
I43=goto(I27,SEMI)
kbkieu→ n_id COLON TYPE SEMI.
Nhóm 12-L p THC-K52ớ
Chương trình dịch- Đề tài 7
I44=goto( I31,SEMI)
Lgan → ID ASSGN exp SEMI.
I45=goto(I31,OP1)
exp → exp OP1. term
term →.ID
term → .NUM
term → .NUMREAL
term → .LPARA exp RPARA
term → .OP1 term
term → .NOT term
term → .TRUE
term → .FALSE
I46=goto(I31,OP2)
exp → exp OP2. term
term →.ID
term → .NUM
term → .NUMREAL
term → .LPARA exp RPARA
term → .OP1 term
term → .NOT term
term → .TRUE
term → .FALSE

I47=goto(I36,exp)
term → LPARA exp. RPARA
exp → exp. OP1 term
exp→ exp. OP2 term
goto(I36,term)=I32
goto(I36,ID)=I33
goto(I36, NUM)=I34
goto(I36, NUMREAL)=I35
goto(I36,LPARA)=I36
goto(I36,OP1)=I37
goto(I36,NOT)=I38
goto(I36,TRUE)=I39
goto(I36,FALSE)=I40
I48=goto(I37,term)
term → OP1 term.
goto(I37,ID)=I33
goto(I37, NUM)=I34
Nhóm 12-L p THC-K52ớ
Chương trình dịch- Đề tài 7
goto(I37, NUMREAL)=I35
goto(I37,LPARA)=I36
goto(I37,OP1)=I37
goto(I37,NOT)=I38
goto(I37,TRUE)=I39
goto(I37,FALSE)=I40
I49=goto(I41,Tricuoi)
lenh_For→FOR Lgan TO Tricuoi. DO body SEMI
I50=goto(I41,ID)
Tricuoi→ID.
I51=goto(I41,NUM)

Tricuoi→NUM.
I52=goto(I42,Tricuoi)
lenh_For →FOR Lgan DOWNTO Tricuoi. DO body SEMI
goto(I42,ID)=I50
goto(I43,NUM)=I51
I53=goto(I45,term)
exp → exp OP1 term.
goto(I45,ID)=I33
goto(I45, NUM)=I34
goto(I45, NUMREAL)=I35
goto(I45,LPARA)=I36
goto(I45,OP1)=I37
goto(I45,NOT)=I38
goto(I45,TRUE)=I39
goto(I45,FALSE)=I40
I54=goto(I46,term)
exp → exp OP2 term.
goto(I46,ID)=I33
goto(I46, NUM)=I34
goto(I46, NUMREAL)=I35
goto(I46,LPARA)=I36
goto(I46,OP1)=I37
goto(I46,NOT)=I38
goto(I46,TRUE)=I39
goto(I46,FALSE)=I40
I55=goto(I47,RPARA)
term → LPARA exp RPARA.
Goto(I47,OP1)=I45
Goto(I47,OP2)=I46
Nhóm 12-L p THC-K52ớ

Chương trình dịch- Đề tài 7
I56=goto(I49,DO)
lenh_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
I58=goto(I56,body)
lenh_For→FOR Lgan TO Tricuoi DO body. SEMI
goto(I56,BEGIN)=I5
I59=goto(I57,body)
lenh_For →FOR Lgan DOWNTO Tricuoi DO body. SEMI
goto(I57,BEGIN)=I5
I60=goto(I58,SEMI)
lenh_For→FOR Lgan TO Tricuoi DO body SEMI.
I61=goto(I59,SEMI)
lenh_For →FOR Lgan DOWNTO Tricuoi DO body SEMI.
7. Bảng phân tích cú pháp M.
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 cho
giai đ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ớ
Chương trình dịch- Đề tài 7
Nhóm 12-L p THC-K52ớ
Chương trình dịch- Đề tài 7











Nhóm 12-L p THC-K52ớ
Chương trình dịch- Đề tài 7





Nhóm 12-L p THC-K52ớ

×