1. Trang chủ
  2. » Luận Văn - Báo Cáo

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 ra dạng mã 3 địa chỉ

33 555 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 33
Dung lượng 178,5 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

BÀI TẬP LỚN CHƯƠNG TRÌNH DỊCHCác biểu thức trong các phát biểu gồm các phép toán logic Not, And, Or và các phép so sánh.. Các toán hạng gồm các định danh, hằng số thực, nguyên, true,

Trang 1

BÀI TẬP LỚN CHƯƠNG TRÌNH DỊCH

Các biểu thức trong các phát biểu gồm các phép toán logic

Not, And, Or và các phép so sánh Các toán hạng gồm các định danh, 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

Trang 2

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’)

REPEAT Repeat, RePeat… (‘R’|’r’)(‘e’|’E’)(‘P’|’p’)(‘A’|’a’)(‘t’|’T’)

UNTIL until,Until,UnTil… (‘u’|’U’)(‘n’|’N’)(‘t’|’T’)(‘i’|’I’)(‘l’|’L)

NOT not,Not,… (‘n’|’N’) (‘o’|’O’) (‘t’|’T’)

AND and,And,… (‘a’|’A’) (‘n’|’N’) (‘d’|’D’)

OR or,Or,… (‘o’|’O’) (‘r’|’R’)

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’)(‘L’|’l’)(‘E’|’e’) (‘A’|’a’)(‘N’|’n’)

Integer Real Boolean

Trang 3

TRUE True, true, TRUE

FALSE FALSE, False,

Trang 5

2.3 Sơ đồ nhận dạng OP2:

2.4 Sơ đồ dịch nhận dạng hằng số:

3 1

1

’ 0 0 0 6 7

return(numreal,vtrí bdb)

digit

digit

‘+’|’-‘ 8

4

9 5

digit

‘E’

|’e’

5 2

7 3 digit

return(numreal,vtrí Bbdb)

digit

other

6 8 8

digit

0

2 7 8

Trang 6

2.5 Sơ đồ dịch nhận dạng token các toán tử quan hệ relop:

6

>

return(relop, GT) return(relop, EG) return(relop, EQ)

*

Trang 7

2) Ten -> PROGRAM ID // program bai01

3)kbao -> VAR n_kbao

4)n_kbao -> kbk SEMI n_kbao | Ɛ // a:integer; b:real;

5)kbk -> n_ID COLON TYPE SEMI //a:integer;

6)n_ID -> ID | ID COMA n_ID // a|a,b (truong hop nhieu bien co cung kieu)

7)Body -> BEGIN n_lenh END SEMI // BEGIN cac lenh END ;

8)n_lenh -> lenh SEMI n_lenh | Ɛ // Thuc hien 1 hoac nhieu lenh | khong co lenh nao

9)lenh -> l_gan

Trang 8

10)lenh -> body

11)lenh -> l_repeat_until

12) l_gan -> ID ASSGN exp SEMI //a:=0;| a:= b+1;

13) l_repeat_until -> Repeat r_body UNTIL r_until

14) r_until ->LPAR ID RELOP NUM RPAR | LPAR ID RELOP

NUMREAL RPAR | LPAR ID RELOP NUM AND ID RELOP NUM RPAR | LPAR ID RELOP NUMREAL AND ID RELOP NUMREAL RPAR | LPAR ID RELOP NUM OR ID RELOP NUM RPAR | LPAR ID RELOP NUMREAL OR ID RELOP NUMREAL RPAR

21) factor -> LPARA exp RPARA //a:=a * (c-d);

22) factor -> OP1 factor // a:= - b;

23) factor -> NOT factor //

24) factor -> TRUE // a:=true

25) factor -> FALSE //a:=false

2 Các ký hiệu kết thúc

Trang 9

1) VAR

2) COLON

3) TYPE

4) SEMI //( ; ) 5) ID

6) COMA //(,) 7) BEGIN

8) END

9) ASSGN //(:=)13) AND

Trang 11

4) FIRST (body) = BEGIN

5) FIRST (n_lenh) =FIRST(r_body)= (ID, BEGIN,REPEAT, Ɛ)

6) FIRST (l_gan) = (ID)

7) FIRST (l_repeat_until) = (REPEAT)

8) FIRST (exp)=FIRST(term)=FIRST(factor)= (ID,NUM, NUMREAL, LPARA, OP1, NOT, TRUE, FALSE)

9) FIRST(l_until) = (LPAR)

10) FIRST (lenh) = (ID, BEGIN,REPEAT)

11) FIRST (exp1)= (OP1,Ɛ)

12) FIRST (exp2)= (OP2,Ɛ)

5 Tính FOLLOW của những kí hiệu chưa kết thúc

1) FOLLOW (ten) = FOLLOW (kbao)= FOLLOW (n_kbao)= ($)

2) FOLLOW (body) = (SEMI, END, DOT)

3) FOLLOW(kbk) = FOLLOW (lenh) = FOLLOW (l_gan)= FOLLOW (l_repeat_until)= FOLLOW (r_until)=(SEMI)

4) FOLLOW (n_ID) = (COLON)

5) FOLLOW (n_lenh)= ( END, SEMI)

6) FOLLOW (exp)= =(RPARA, SEMI)

Trang 12

7) FOLLOW(term) = FOLLOW(factor) = (LPAR, SEMI, OP1, OP2)

6 Tính action, goto

/* Các luật:

1)S -> Ten kbao body DOT

2)Ten -> PROGRAM ID

3)kbao -> VAR n_kbao

4) n_kbao -> kbk SEMI n_kbao

5) kbk -> n_ID COLON TYPE SEMI

6) n_ID -> ID

7) n_ID ->ID COMA n_ID

8) Body -> BEGIN n_lenh END

9) n_lenh ->.lenh SEMI n_lenh

10) n_lenh -> Ɛ

11) lenh -> l_gan

12) lenh ->body

13) lenh -> l_repeat_until

14) l_gan -> ID ASSGN exp SEMI

15) l_repeat_until -> Repeat r_body UNTIL r_until

Trang 13

16) r_until ->LPAR ID RELOP NUM RPAR

17) r_until ->LPAR ID RELOP NUMREAL RPAR

18) r_until -> LPAR ID RELOP NUM AND ID RELOP NUM RPAR 19) r_until -> LPAR ID RELOP NUMREAL AND ID RELOP NUMREAL RPAR

20) r_until ->LPAR ID RELOP NUM OR ID RELOP NUM RPAR

21) r_until ->LPAR ID RELOP NUMREAL OR ID RELOP NUMREAL RPAR

22) r_body -> n_lenh

23) exp -> exp OP1 term

24) exp -> exp OP2 term

25) term -> factor

26) factor -> ID

27) factor -> NUM

28) factor -> NUMREAL

29) factor -> LPARA exp RPARA

30) factor -> OP1 factor

31) factor -> NOT factor

32) exp ->term

33) factor -> TRUE

34) factor -> FALSE

Trang 14

S’ ->.S

S -> Ten kbao body DOT

Ten -> PROGRAM ID

kbao -> VAR n_kbao

n_kbao -> kbk SEMI n_kbao

kbk -> n_ID COLON TYPE SEMI

n_ID -> ID

n_ID -> ID COMA n_ID

Body -> BEGIN n_lenh END

n_lenh -> lenh SEMI n_lenh | Ɛ

lenh -> l_gan

lenh ->.body

lenh -> l_repeat_until

l_gan -> ID ASSGN exp SEMI

l_repeat_until -> Repeat r_body UNTIL r_until

r_until ->.LPAR ID RELOP NUM RPAR

r_until ->.LPAR ID RELOP NUMREAL RPAR

r_until -> LPAR ID RELOP NUM AND ID RELOP NUM RPAR r_until -> LPAR ID RELOP NUMREAL AND ID RELOP NUMREAL RPAR

r_until ->.LPAR ID RELOP NUM OR ID RELOP NUM RPAR

Trang 15

r_until ->.LPAR ID RELOP NUMREAL OR ID RELOP NUMREAL RPAR

r_body -> n_lenh

exp -> exp OP1 term

exp -> exp OP2 term

term -> factor

factor -> ID

factor -> NUM

factor -> NUMREAL

factor -> LPARA exp RPARA

factor -> OP1 factor

factor -> NOT factor

S -> ten Kbao body DOT

Kbao -> VAR n_kbao

Trang 16

S -> ten kbao body DOT

body ->.BEGIN n_lenh END

* -I04=goto(I0,VAR)

Kbao ->VAR n_kbao

N_kbao ->.kbk SEMI n_kbao

Kbk -> n_ID COLON TYPE SEMI

N_ID -> ID

N_ID -> ID COMA n_ID

I05 =goto(I0,kbk)

* -N_kbao ->kbk SEMI n_kbao

I06= goto (I0, n_ID)

* -Kbk ->n_ID COMA n_ID

I07 = goto (I0, ID)

* -n_ID ->ID

N_ID -> ID COMA n_ID

L_gan -> ID ASSGN exp SEMI

Trang 17

Factor -> ID.

I08= goto (I0, BEGIN)

* -Body -> BEGIN n_lenh END

N_lenh -> lenh SEMI n_lenh

N_lenh -> Ɛ

Lenh -> l_gan

Lenh -> body

Lenh ->.l_repeat_until

L_gan -> ID ASSGN exp SEMI

L_repeat_until -> REPEAT r_body UNTIL r_until

Body ->.BEGIN n_lenh END

* -I09 = goto (I0,lenh)

N_lenh -> lenh SEMI n_lenh

Trang 18

* -

-I012 = goto (I0, body)

Lenh -> body

I013 = goto (I0,l_repeat_until)

* -Lenh -> l_repeat_until

I014 = goto (I0, REPEAT)

* -L_repeat_until -> REPEAT r_body UNTIL r_until

L_gan -> ID ASSGN exp SEMI

L_repeat_until -> REPEAT r_body UNTIL r_until

Body ->.BEGIN n_lenh END

I015 = goto (I0, LPAR)

* -R_until -> LPAR

Trang 19

Factor -> LPAR exp RPAR

exp -> exp OP1 term

exp -> exp OP2 term

factor -> LPARA exp RPARA

factor -> OP1 factor

I016 = goto (I0, n_lenh)

* -R_body -> n_lenh

I017 = goto (I0, exp)

* -Exp ->exp OP1 term

Exp -> exp OP2 term

I018 =goto (I0, term)

* -Exp ->term

Trang 20

I019 = goto (I0, factor)

* -Term -> factor

I020 = goto (I0, NUM)

* -Factor -> NUM

I021 = goto (I0, NUMREAL)

* -Factor -> NUMREAL

I022 = goto (I0, OP1)

* -Factor -> OP1.factor

factor -> ID

factor -> NUM

factor -> NUMREAL

factor -> LPAR exp RPAR

factor -> OP1 factor

I023 =goto (I0, NOT)

* -Factor -> NOT factor

Trang 21

factor -> ID

factor -> NUM

factor -> NUMREAL

factor -> LPAR exp RPAR

factor -> OP1 factor

I024 =goto (I0, FALSE)

* -Factor -> FALSE

I025 =goto (I0, TRUE)

* -Factor -> TRUE

I31 = goto (I03, body)

* -Program -> kbao body DOT

I32 = goto (I03, BEGIN)

* -Body -> BEGIN n_lenh END

N_lenh -> lenh SEMI n_lenh

N_lenh -> Ɛ

Lenh -> l_gan

Lenh -> body

Trang 22

Lenh ->.l_repeat_until

L_gan -> ID ASSGN exp SEMI

L_repeat_until -> REPEAT r_body UNTIL r_until

Body ->.BEGIN n_lenh END

I41 = goto (I04, n_kbao)

* -Kbao -> VAR n_kbao

I42 =goto (I04, kbk)

* -N_kbao -> kbk SEMI n_kbao

I43 =goto (I04, n_ID)

* -Kbk -> nID CONON TYPE SEMI

I44 =goto (I04, ID)

* -N_ID -> ID

N_ID -> ID COMA n_ID

I81 = goto (I08,n_lenh)

* -Body -> BEGIN n_lenh END

Trang 23

* -I82=goto (I08, lenh) = I09

I83 = goto (I08, Ɛ) =I010

-I84 =goto (I08, l_gan) = I011

I85 = goto (I08, body) = I012

* -I86 = goto (I08, l_repeat_until) =I013

-I87 = goto (I08, ID)

* -L_gan -> ID ASSGN exp SEMI

I89 = goto (I08, REPAET) =I014

-I810 = goto (I08, BEGIN) =I08

I141 =goto (I014, r_body)

* -R_repeat_until -> REPEAT r_body UNTIL r_until

I142 = goto (I014, n_lenh) = I016

Trang 24

-I143 = goto (I014, lenh) = I09

-I144 =goto (I014, Ɛ) = I010

* -I145 =goto (I014, l_gan) = I011

* -I146 = goto (I014, body) = I012

* -I147 = goto (I014, l_repeat_until) =I013

-I148 = goto (I014, ID)

* -L_gan -> ID ASSGN exp SEMI

I149 = goto (I014, REPAET) =I014

-I1410 = goto (I014, BEGIN) =I08

-I151 = goto (I015, exp)

* -Factor -> LPAR exp RPAR

Trang 25

* -I152 = goto (I015, term) = I018

I153 = goto (I015, factor) = I010

I154 = goto (I015, ID)

* -Factor -> ID

I155 = goto (I015, NUM) = I020

I156 = goto (I015, NUMREAL) = I020

I157 = goto (I015, factor)

* -Factor -> OP1 factor

I201 = goto (I020, factor) = I157

* -I202 = goto (I020, ID) = I154

I203 = goto (I020, NUM) = I020

I204 = goto (I020, NUMREAL) =I021

Trang 26

I205 = goto (I020, LPAR)

* -Factor -> LPAR exp RPAR

exp -> exp OP1 term

exp -> exp OP2 term

factor -> LPARA exp RPARA

factor -> OP1 factor

factor -> NOT factor

factor -> FALSE

factor -> TRUE

I206 = goto (I020, OP1)= I022

* -I221 = goto (I022, factor) = 157

I222 = goto (I022, ID) = 154

Trang 27

I223 = goto (I022, NUM) = I020

I224 = goto (I022, NUMREAL) = I021

I225 = goto (I022, LRAR) = I025

I226 = goto (I022, OP1) = I022

I226 = goto (I022, NOT) = I023

I231 = goto (I023, factor)

* -Factor -> NOT factor

I232 = goto (I023, ID) = I154

I233 = goto (I023, OP1) = I022

I234 = goto (I023, NUM) = I020

Trang 28

I235= goto (I023, NUMREAL) = I021

I236= goto (I023, NOT) = I023

I311 = goto (I31, DOT)

* -Program -> kbao body DOT

Lenh -> body

* -Lenh ->.l_repeat_until

L_gan -> ID ASSGN exp SEMI

L_repeat_until -> REPEAT r_body UNTIL r_until

Body ->.BEGIN n_lenh END

I321 = goto (I32, n_lenh)

* -Body -> BEGIN n_lenh END

I322 = goto (I32, lenh)

* -N_lenh -> lenh SEMI n_lenh

I323 = goto (I32, Ɛ) = I010

Trang 29

-I324 = goto (I32, l_gan) =I011

* -I325 =goto (I32, body ) = I012

I326 =goto (I32, l_repeat_until ) = I013

I326 =goto (I32, ID) = I014

I327 =goto (I32, REPEAT) = I015

I328 =goto (I32, BEGIN) = I016

* -I205 = goto (I020, LPAR)

factor -> LPAR exp RPAR

factor -> OP1 factor

Trang 30

factor -> NOT factor

I2051 = goto (I205, exp)

* -Factor -> LPAR exp RPAR

exp -> exp OP1 term

exp -> exp OP2 term

I0252 = goto (I205, term) = I018

-I0253 = goto (I205, factor) = I019

I0255 = goto (I205, ID) = I154

I0256 = goto (I205, NUM) = I020

I0257 = goto (I205, NUMREAL) = I021

I0258 = goto (I205, OP1) = I022

I0259 = goto (I205, NOT) = I023

Trang 31

* -I02510 = goto (I205, LPAR) = I025

I21’1 = goto (I021’, body )

* -S -> ten kbao body DOT

Ngày đăng: 20/03/2015, 23:30

HÌNH ẢNH LIÊN QUAN

1. BẢNG TOKEN - 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 ra dạng mã 3 địa chỉ
1. BẢNG TOKEN (Trang 2)

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w