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

Bài tập lớn Chương trình dịch – Đề số 2

35 519 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

Nội dung

Giảng viên hướng dẫn: Phan Thị Thu Hồng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

Trang 1

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

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

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

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

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

NUMREA

L 1.2, 2E-3 ,0.5e+4 digit

+ digit + | digit + (.digit + |)(‘e’|’E’) (‘+’|’- ‘|)digit + vtrí BDB

Trang 5

RPAR ) ‘)’

TRUE True, true, TRUE

FALSE FALSE, False,

Trang 6

num → digits optional_fraction optional_exponent

Trang 7

return(numreal,vtrí bdb)

digit

other 6 8 8

digit

0

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

Trang 10

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

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

Trang 11

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

Trang 12

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,Ɛ)

Trang 15

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

Trang 16

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

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

Trang 17

29) factor -> LPARA exp RPARA

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

lenh -> l_gan

lenh ->.body

lenh -> l_repeat_until

Trang 18

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

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

Trang 19

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

Trang 21

* -I09 = goto (I0,lenh)

N_lenh -> lenh SEMI n_lenh

* -I014 = goto (I0, REPEAT)

L_repeat_until -> REPEAT r_body UNTIL r_until

R_body ->.n_lenh

N_lenh -> lenh SEMI n_lenh

N_lenh -> Ɛ

Lenh -> l_gan

Trang 22

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

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

Trang 23

R_body -> n_lenh.

* -I017 = goto (I0, exp)

Exp ->exp OP1 term

Exp -> exp OP2 term

Trang 24

factor -> NUM

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

Trang 25

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

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

* -Body -> BEGIN n_lenh END

* -I87 = goto (I08, ID)

L_gan -> ID ASSGN exp SEMI

Trang 27

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

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

* -I151 = goto (I015, exp)

Factor -> LPAR exp RPAR

* -I157 = goto (I015, factor)

Factor -> OP1 factor

Trang 29

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

Trang 31

* -I231 = goto (I023, factor)

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

* -I205 = goto (I020, LPAR)

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

* -I0256 = goto (I205, NUM) = I020

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

Trang 35

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

 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: 14/04/2015, 09:00

TỪ KHÓA LIÊN QUAN

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

TÀI LIỆU LIÊN QUAN

w