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

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

35 560 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 35
Dung lượng 201,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

UNTIL dùng trong các trường hợp khi biến điều khiển không có kiểu rời rạc và đặc biệt trong các trường hợp số lần lặp không biết trước... Mỗi số nguyên được biểu diễn trong máy dưới dạng

Trang 1

Giảng viên hướng dẫn: Phan Thị Thu Hồng

Thực hiện chuyển đổi kiểu từ nguyên sang thực khi cần thiết

A Tìm hiểu những nội dung liên quan đến yêu cầu đề bài

I Phát biểu gán, repeat until trong pascal

Trang 2

2 Phát biểu repeat…until

Câu lệnh REPEAT UNTIL dùng trong các trường hợp khi biến điều khiển không có kiểu rời rạc và đặc biệt trong các trường hợp số lần lặp không biết trước Repeat

II Các phép toán

1 Các phép toán logic

Các phép tính NOT, AND, OR, XOR xử lý các bít nhị phân được xác định như sau :

NOT 1 = 0

1 AND 1=1 1 OR 1=1 1 XOR 1=0

NOT 0 = 1

1 AND 0=0 1 OR 0=1 1 XOR 0=1

0 AND 1=0 0 OR 1=1 0 XOR 1=1

0 AND 0=0 0 OR 0=0 0 XOR 0=0

Trang 3

Mỗi số nguyên được biểu diễn trong máy dưới dạng một dãy các bít nhị phân Số kiểu Integer được biểu diễn bằng 16 bit Ví dụ, số 1 và số 2 có biểu diễn trong máy lần lượt là :

Trang 4

B Nội dung thực hiện

M Program,ProGram… (‘p’|’P’)(‘r’|’R’)(‘o’|’O’)(‘g’|’G’)(‘a’|’A’)

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

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 5

LPAR ( ‘(’

TRUE True, true, TRUE

FALSE FALSE, False,

Trang 7

return(numreal,vtrí bdb)

digit

other

6 8 8

digit

0

2 7 8

other

return(num,vtrí ))))) )bdb)

returnnum,vtrí bdb)

4 9 8

Trang 8

>

return(relop, GT) 22

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

*

Trang 9

2) Ten -> PROGRAM ID

3)kbao -> Var n_kbao

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

5)kbk -> n_ID CONON 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

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

9)lenh -> l_gan

10)lenh -> body

11)lenh -> l_repeat_until

12) l_gan -> ID ASSGN exp SEMI //a:=0;

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

// (n<=4) | (n<=4.4) | (n> 2 or n<10) | (n> 2 and m<5)

15) r_body -> n_lenh

16) exp -> exp OP1 term |exp OP2 term |term

Trang 10

17) term -> factor

18)factor -> ID

19) factor -> NUM

20) factor -> NUMREAL

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

1.2 Văn phạm sau khi loại bỏ đệ quy trái:

1)S -> ten kbao body DOT

2)ten -> PROGRAM ID

3)kbao -> Var n_kbao

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

5)kbk -> n_ID CONON 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

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

9)lenh -> l_gan

10)lenh -> body

Trang 11

11)lenh -> l_repeat_until

12) l_gan -> ID ASSGN exp SEMI //a:=0;

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

// (n<=4) | (n<=4.4) | (n> 2 or n<10) | (n> 2 and m<5)

15) r_body -> n_lenh

16) Exp -> term exp1

17) exp1 -> OP1 term exp1 |Ɛ

18) Exp -> term exp2

19) exp2 -> OP2 term exp2 |Ɛ

20) term -> factor

21)factor -> ID

22) factor -> NUM

23) factor -> NUMREAL

24) factor -> LPAR exp RPAR //a:=a * (c-d);

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

26) exp ->term

27) factor -> NOT factor //

Trang 14

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

Trang 15

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) = (COMAN)

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

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

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 CONON 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

Trang 16

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

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

Trang 17

30) factor -> OP1 factor

31) factor -> NOT factor

kbao -> VAR n_kbao

n_kbao -> kbk SEMI n_kbao

kbk -> n_ID CONON TYPE SEMI

n_ID -> ID

n_ID -> ID COMA n_ID

Body -> BEGIN n_lenh END

n_lenh -> lenh SEMI n_lenh | Ɛ

Trang 18

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

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

exp ->.term

factor -> FALSE

factor -> TRUE

Trang 19

S’->S

*- - -

-I02=goto(I0,ten)

S -> ten Kbao body DOT

Kbao -> VAR n_kbao

* -I021’=goto(I02,kbao)

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 CONON TYPE SEMI

Trang 20

* -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

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)

Trang 21

N_lenh -> lenh SEMI n_lenh

* -I014 = goto (I0, REPEAT)

L_repeat_until -> REPEAT r_body UNTIL r_until

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

* -I015 = goto (I0, LPAR)

R_until -> LPAR

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

Trang 23

* -I017 = goto (I0, exp)

Exp ->exp OP1 term

Exp -> exp OP2 term

Trang 24

factor -> NUMREAL

factor -> LPAR exp RPAR

factor -> OP1 factor

* -I023 =goto (I0, NOT)

Factor -> NOT factor

factor -> ID

factor -> NUM

factor -> NUMREAL

factor -> LPAR exp RPAR

factor -> OP1 factor

* -I31 = goto (I03, body)

Program -> kbao body DOT

Trang 25

* -I32 = goto (I03, 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

* -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

Trang 26

* -I44 =goto (I04, ID)

N_ID -> ID

N_ID -> ID COMA n_ID

I81 = goto (I08,n_lenh)

* -Body -> BEGIN n_lenh END

* -I87 = goto (I08, ID)

L_gan -> ID ASSGN exp SEMI

* -I89 = goto (I08, REPAET) =I014

Trang 27

* -I810 = goto (I08, BEGIN) =I08

* -I141 =goto (I014, r_body)

R_repeat_until -> REPEAT r_body UNTIL r_until

* -I148 = goto (I014, ID)

L_gan -> ID ASSGN exp SEMI

Trang 28

* -I149 = goto (I014, REPAET) =I014

* -I1410 = goto (I014, BEGIN) =I08

* -I151 = goto (I015, exp)

Factor -> LPAR exp RPAR

* -I157 = goto (I015, factor)

Factor -> OP1 factor

Trang 29

* -I201 = goto (I020, factor) = I157

* -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

Trang 31

Factor -> NOT factor.

* -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

Trang 32

* -I321 = goto (I32, n_lenh)

Body -> BEGIN n_lenh END

* -I322 = goto (I32, lenh)

N_lenh -> lenh SEMI n_lenh

Trang 33

factor -> LPAR exp RPAR

factor -> OP1 factor

factor -> NOT factor

* -I2051 = goto (I205, exp)

Factor -> LPAR exp RPAR

exp -> exp OP1 term

exp -> exp OP2 term

Trang 34

* -I21’1 = goto (I021’, body )

S -> ten kbao body DOT

C Kết luận

- Nhóm đã hoàn thiện quá trình phân tích bài toán xây dựng trình biên dịch theo yêucầu đề bài Gồm các nội dung:

 Phân tích từ vựng

Trang 35

 Phân tích cú pháp

 Phân tích ngữ nghĩa

- Bước đầu tìm hiểu demo xây dựng bộ phân tích từ vựng

- Hạn chế: Chưa demo được chương trình hoàn thiện

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

HÌNH ẢNH LIÊN QUAN

1. Bảng token - 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
1. Bảng token (Trang 4)

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