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

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

Đ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

Chương trình dịch – Đề số 2 Giảng viên hướng dẫn: Phan Thị Thu Hồng Nhóm 01: 1. Dương Thị Bích Phượng 2. Nguyễn Thị Yến 3. Phạm Minh Đức Lớp: THC52 ============================================================ Đề số 2 Viết trình biên dịch để dịch 1 đoạn chương trình gồm các phát biểu sau:  Phát biểu gán, repeat until 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 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 1. Phát biểu gán (:=) Một trong các lệnh đơn giản và cơ bản nhất của Pascal là lệnh gán. Mục đích của lệnh này là gán cho một biến đã khai báo một giá trị nào đó cùng kiểu với biến. * Cách viết: <Tên_biến> := <biểu thức> ; 1 Nhóm 1 – Lớp THC52 – Khoa Công nghệ thông tin Chương trình dịch – Đề số 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 <Công việc>; UNTIL <Điều kiện thoát> * Ý nghĩa câu lệnh: Nếu <điều kiện thoát> là Sai (False) thì lặp lại <công việc> cho đến khi điều kiện Đúng thì mới thoát ra khỏi cấu trúc REPEAT UNTIL. Nếu có nhiều câu lệnh thì mỗi lệnh ngăn cách nhau bằng dấu chấm phẩy (;) Công việc của REPEAT và UNTIL không nhất thiết phải dùng lệnh ghép để nhóm từ 2 lệnh đơn trở lên thành công việc. 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 2 Nhóm 1 – Lớp THC52 – Khoa Công nghệ thông tin Chương trình dịch – Đề số 2 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à : 0000 0000 0000 0001 0000 0000 0000 0011 Phép lấy NOT một số nguyên sẽ đảo tất cả các bít biểu diễn số nguyên đó, tức là 0 thành 1, còn 1 thành 0. Ví dụ: NOT 1 = 1111 1111 1111 1110 NOT 2 = 1111 1111 1111 1100 Phép lấy AND, OR, XOR hai số nguyên được tiến hành bằng cách AND, OR, XOR từng cặp bít tương ứng của hai số đó, ví dụ: 1 OR 2 = 0000 0000 0000 0011= 2 1 AND 2 = 0000 0000 0000 0001= 1 2. Các phép toán so sánh Ký hiệu Ý nghĩa Ví dụ = bằng nhau x=y <> khác nhau x<>y < nhỏ hơn x<y <= nhỏ hơn hoặc bằng x<=y > lớn hơn x>y >= lớn hơn hoặc bằng x>=y | 3 Nhóm 1 – Lớp THC52 – Khoa Công nghệ thông tin Chương trình dịch – Đề số 2 B. Nội dung thực hiện I. Phân tích từ vựng 1. Bảng token Token Lexeme Match Attribute ID a1,d_e3c,ba2, (letter|’_’)(letter|digit|’_’)* vtrí BDB ASG := ‘:=’ SEMI ; ‘;’ COLON : ‘:’ COMA , ‘,’ DOTDOT ‘ ’ PROGRA 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 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 *,/ ‘*’,’/’ multiplicati on,division RELOP =, <, >, <=, >=, <> ‘=’, ’<’, ’>’, ’<=’, ’>=’, ’<>’ EQ, LT, GT, LE,GE,NE RPAR ) ‘)’ 4 Nhóm 1 – Lớp THC52 – Khoa Công nghệ thông tin Chương trình dịch – Đề số 2 LPAR ( ‘(’ DOT . ‘.’ TRUE True, true, TRUE FALSE FALSE, False, FaLse (‘F’|’f’)(‘A’|’a’)(‘L’|’l’)(‘S’|’s’)(‘E’|’e’) Ghi chú: letter → A | B | … | Z | a | b | … | z digit → 0 | 1 | 2 | … | 9 Định nghĩa token a. ID letter → A | B | … | Z | a | b | … | z digit → 0 | 1 | 2 | … | 9 id → letter (letter | digit) * b. NUM digit → 0 | 1 | 2 | … | 9 digits → digit digit * optional_fraction → .digits | ε optional_exponent → ( E ( + | - | ε ) digits) | ε num → digits optional_fraction optional_exponent • Ghi chú: 5 Nhóm 1 – Lớp THC52 – Khoa Công nghệ thông tin Chương trình dịch – Đề số 2 - 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. - Thứ tự ưu tiên của các phép toán trong Pascal (tương ứng với các phép toán đề bài đưa ra): + Dấu ngoặc ( ) + Phép toán một ngôi: NOT. + Phép toán *, /, AND. + Phép toán +, -, OR + Phép toán so sánh =, <, >, <=, >=, <> 2. LƯỢC ĐỒ DỊCH 2.1 Sơ đồ dịch của id và từ khóa: 2.2 Sơ đồ nhận dạng OP1: 6 Nhóm 1 – Lớp THC52 – Khoa Công nghệ thông tin Start letter | digit |‘_’ letter | ‘_’ return(id, lookup(id)) other 0 1 2 * Start 0 3 4 + - return(OP1, minus) return(OP1, plus) Chương trình dịch – Đề số 2 2.3 Sơ đồ nhận dạng OP2: 2.4 Sơ đồ dịch nhận dạng hằng số: 2.5 Sơ đồ dịch nhận dạng token các toán tử quan hệ relop: 7 Nhóm 1 – Lớp THC52 – Khoa Công nghệ thông tin 3 1 1 ’ 0 0 0 6 7 ‘.’ other return(numreal,vtrí bdb) digit digit ‘+’|’- ‘ 8 4 9 5 digit ‘E’ |’e’ 5 2 7 3 digit return(numreal,vtrí Bbdb) digit other 6 8 8 other * * ‘E’ |’e’ Sta rrrt digit 1 0 digit 0 2 7 8 other return(num,vtrí ))))) )bdb) returnnum,vtrí bdb) 4 9 8 Start 0 3 4 return(OP2, multiplication) return(OP2, division) * / Chương trình dịch – Đề số 2 II. PHÂN TÍCH CÚ PHÁP 1. 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. */ 8 Nhóm 1 – Lớp THC52 – Khoa Công nghệ thông tin Start 0 < 1 = 2 return(relop, LE) 3 > return(relop, NE) other 4 return(relop, LT) 5 = 7 = 8 other 6 > return(relop, GT) 22 return(relop, EG) return(relop, EQ) * Chương trình dịch – Đề số 2 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 9 Nhóm 1 – Lớp THC52 – Khoa Công nghệ thông tin Chương trình dịch – Đề số 2 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 10 Nhóm 1 – Lớp THC52 – Khoa Công nghệ thông tin [...]... -I206 = goto (I 020 , OP1)= I 022 * I 221 = goto (I 022 , factor) = 157 * I 222 = goto (I 022 , ID) = 154 * I 223 = goto (I 022 , NUM) = I 020 * I 224 = goto (I 022 , NUMREAL) = I 021 * I 225 = goto (I 022 , LRAR) = I 025 ... I 025 * I 226 = goto (I 022 , OP1) = I 022 * I 226 = goto (I 022 , NOT) = I 023 * I231 = goto (I 023 , factor) 30 Nhóm 1 – Lớp THC 52 – Khoa Công nghệ thông tin Chương trình dịch – Đề số 2 ... 28 Nhóm 1 – Lớp THC 52 – Khoa Công nghệ thông tin Chương trình dịch – Đề số 2 - I201 = goto (I 020 , factor) = I157 * -I2 02 = goto (I 020 , ID) = I154 * -I203 = goto (I 020 , NUM) = I 020 * -I204 = goto (I 020 , NUMREAL) =I 021 * ... ->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 29 ) factor -> LPARA exp RPARA 16 Nhóm 1 – Lớp THC 52 – Khoa Công nghệ thông tin Chương trình dịch – Đề số 2 ... -I 025 2 = goto (I205, term) = I018 * I 025 3 = goto (I205, factor) = I019 * I 025 5 = goto (I205, ID) = I154 * I 025 6 = goto (I205, NUM) = I 020 33 Nhóm 1 – Lớp THC 52 – Khoa Công nghệ thông tin Chương trình dịch – Đề số 2 ... 1 – Lớp THC 52 – Khoa Công nghệ thông tin Chương trình dịch – Đề số 2 - I 321 = goto (I 32, n_lenh) Body -> BEGIN n_lenh END * I 322 = goto (I 32, lenh) N_lenh -> lenh SEMI n_lenh * I 323 = goto (I 32, Ɛ) = I010 * -I 324 = goto (I 32, ... 18) OP2 19) NUM 12 Nhóm 1 – Lớp THC 52 – Khoa Công nghệ thông tin Chương trình dịch – Đề số 2 - 20 ) NUMREAL 21 ) LPAR //( 22 ) RPAR //) 23 ) PROGRAM 24 )TRUE 25 )FALSE 26 ) $ 3 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... I 025 7 = goto (I205, NUMREAL) = I 021 * I 025 8 = goto (I205, OP1) = I 022 * I 025 9 = goto (I205, NOT) = I 023 * I 025 10 = goto (I205, LPAR) = I 025 * -I21’1 = goto (I 021 ’, 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. .. I2 32 = goto (I 023 , ID) = I154 * I233 = goto (I 023 , OP1) = I 022 * I234 = goto (I 023 , NUM) = I 020 * I235= goto (I 023 , NUMREAL) = I 021 * I236= goto (I 023 , NOT) = I 023 * ... 1 – Lớp THC 52 – Khoa Công nghệ thông tin Chương trình dịch – Đề số 2 - 28 ) factor -> TRUE 29 )factor -> FALSE 2 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 12 Nhóm . RELOP 17) OP1 18) OP2 19) NUM 12 Nhóm 1 – Lớp THC 52 – Khoa Công nghệ thông tin Chương trình dịch – Đề số 2 20 ) NUMREAL 21 ) LPAR //( 22 ) RPAR //) 23 ) PROGRAM 24 )TRUE 25 )FALSE 26 ) $ 3. Các ký hiệu. minus) return(OP1, plus) Chương trình dịch – Đề số 2 2. 3 Sơ đồ nhận dạng OP2: 2. 4 Sơ đồ dịch nhận dạng hằng số: 2. 5 Sơ đồ dịch nhận dạng token các toán tử quan hệ relop: 7 Nhóm 1 – Lớp THC 52 – Khoa Công. factor // 11 Nhóm 1 – Lớp THC 52 – Khoa Công nghệ thông tin Chương trình dịch – Đề số 2 28 ) factor -> TRUE 29 )factor -> FALSE 2. Các ký hiệu kết thúc 1) VAR 2) COLON 3) TYPE 4) SEMI

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

Từ khóa liên quan

Mục lục

  • 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

    • II. Các phép toán

    • B. Nội dung thực hiện

      • I. Phân tích từ vựng

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

        • C. Kết luận

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

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

Tài liệu liên quan