BÀI TẬP LỚN CHƯƠNG TRÌNH DỊCH Đề tài 1

33 457 0
BÀI TẬP LỚN CHƯƠNG TRÌNH DỊCH Đề tài 1

Đ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

BÀI TẬP LỚN CHƯƠNG TRÌNH DỊCH Đề tài 1: Viết trình biên dịch để dịch đoạn chương trình gồm phát biểu sau dạng mã địa Phát biểu ghép, gán, repeat until pascal Các phát biểu kết thúc dấu ; Các biểu thức phát biểu gồm phép toán logic Not, And, Or phép so sánh Các toán hạng gồm định danh, số thực, nguyên, true, false (kể biểu thức) Độ ưu tiên phép toán tương tự Pascal Thực chuyển đổi kiểu từ nguyên sang thực cần thiết Các danh hiệu phải khai báo trước GV:Phan Thị Thu Hồng Nhóm 5: Nguyễn Thị Huyền Chu Thị Thanh Hương Vũ Thị Thùy Linh Nguyễn Thị Xuân NỘI DUNG I PHÂN TÍCH TỪ VỰNG BẢNG TOKEN Token ID ASG SEMI COLON COMA DOTDOT PROGRA M VAR BEGIN Match (letter|’_’)(letter|digit|’_’)* ‘:=’ ‘;’ ‘:’ ‘,’ ‘ ’ (‘p’|’P’)(‘r’|’R’)(‘o’|’O’)(‘g’|’G’) (‘a’|’A’) (‘v’|’V’)(‘a’|’A’)(‘r’|’R’) (‘b’|’B’)(‘e’|’E’)(‘g’|’G’) (‘i’|’I’) (‘n’|’N’) End,end, eNd, (‘e’|’E’)(‘n’|’N’)(‘d’|’D’) Repeat, RePeat… (‘R’|’r’)(‘e’|’E’)(‘P’|’p’)(‘A’|’a’)(‘t’|’T’) until,Until,UnTil… (‘u’|’U’)(‘n’|’N’)(‘t’|’T’)(‘i’|’I’)(‘l’|’L) not,Not,… (‘n’|’N’) (‘o’|’O’) (‘t’|’T’) and,And,… (‘a’|’A’) (‘n’|’N’) (‘d’|’D’) or,Or,… (‘o’|’O’) (‘r’|’R’) Integer, iNteger, … (‘i’|’I’)(‘n’|’N’)(‘t’|’T’)(‘e’|’E’)(‘g’|’G’) Real, rEal, … (‘e’|’E’) (‘r’|’R’) | Boolean, BooLean (‘r’|’R’)(‘e’|’E’)(‘a’|’A’)(‘l’|’L’) | (‘B’|’b’)(‘O’|’o’)(‘L’|’l’)(‘E’|’e’) (‘A’|’a’)(‘N’|’n’) Attribute vtrí BDB NUM NUMREA L OP1 OP2 1,33,10,490,… 1.2, 2E-3 ,0.5e+4 vtrí BDB vtrí BDB +,*,/ digit(digit)* digit+.digit+ | digit+ (.digit+|∈)(‘e’|’E’) (‘+’|’- ‘|∈)digit+ ‘+’, ‘-‘ ‘*’,’/’ RELOP =, , =, ‘=’, ’’, ’=’, ’’ RPAR ) ‘)’ LPAR ( ‘(’ DOT ‘.’ END REPEAT UNTIL NOT AND OR TYPE Lexeme a1,d_e3c,ba2, := ; : , Program,ProGram … Var, var , beGin,Begin, Integer Real Boolean plus,minus multiplicati on,division EQ, LT, GT, LE,GE,NE TRUE True, true, TRUE FALSE FALSE, False, (‘F’|’f’)(‘A’|’a’)(‘L’|’l’)(‘S’|’s’)(‘E’|’e’) FaLse Định nghĩa token a ID letter → A | B | … | Z | a | b | … | z digit → | | | … | id → letter (letter | digit)* b NUM digit → | | | … | digits → digit digit* optional_fraction → digits | ε optional_exponent → ( E ( + | - | ε ) digits) | ε num → digits optional_fraction optional_exponent • Ghi chú: - BDB: bảng danh biểu - Các từ khóa(keyword) insert vào bảng danh biểu trước phân tích từ vựng - Thứ tự ưu tiên phép toán Pascal (tương ứng với phép toán đề đưa ra): + Dấu ngoặc ( ) + Phép tốn ngơi: NOT + Phép tốn *, /, AND + Phép toán +, -, OR + Phép toán so sánh =, , =, LƯỢC ĐỒ DỊCH 2.1 Sơ đồ dịch id từ khóa: letter | digit |‘_’ Start letter | ‘_’ * other return(id, lookup(id)) 2.2 Sơ đồ nhận dạng OP1: + Start return(OP1, plus) return(OP1, minus) 2.3 Sơ đồ nhận dạng OP2: * Start return(OP2, multiplication) / return(OP2, division) 2.4 Sơ đồ dịch nhận dạng số: digit Sta rrrt digit ‘.’ other * return(num,vtrí ))))) )bdb) digit digit ‘E’ |’e’ other ‘E’ |’e’ digit ‘+’|’-‘ digit other 8 return(numreal,vtrí Bbdb) * returnnum,vtrí bdb) digit other ’ return(numreal,vtrí bdb) 2.5 Sơ đồ dịch nhận dạng token toán tử quan hệ relop: Start < = return(relop, LE) > return(relop, NE) return(relop, LT) other = return(relop, EQ) > = return(relop, EG) other * return(relop, GT) II PHÂN TÍCH CÚ PHÁP Văn phạm gia tố 1.1 Văn phạm gốc 1)S -> ten kbao body DOT /* PROGRAM bai1 VAR BEGIN END */ 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 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;| 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 // (n 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 Các ký hiệu kết thúc 1) VAR 2) COLON 3) TYPE 4) SEMI //( ; ) 5) ID 6) COMA //(,) 7) BEGIN 8) END 9) ASSGN //(:=) 13) AND 14) OR 15) NOT 16) RELOP 17) OP1 18) OP2 19) NUM 20) NUMREAL 21) LPAR //( 22) RPAR //) 23) PROGRAM 24)TRUE 25)FALSE 26) $ Các ký hiệu chưa kết thúc 1) ten 2) Kbao 3) Body 4) n_kbao 5) Kbkieu 6) n_ID 7) n_lenh 8) lenh 9) l_gan 10) l_repeat_until 11) r_until 12) r_body 13) exp 14) term 15) factor 16) exp1 Factor -> LPAR exp RPAR exp -> exp OP1 term exp -> exp OP2 term exp ->.term term -> factor factor -> ID factor -> NUM factor -> NUMREAL 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 * 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 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 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 * - 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 * -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 * 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 * -I205 = goto (I020, LPAR) Factor -> LPAR exp RPAR exp -> exp OP1 term exp -> exp OP2 term exp ->.term term -> factor factor -> ID factor -> NUM factor -> NUMREAL 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 * 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 * 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 * -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) exp ->.term term -> factor factor -> ID factor -> NUM factor -> NUMREAL 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 * -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 * - I02510 = goto (I205, LPAR) = I025 * -I21’1 = goto (I021’, body ) S -> ten kbao body DOT ... Kbkieu 6) n_ID 7) n_lenh 8) lenh 9) l_gan 10 ) l_repeat_until 11 ) r_until 12 ) r_body 13 ) exp 14 ) term 15 ) factor 16 ) exp1 17 ) exp2 4.FIRST kí hiệu chưa kết thúc: 1) FIRST(ten) = (PROGRAM) 2) FIRST(kbao)... END 9) ASSGN //(:=) 13 ) AND 14 ) OR 15 ) NOT 16 ) RELOP 17 ) OP1 18 ) OP2 19 ) NUM 20) NUMREAL 21) LPAR //( 22) RPAR //) 23) PROGRAM 24)TRUE 25)FALSE 26) $ Các ký hiệu chưa kết thúc 1) ten 2) Kbao 3)... I145 =goto (I 014 , l_gan) = I 011 * -I146 = goto (I 014 , body) = I 012 * I147 = goto (I 014 , l_repeat_until) =I 013

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

Từ khóa liên quan

Mục lục

  • Token

  • Asg

  • - BDB: bảng danh biểu.

  • - Các từ khóa(keyword) được insert vào bảng danh biểu trước khi phân tích từ vựng.

Tài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan