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

11 324 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 11
Dung lượng 158,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

TRƯỜNG ĐẠI HỌC NÔNG NGHIỆP HÀ NỘIKHOA: CÔNG NGHỆ THÔNG TIN Bài Tập Lớn: Chương Trình Dịch Đề Số 8 Giáo Viên Hướng Dẫn: Nhóm Sinh Viên Thực Hiện: Phan Thị Chương Bùi Thành Nam Nguyễn Hồn

Trang 1

TRƯỜNG ĐẠI HỌC NÔNG NGHIỆP HÀ NỘI

KHOA: CÔNG NGHỆ THÔNG TIN

Bài Tập Lớn:

Chương Trình Dịch

Đề Số 8

Giáo Viên Hướng Dẫn:

Nhóm Sinh Viên Thực Hiện: Phan Thị Chương

Bùi Thành Nam Nguyễn Hồng Linh Nguyễn Thị Xuân Mai

Hà Nôi, Tháng 12 năm 2012

Đề Tài 8:

Trang 2

Viết trình biên dịch dể dịch 1 doạn chuong trình gồm các phát biểu sau:

- Phát biểu 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) Ðộ uu tiên các phép toán tuong tự Pascal

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

Thực Hiện

I. Phân Tích Từ Vựng

ID a1,d_e3c,ba2, (letter|’_’)(letter|digit|’_’)* vtrí BDB

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, fOr,… (‘f’|’F’)(‘o’|’O’)(‘r’|’R’)

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

Integer Real Boolean

Trang 3

NUM 1,33,10,490,… digit(digit)* vtrí BDB

NUMREA

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

,division

RELOP =, <, >, <=, >=, <> ‘=’, ’<’, ’>’, ’<=’, ’>=’, ’<>’ EQ, LT, GT,LE,GE,NE

LƯỢC ĐỒ DỊCH

 Sơ đồ dịch nhận dạng token relop:

 Sơ đồ dịch của id và từ khóa:

*

*

Start

1

9

1 8

return(relop, LE)

2 0 9 2 1 9

return(relop, NE)

return(relop, LT)

2 2

2 3

2 4 9 2 5 9

return(relop, EQ)

return(relop, EG)

return(relop, GT)

>

other

=

=

>

other

Start

letter | digit

|‘_’

letter | ‘_’

return(id, lookup(id))

other 2

*

Trang 4

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

II Phân Tích Cú Pháp

A Văn phạm gia tố:

S -> program

Program -> kbao body DOT

// var begin lenh end

Kbao -> Var n_kbao

N_kbao -> kbkieu SEMI n_kbao // a:integer; b:real;

Kbkieu -> n_ID COLON TYPE SEMI //a:integer;

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

Body -> BEGIN n_lenh END

N_lenh -> lenh SEMI n_lenh | lenh SEMI // nhieu lenh|mot lenh

Lenh -> l_gan

Lenh -> body

Lenh -> l_for_do

L_gan -> ID ASSGN exp SEMI //a:=0;

L_for_do -> for l_gan to ID do r_body

3 1

3 6 7

return(numreal,vtrí bdb)

digit

digit

‘+’|’-‘

3 4

3 5

digit

‘E’

|’e’

3 2

3 3 digit

return(numreal,vtrí bdb)

digit

other

3 8 8

other

*

*

‘E’

|’e’

Sta

rt

digit

3 0

digit

2

9

3 7 8

other

return(num,vtrí

)bdb)

3 9 8

Trang 5

R_body -> n_lenh

Exp -> exp OP1 term |exp OP2 term |term Term -> factor

Factor -> ID

Factor -> NUM

Factor -> NUMREAL

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

B 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) DO

13) AND

14) OR

15) NOT

16) OP1

17) OP2

18) NUM

29) NUMREAL

20) LPAR //(

21) RPAR //)

22) DOT

23) $

C Ký hiệu không kết thúc:

1) Program

2) Kbao

3) Body

4) n_kbao

Trang 6

5) Kbkieu

6) n_ID

7) n_lenh

8) lenh

9) n_gan

10) l_for_do

11) r_body

13) term

14) factor

D FIRST của những kí hiệu chưa kết thúc:

1) FIRST(program) = FIRST(kbao) = {VAR}

3) FIRST(n_kbao)=FIRST(kbkieu) = FIRST(n_ID)={ ID}

4) FIRST (body) = {BEGIN, DOT}

5) FIRST (n_lenh)=FIRST (lenh) = {ID, BEGIN, FOR}

6) FIRST (l_gan) = {ID}

7) FIRST (l_for_do) = {FOR}

8) FIRST (exp)=FIRST(term)=FIRST(factor)= {D,NUM,

NUMREAL, LPAR, OP1}

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

1) FOLLOW (program) = FOLLOW (kbao) = FOLLOW (n_kbao) = FOLLOW (r_body) = {$}

2) FOLLOW (body) = {$, END, SEMI}

3) FOLLOW(kbkieu) = {$, SEMI}

4) FOLLOW (n_ID) = {$, COLON}

5) FOLLOW (n_lenh) = {$, END}

6) FOLLOW (lenh) = {$, SEMI}

7) FOLLOW (l_gan) = {$, SEMI, TO}

8) FOLLOW (l_for_do) = {$, SEMI}

9) FOLLOW (exp) = FOLLOW (term) = FOLLOW (factor) = { $, SEMI, OP1, OP2, RPAR}

E Tính Tập Tuyển

I0:

Trang 7

S → program program → kbao body DOT kbao → var n_kbao

I1 = goto(I0, program):

S → program

I2 = goto(I0, kbao):

program → kbao body DOT body → BEGIN n_lenh END

I3 = goto(I0, var):

kbao → var n_kbao n_kbao → kbkieu SEMI n_kbao

kbaokieu → n_ID COLON TYPE SEMI n_ ID → ID

n_ID → ID COMA n_ID I4 = goto(I2, body):

program → kbao body DOT I5 = goto(I2, BEGIN) = goto(I5,BEGIN) = goto(I22,BEGIN) = goto(I49, BEGIN):

body → BEGIN n_lenh END n_lenh → lenh SEMI n_lenh n_lenh → lenh SEMI

lenh → l_gan lenh → body lenh → l_for_do l_gan → ID ASSGN exp SEMI body → BEGIN n_lenh END l_for_do → for l_gan to ID do r_body I6 = goto(I3, n_kbao)

Kbao → var n_kbao

I7 = goto(I3, kbkieu) = goto(I18, kbkieu)

N_kbao → kbkieu SEMI n_kbao I8 = goto(I3, n_ID) = goto(I3, n_ID)

Kbkieu → n_ID COLON TYPE SEMI I9 = goto(I3, ID) = goto(I18, ID) = goto(I20, ID)

N_ID → ID

N_ID → ID COMA n_ID I10 = goto(I4, DOT)

program → kbao body DOT

I11 = goto(I5, n_lenh)

body → BEGIN n_lenh END

Trang 8

I12 = goto(I5, lenh) = goto(I22, lenh) = goto(I49, lenh)

N_lenh → lenh SEMI n_lenh N_lenh → lenh SEMI

I13 = goto(I5, l_gan) = goto(I22, l_gan) = goto(I49, l_gan)

lenh → l_gan

I14 = goto(I5, body) = goto(I22, body) = goto(I49, body)

lenh → body

I15 = goto(I5, l_for_do) = goto(I22, l_for_do) = goto(I49, l_for_do):

lenh → l_for_do

I16 = goto(I5, ID) = goto(I21, ID) = goto(I17, ID) = goto(I49, ID)

L_gan → ID ASSGN exp SEMI I17 = goto(I5,FOR) = goto(I22,FOR) = goto(I49, FOR):

l_for_do → for l_gan to ID do r_body l_gan → ID ASSGN exp SEMI

I18 = goto(I7,SEMI)

N_kbao → kbkieu SEMI n_kbao n_kbao → kbkieu SEMI n_kbao

kbaokieu → n_ID COLON TYPE SEMI n_ ID → ID

n_ID → ID COMA n_ID I19 = goto(I6, COLON)

Kbkieu → n_ID COLON TYPE SEMI I20 = goto(I9, COMA)

N_ID → ID COMA n_ID n_ ID → ID

n_ID → ID COMA n_ID I21 = goto(I11, END)

body → BEGIN n_lenh END

I22 = goto(I12, SEMI)

N_lenh → lenh SEMI n_lenh N_lenh → lenh SEMI

n_lenh → lenh SEMI n_lenh n_lenh → lenh SEMI

lenh → l_gan lenh → body lenh → l_for_do l_gan → ID ASSGN exp SEMI body → BEGIN n_lenh END l_for_do → for l_gan to ID do r_body I23 = goto(I16, ASSGN)

Trang 9

L_gan → ID ASSGN exp SEMI exp → exp OP1 term

exp → term exp → exp OP2 term term → factor

factor → ID factor → NUM factor → NUMREAL factor → LPAR exp RPAR factor → OP1 factor

I24 = goto(I18, n_kbao)

N_kbao → kbkieu SEMI n_kbao

I25 = goto(I19, TYPE)

Kbkieu → n_ID COLON TYPE SEMI I26 = goto(I20, n_ID) :

N_ID → ID COMA n_ID

I27 = goto(I22, n_lenh):

N_lenh → lenh SEMI n_lenh

I28 = goto(I23, exp):

L_gan → ID ASSGN exp SEMI exp → exp OP1 term

exp → exp OP2 term I29 = goto(I23, term) = goto(I34, term)

exp → term

I30 = goto(I23, factor) = goto(I34, factor) = goto(I38, factor) = goto(I39, factor)

term → factor

I31 = goto(I23, ID) = goto(I34, ID) = goto(I35, ID) = goto(I38, ID) = goto(I39, ID)

factor → ID

I32 = goto(I23, NUM) = goto(I34, NUM) = goto(I38, NUM) = goto(I39, NUM) = goto(I35, NUM)

factor → NUM

I33 = goto(I23, NURREAL) = goto(I34, NURREAL) = goto(I35,

NURREAL) = goto(I38, NURREAL) = goto(I39, NURREAL)

factor → NUMREAL

I34 = goto(I23, LPAR) = goto(I34, LPAR) = goto(I35, LPAR) = goto(I38, LPAR) = goto(I39, LPAR):

factor → LPAR exp RPAR

Trang 10

exp → exp OP1 term exp → term

exp → exp OP2 term term → factor

factor → ID factor → NUM factor → NUMREAL factor → LPAR exp RPAR factor → OP1 factor

I35 = goto(I23, OP1) = goto(I34, OP1) = goto(I35, OP1) = goto(I38, OP1)

= goto(I39, OP1)

factor → OP1 factor factor → ID

factor → NUM factor → NUMREAL factor → LPAR exp RPAR factor → OP1 factor

I36 = goto(I25, SEMI)

Kbkieu → n_ID COLON TYPE SEMI

I37 = goto(I28, SEMI)

L_gan → ID ASSGN exp SEMI

I38 = goto(I28, OP1) = goto(I45, OP1)

exp → exp OP1 term term → factor

factor → ID factor → NUM factor → NUMREAL factor → LPAR exp RPAR factor → OP1 factor

I39 = goto(I28, OP2) = goto(I45, OP2)

exp → exp OP2 term term → factor

factor → ID factor → NUM factor → NUMREAL factor → LPAR exp RPAR factor → OP1 factor

I40 = goto(I34, exp)

factor → LPAR exp RPAR exp → exp OP1 term

Trang 11

exp → exp OP2 term

I41 = goto(I35, factor)

factor → OP1 factor

I42 = goto(I38, term)

exp → exp OP1 term

I43 = goto(I39, term)

factor → OP2 factor

I44 = goto(I40, RPAR)

factor → LPAR exp RPAR

I45 = goto(I40,exp)

exp → exp OP1 term

exp → exp OP2 term

I46 = goto(I17,l_gan)

l_for_do → for l_gan to ID do r_body I47 = goto(I46,to)

l_for_do → for l_gan to ID do r_body I48 = goto(I47,ID)

l_for_do → for l_gan to ID do r_body I49 = goto(I48,do)

l_for_do → for l_gan to ID do r_body R_body -> n_lenh

N_lenh -> lenh SEMI n_lenh

N_lenh -> lenh SEMI

Lenh -> l_gan

Lenh -> body

Lenh -> l_for_do

L_gan -> ID ASSGN exp SEMI

L_for_do -> for l_gan to ID do r_body body → BEGIN n_lenh END

l_for_do → for l_gan to ID do r_body I50 = goto(I49, r_body)

l_for_do → for l_gan to ID do r_body I51 = goto(I49, n_lenh)

R_body -> n_lenh

Ngày đăng: 14/04/2015, 08:58

TỪ KHÓA LIÊN QUAN

w