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

Nội dung

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: 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 Token Lexeme Match Attribute ID a1,d_e3c,ba2, (letter|’_’)(letter|digit|’_’)* vtrí BDB ASG := ‘:=’ SEMI ; ‘;’ COLON : ‘:’ COMA , ‘,’ DOTDOT ‘ ’ 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’) IF if, If, IF (‘i’|’I’)(‘f’|’F’) FOR for,For, fOr,… (‘f’|’F’)(‘o’|’O’)(‘r’|’R’) DO Do,do, , (‘d’|’D’)(‘o’|’O’) TO to,tO,… (‘t’|’T’) (‘o’|’O’) AND and,And,… (‘a’|’A’) (‘n’|’N’) (‘d’|’D’) OR or,Or,… (‘o’|’O’) (‘r’|’R’) OF of, Of, … (‘o’|’O’) (‘f’|’F’) 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 NUM 1,33,10,490,… digit(digit)* vtrí BDB NUMREA L 1.2, 2E-3 ,0.5e+4 digit + .digit + | digit + (.digit + |∈)(‘e’|’E’) (‘+’|’- ‘|∈)digit + vtrí BDB OP1 +,- ‘+’, ‘-‘ plus,minus OP2 *,/ ‘*’,’/’ multiplication ,division RELOP =, <, >, <=, >=, <> ‘=’, ’<’, ’>’, ’<=’, ’>=’, ’<>’ EQ, LT, GT, LE,GE,NE 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: • • Sơ đồ dịch của id và từ khóa: Sơ đồ dịch của id và từ khóa: * * Start 1 7 1 9 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 6 2 7 28 * • • Sơ đồ dịch nhận dạng hằng số: 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 ‘.’ other 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) return(num,vtrí )bdb) 3 9 8 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 5) Kbkieu 6) n_ID 7) n_lenh 8) lenh 9) n_gan 10) l_for_do 11) r_body 12) exp 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 I 0 : S → .program program → .kbao body DOT kbao → .var n_kbao I 1 = goto(I 0 , program): S → program. I 2 = goto(I 0 , kbao): program → kbao .body DOT body → .BEGIN n_lenh END I 3 = goto(I 0 , 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 I 4 = goto(I 2 , body): program → kbao body .DOT I 5 = goto(I 2 , BEGIN) = goto(I 5, BEGIN) = goto(I 22, BEGIN) = goto(I 49 , 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 I 6 = goto(I 3 , n_kbao) Kbao → var n_kbao. I 7 = goto(I 3 , kbkieu) = goto(I 18 , kbkieu) N_kbao → kbkieu .SEMI n_kbao I 8 = goto(I 3 , n_ID) = goto(I 3 , n_ID) Kbkieu → n_ID .COLON TYPE SEMI I 9 = goto(I 3 , ID) = goto(I 18 , ID) = goto(I 20 , ID) N_ID → ID. N_ID → ID .COMA n_ID I 10 = goto(I 4 , DOT) program → kbao body DOT. I 11 = goto(I 5 , n_lenh) body → BEGIN n_lenh .END I 12 = goto(I 5 , lenh) = goto(I 22 , lenh) = goto(I 49 , lenh) N_lenh → lenh .SEMI n_lenh N_lenh → lenh .SEMI I 13 = goto(I 5 , l_gan) = goto(I 22 , l_gan) = goto(I 49 , l_gan) lenh → l_gan. I 14 = goto(I 5 , body) = goto(I 22 , body) = goto(I 49 , body) lenh → body. I 15 = goto(I 5 , l_for_do) = goto(I 22 , l_for_do) = goto(I 49 , l_for_do): lenh → l_for_do. I 16 = goto(I 5 , ID) = goto(I 21 , ID) = goto(I 17 , ID) = goto(I 49 , ID) L_gan → ID .ASSGN exp SEMI I 17 = goto(I 5, FOR) = goto(I 22, FOR) = goto(I 49 , FOR): l_for_do → for .l_gan to ID do r_body l_gan → .ID ASSGN exp SEMI I 18 = goto(I 7, 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 I 19 = goto(I 6 , COLON) Kbkieu → n_ID COLON. TYPE SEMI I 20 = goto(I 9 , COMA) N_ID → ID COMA .n_ID n_ ID → .ID n_ID → .ID COMA n_ID I 21 = goto(I 11 , END) body → BEGIN n_lenh END. I 22 = goto(I 12 , 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 I 23 = goto(I 16 , ASSGN) 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 I 24 = goto(I 18 , n_kbao) N_kbao → kbkieu SEMI n_kbao. I 25 = goto(I 19 , TYPE) Kbkieu → n_ID COLON TYPE .SEMI I 26 = goto(I 20 , n_ID) : N_ID → ID COMA n_ID. I 27 = goto(I 22 , n_lenh): N_lenh → lenh SEMI n_lenh. I 28 = goto(I 23 , exp): L_gan → ID ASSGN exp. SEMI exp → exp .OP1 term exp → exp .OP2 term I 29 = goto(I 23 , term) = goto(I 34 , term) exp → term. I 30 = goto(I 23 , factor) = goto(I 34 , factor) = goto(I 38 , factor) = goto(I 39 , factor) term → factor. I 31 = goto(I 23 , ID) = goto(I 34 , ID) = goto(I 35 , ID) = goto(I 38 , ID) = goto(I 39 , ID) factor → ID. I 32 = goto(I 23 , NUM) = goto(I 34 , NUM) = goto(I 38 , NUM) = goto(I 39 , NUM) = goto(I 35 , NUM) factor → NUM. I 33 = goto(I 23 , NURREAL) = goto(I 34 , NURREAL) = goto(I 35 , NURREAL) = goto(I 38 , NURREAL) = goto(I 39 , NURREAL) factor → NUMREAL. I 34 = goto(I 23 , LPAR) = goto(I 34 , LPAR) = goto(I 35 , LPAR) = goto(I 38 , LPAR) = goto(I 39 , LPAR): factor → LPAR .exp RPAR 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 I 35 = goto(I 23 , OP1) = goto(I 34 , OP1) = goto(I 35 , OP1) = goto(I 38 , OP1) = goto(I 39 , OP1) factor → OP1 .factor factor → .ID factor → .NUM factor → .NUMREAL factor → .LPAR exp RPAR factor → .OP1 factor I 36 = goto(I 25 , SEMI) Kbkieu → n_ID COLON TYPE SEMI. I 37 = goto(I 28 , SEMI) L_gan → ID ASSGN exp SEMI. I 38 = goto(I 28 , OP1) = goto(I 45 , OP1) exp → exp OP1 .term term → .factor factor → .ID factor → .NUM factor → .NUMREAL factor → .LPAR exp RPAR factor → .OP1 factor I 39 = goto(I 28 , OP2) = goto(I 45 , OP2) exp → exp OP2 .term term → .factor factor → .ID factor → .NUM factor → .NUMREAL factor → .LPAR exp RPAR factor → .OP1 factor I 40 = goto(I 34 , exp) factor → LPAR exp .RPAR exp → .exp OP1 term [...]... OP1 factor I42 = goto(I 38, 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 I 48 = goto(I47,ID) l_for_do → for l_gan to ID do r_body I49 = goto(I 48, do) l_for_do → for l_gan . 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: Viết. GT, LE,GE,NE 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: • • Sơ đồ dịch của id và từ khóa: Sơ đồ dịch của id và từ khóa: * * Start 1 7 1 9 9 1 8 return(relop,. digit |‘_’ letter | ‘_’ return(id, lookup(id)) other 2 6 2 7 28 * • • Sơ đồ dịch nhận dạng hằng số: 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

Ngày đăng: 14/04/2015, 09:00

TỪ KHÓA LIÊN QUAN

w