Nghiên cứu tổng quan về chương trình dịch luận văn ths toán học 60 46 35

67 15 0
Nghiên cứu tổng quan về chương trình dịch  luận văn ths  toán học 60 46 35

Đ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

ĐẠI HỌC QUỐC GIA HÀ NỘI TRƢỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN Trần Thị Hoa NGHIÊN CỨU TỔNG QUAN VỀ CHƢƠNG TRÌNH DỊCH Chuyên ngành: Bảo đảm tốn học cho máy tính HTTT Mã số: 60 46 35 LUẬN VĂN THẠC SĨ KHOA HỌC NGƢỜI HƢỚNG DẪN KHOA HỌC: TS Nguyễn Thị Minh Huyền Hà Nội – Năm 2012 LỜI CẢM ƠN Đầu tiên, em xin chân thành cảm ơn khoa Toán – Cơ – Tin học, trƣờng Đại học Khoa học Tự nhiên – Đại học Quốc Gia Hà Nội tạo điều kiện cho em thực đề tài luận văn Em xin chân thành cảm ơn thầy cô khoa Toán – Cơ – Tin học truyền đạt kiến thức hữu ích tạo tảng vững cho em định hƣớng học tập phát huy khả Đặc biệt, em xin gửi lời cảm ơn chân thành lời chúc sức khỏe đến cô giáo Nguyễn Thị Minh Huyền hƣớng dẫn bảo tận tình để em hồn thành tốt luận văn Em xin gửi lời cảm ơn sâu sắc đến gia đình, bạn bè đồng nghiệp giúp đỡ, động viên cổ vũ em suốt trình thực luận văn Mặc dù cố gắng nỗ lực hết mình, em cịn mắc nhiều thiếu sót luận văn mình, em hy vọng nhận đƣợc ủng hộ đóng góp ý kiến để hoàn thiện đề tài cách tốt MỤC LỤC LỜI CẢM ƠN MỤC LỤC DANH MỤC CÁC HÌNH VẼ DANH MỤC CÁC BẢNG MỞ ĐẦU Chƣơng - GIỚI THIỆU VỀ CHƢƠNG TRÌNH DỊCH 10 1.1 Chƣơng trình dịch 10 1.2 Các bƣớc thiết kế chƣơng trình dịch 10 1.2.1 Phân tích từ vựng 11 1.2.2 Tổ chức bảng ký hiệu 11 1.2.3 Phân tích cú pháp 12 1.2.4 Phân tích ngữ nghĩa 12 1.2.5 Sinh mã trung gian 13 1.2.6 Tối ưu mã 13 1.2.7 Sinh mã đích 13 1.2.8 Phát thông báo lỗi 14 Chƣơng - PHÂN TÍCH TỪ VỰNG, CÚ PHÁP VÀ NGỮ NGHĨA .15 2.1 Ngôn ngữ văn phạm hình thức 15 2.1.1 Bảng chữ 15 2.1.2 Chuỗi (từ) 15 2.1.3 Ngôn ngữ 15 2.1.4 Văn phạm hình thức 16 2.2 Phân tích từ vựng .18 2.2.1 Vai trị phân tích từ vựng .18 2.2.2 Thuộc tính token 20 2.2.3 Đặc tả token 21 2.3 Phân tích cú pháp .21 2.3.1 Vai trò phân tích cú pháp 21 2.3.2 Các chiến lược phân tích cú pháp .22 2.4 Phân tích ngữ nghĩa 30 2.4.1 Định nghĩa ngữ nghĩa trực tiếp văn phạm 30 2.4.2 Lược đồ dịch 32 Chƣơng - CÁC CÔNG CỤ HỖ TRỢ XÂY DỰNG CHƢƠNG TRÌNH DỊCH 33 3.1 Giới thiệu 33 3.2 Bộ sinh trình phân tích từ vựng FLEX 33 3.2.1 Cấu trúc .33 3.2.2 Quy trình vận hành 34 3.3 Bộ sinh trình phân tích cú pháp BISON 35 3.3.1 Cấu trúc .35 3.3.2 Quy trình vận hành 37 Chƣơng - XÂY DỰNG CHƢƠNG TRÌNH DỊCH CHO NGÔN NGỮ MINIPAS 38 4.1 Yêu cầu 38 4.2 Ngôn ngữ Minipas 38 4.2.1 Giới thiệu sơ lược 38 4.2.2 Hướng dẫn sử dụng ngôn ngữ Minipas 39 4.3 Xây dựng chƣơng trình dịch cho Minipas 43 4.3.1 Xây dựng trình phân tích từ vựng cho Minipas 43 4.3.2 Xây dựng trình phân tích cú pháp cho Minipas 45 4.3.3 Xử lý ngữ nghĩa cho ngôn ngữ Minipas 49 KẾT LUẬN 59 TÀI LIỆU THAM KHẢO 60 DANH MỤC CÁC HÌNH VẼ Hình 2.1 Giao diện phân tích từ vựng 20 Hình 2.2 Giao diện phân tích cú pháp 21 Hình 2.3 Cây cú pháp từ dẫn xuất .22 Hình 2.4 Cây thích cho biểu thức * + 4n 32 Hình 3.1 Q trình phân tích từ vựng 35 Hình 3.2 Quá trình phân tích cú pháp .37 DANH MỤC CÁC BẢNG Bảng 2.1 Bảng ký hiệu token .19 Bảng 2.2 Bảng ij 30 Bảng 2.3 Biểu diễn ngữ nghĩa văn phạm sinh biểu thức đơn giản .31 Bảng 4.1 Bảng token ngôn ngữ Minipas 39 Bảng 4.1 Biểu thức quy xác định token 45 MỞ ĐẦU Từ ngàn xƣa ngƣời muốn giao tiếp với phải dùng ngôn ngữ, ngƣời giao tiếp với máy tính tất nhiên phải thơng qua ngơn ngữ Con ngƣời muốn máy tính thực cơng việc, phải viết yêu cầu đƣa cho máy ngôn ngữ máy hiểu đƣợc Việc viết yêu cầu gọi lập trình Ngơn ngữ dùng để lập trình đƣợc gọi ngơn ngữ lập trình Việc viết chƣơng trình dễ dàng tự nhiên ngơn ngữ lập trình gần với cách diễn đạt vấn đề cần giải Có nghĩa là, ngơn ngữ phải chứa đựng cấu trúc thuật ngữ - phần tử dùng để miêu tả vấn đề, không phụ thuộc vào máy tính cụ thể Những ngơn ngữ lập trình có tính chất nhƣ đƣợc gọi ngơn ngữ bậc cao Việc phân cấp ngơn ngữ lập trình đƣợc dựa sở tính độc lập với máy tính ngày cao ngơn ngữ, bao gồm: – Ngôn ngữ máy (machine language) – Hợp ngữ (assembly language) – Ngôn ngữ bậc cao (high level language) Để giải vấn đề tin học, lập trình viên phải tạo chƣơng trình nguồn ngơn ngữ bậc cao – ngơn ngữ gần với ngơn ngữ nói Nhƣng máy tính hiểu, chấp nhận ngôn ngữ bậc thấp, riêng mình, chuỗi số 1, nhiên chuỗi số lại khơng gần gũi với ngƣời chút Bởi máy tính hiểu ngơn ngữ máy chƣơng trình viết ngôn ngữ bậc cao cuối đƣợc dịch sang ngơn ngữ máy Do cần phải có cơng cụ để thực việc chuyển đổi này, cơng cụ đƣợc gọi chương trình dịch Để đáp ứng nhu cầu phần mềm ngày gia tăng số lƣợng chất lƣợng, thiết kế ngơn ngữ lập trình có nhiều thay đổi dẫn đến ngơn ngữ lập trình trở nên phức tạp Vì việc thiết kế chƣơng trình dịch tiếp tục thay đổi Thiết kế cài đặt chƣơng trình dịch ln chủ đề nghiên cứu phát triển thiết thực Do mục tiêu đề tài tìm hiểu bƣớc để thiết kế chƣơng trình dịch xây dựng chƣơng trình dịch cho ngơn ngữ cụ thể tự định nghĩa Việc xây dựng thành công chƣơng trình dịch hồn chỉnh phức tạp, tốn nhiều thời gian cần nhiều kiến thức Luận văn đƣợc trình bày thành bốn chƣơng: + Chƣơng I: Giới thiệu chƣơng trình dịch + Chƣơng II: Phân tích từ vựng, cú pháp phân tích ngữ nghĩa + Chƣơng III: Các công cụ hỗ trợ xây dựng chƣơng trình dịch + Chƣơng IV: Xây dựng chƣơng trình dịch cho ngơn ngữ Minipas.Trong q trình nghiên cứu tác giả khó tránh khỏi sai sót, mong nhận đƣợc nhiều ý kiến đóng góp từ thầy giáo, giáo bạn đọc để luận văn đƣợc hoàn thiện Chƣơng - GIỚI THIỆU VỀ CHƢƠNG TRÌNH DỊCH Chƣơng trình bày kiến thức tổng quan chƣơng trình dịch, đƣợc trích từ tài liệu tham khảo [2, 4, 5] 1.1 Chƣơng trình dịch Chƣơng trình dịch, gọi phần mềm biên dịch, chƣơng trình máy tính làm cơng việc dịch chuỗi câu lệnh đƣợc viết ngôn ngữ lập trình (ngơn ngữ nguồn hay mã nguồn), thành chƣơng trình tƣơng đƣơng nhƣng dƣới dạng ngơn ngữ (gọi ngơn ngữ đích hay mã đích) thƣờng ngôn ngữ cấp thấp hơn, nhƣ ngôn ngữ máy Hầu hết chƣơng trình dịch chuyển mã nguồn viết ngôn ngữ bậc cao thành mã đối tƣợng hay ngơn ngữ máy mà đƣợc thi hành trực tiếp máy tính hay máy ảo Dù vậy, việc dịch từ ngôn ngữ bậc thấp sang ngôn ngữ bậc cao xảy ra, q trình thƣờng đƣợc hiểu nhƣ biên dịch ngƣợc tái tạo lại chƣơng trình ngơn ngữ bậc cao Cũng tồn chƣơng trình dịch chuyển đổi từ ngôn ngữ bậc cao sang ngôn ngữ bậc cao khác, chuyển đổi sang ngơn ngữ mà cần để tiếp tục xử lý sau, chƣơng trình dịch nhƣ đƣợc biết đến nhƣ biên dịch phân tầng 1.2 Các bƣớc thiết kế chƣơng trình dịch Chƣơng trình nguồn ngơn ngữ lập trình chuỗi ký tự Chƣơng trình dịch có nhiệm vụ chuyển chuỗi ký tự sang chuỗi ký tự khác Quá trình bao gồm trình nhỏ đƣợc đặt tên nhƣ sau: i)Phân tích từ vựng ii) Phân tích cú pháp 10 / var  Các luật sinh khai báo identifier  | declarations declaration | BOOLEAN id_seq_bol | ARRAY_I | ARRAY_D | ARRAY_C | ARRAY_B id_seq_int   | id_seq_chr   | id_seq_dou   | id_seq_bol id_seq_str / Các luật sinh khai báo constant  | CONST const_declarations   | const_declarations const_declaration const_declaration  INTEGER IDENTIFIER / ASSGNOP NUMBER_VAL‘;’ | CHAR IDENTIFIER ASSGNOP CHR_VAL ‘;’ | DOUBLE IDENTIFIER ASSGNOP NUMBERD_VAL ‘;’ | STRING IDENTIFIER ASSGNOP STR_VAL ‘;’ | BOOLEAN IDENTIFIER ASSGNOP NUMBERB_VAL‘;’ Các luật sinh khai báo hàm func_decls   | func_decl func_decl  FUNCTION IDENTIFIER '(' func_var_decls ')' var 46 func_declarations IN commands ENDFUNCTION ‘;’ func_var_decls   | func_var_decls func_var_decl  var_seq | var_seq | var_seq | var_seq | var_seq var_seq   | var_seq | var_seq | var_seq | var_seq | var_seq func_declarations   func_declaration  INTEGER fun_id_seq_int   | fun_id_seq_int fun_id_seq_chr   | fun_id_seq_chr fun_id_seq_dou   | fun_id_seq_dou fun_id_seq_str fun_id_seq_bol 47 / Các luật sinh câu lệnh  commands  | com  READ command | READ | WRITE | WRITE | WRITELI | IDENTIF | IDENTIF | IF | WHILE |FOR IDENTIFIER ASSGNOP exp TO exp DO commands ENDFOR read_exp   | read_exp ‘,’ IDENTIFIER read_array_exp else_exp   /   | read_array_exp ‘,’ IDENTIFIER | ELSE commands Luật sinh biểu thức exp  NUMBER_VAL | | NUMBERB_VAL | NUMBERD_VAL | STR_VAL | CHR_VAL IDENTIFIER | IDENTIFIER '(' values ')' arr_exp  IDENTIFIER '[' index ']' value_seq 48 index  NUMBER_VAL | IDENTIFIER 4.3.3 Xử lý ngữ nghĩa cho ngôn ngữ Minipas Khi phân tích cú pháp nhận dạng luật sinh (khai báo, biểu thức, câu lệnh ) gọi đến chƣơng trình xử lý ngữ nghĩa tƣơng ứng nằm phía bên phải luật sinh  Xử lý ngữ nghĩa cho khai báo identifier install( char *symname , char *scope, enum type_code type, int length); { symrec *s; s = getsym (sym_name, scope); if (s == 0) {s = putsym(sym_name, scope, type, length);} else {errors++; printf( "%s ", sym_name ); yyerror("is already defined"); } } Hàm install(char *symname, char *scope, enum type_code type, int length) dùng để kiểm tra cài đặt ký hiệu có tên symname, phạm vi scope, độ dài length có bảng ký hiệu hay chƣa Nếu chƣa có lƣu ký hiệu vào bảng ký hiệu, ngƣợc lại thơng báo ký hiệu tồn bảng ký hiệu Hàm getsym(sym_name, scope) dùng để truy xuất ký hiệu có tên sym_name phạm vi scope bảng ký hiệu 49 Hàm putsym(sym_name, scope, type, length) dùng để lƣu ký hiệu có tên sym_name, phạm vi scope, kiểu liệu type độ dài length vào bảng ký hiệu  Xử lý ngữ nghĩa cho việc sinh biểu thức exp : NUMBER_VAL { gen_code( LD_INT, $1 ); } | NUMBERD_VAL | { gen_code_double( LD_DOU, $1 );} { gen_code_string( LD_STR, $1);} { gen_code_char ( LD_CHR, $1);} STR_VAL | CHR_VAL | NUMBERB_VAL | IDENTIFIER { gen_code_boolean ( LD_BOL, $1);} { context_check( LD_VAR, $1, function_name);} | exp '''=' exp gen_code( GTEQ, );} | exp '' exp { gen_code( GT, ); } { | exp '+' exp gen_code( ADD, ); } | exp '-' exp { gen_code( SUB, ); } | exp '*' exp { gen_code( MULT, ); } | exp '/' exp | exp '&' exp | exp '|' exp | exp '%' exp | '!' exp { gen_code( DIV, ); } { gen_code( AND, ); } { gen_code( OR, ); } { gen_code( MOD, );} { gen_code( NOT, );} | '(' exp ')' Thủ tục gen_code(enum code_ops operation, int arg) dùng để sinh mã trung gian cho ký hiệu phép toán với tham số thứ tên 50 mã trung gian tham số thứ hai giá trị thuộc tính ký hiệu bên phải luật sinh  Xử lý ngữ nghĩa sinh câu lệnh nhập, xuất liệu context_check ( enum code_ops operation, char *sym_name, char *scope ) { symrec *identifier; identifier = getsym(sym_name, scope); if ( identifier == ) { identifier = getsym(sym_name, "global"); if ( identifier == ) { errors++; printf( "%s", sym_name ); yyerror(" is an undeclared identifier"); } } if (identifier != 0) { if (identifier->type==ARR_D && operation==INT_ARR_STORE) gen_code_variable( DOU_ARR_STORE, identifier); else if (identifier->type==ARR_B && operation==INT_ARR_STORE) gen_code_variable( BOL_ARR_STORE, identifier); else if (identifier->type==ARR_C && operation==INT_ARR_STORE) gen_code_variable( CHR_ARR_STORE, identifier); else 51 if (identifier->type==ARR_D && operation == READ_INT_ARR) gen_code_variable( READ_DOU_ARR, identifier); else if (identifier->type==ARR_B && operation == READ_INT_ARR) gen_code_variable( READ_BOL_ARR, identifier); else if (identifier->type==ARR_C && operation == READ_INT_ARR) gen_code_variable( READ_CHR_ARR, identifier); else gen_code_variable( operation, identifier); } } Hàm context_check(enum code_ops operation, char *sym_name, char *scope) thực kiểm tra ký hiệu có tên sym_name phạm vi scope đƣợc khởi tạo hay chƣa sau sinh mã trung gian cho ký hiệu có tên operation cho vào ngăn xếp chứa mã trung gian thông qua hàm gen_code_variable(operation, identifier)  Xử lý ngữ nghĩa sinh câu lệnh if then else command: IF exp { if_var = (struct lbs *) newlblrec(); if_var->for_jmp_false = reserve_loc(); } THEN commands { if_var->for_goto = reserve_loc(); } else_exp 52 ENDIF { back_patch( if_var->for_goto, GOTO, gen_label()); } Trƣớc tiên sau token IF exp chƣơng trình tìm kiếm cấu trúc exp trƣớc thực hành vi ngữ nghĩa exp (xem phần hành vi ngữ nghĩa biểu thức) Sau nhận dạng exp thực hành vi ngữ nghĩa { if_var = (struct lbs *) newlblrec(); if_var->for_jmp_false = reserve_loc()} lbs cấu trúc dành riêng cho câu lệnh if, while, for Riêng câu lệnh if có nhiệm vụ lƣu lại vị trí ngăn xếp mã trung gian sau exp IF (lưu vào biến for_jmp_false) vị trí ngăn xếp mã trung gian trƣớc khối lệnh ELSE (lưu vào biến for_goto) Cách dùng lbs câu lệnh if nhƣ sau Nếu giá trị điều kiện exp sai nhảy đến vị trí sau token ELSE cịn sau thực command if nhảy đến vị trí kết thúc câu lệnh if Muốn thực hành động ta dùng hàm back_patch ( int addr, enum code_ops operation, int arg ) Hàm có nhiệm vụ lƣu lại địa addr thực mã trung gian operation với tham số để nhảy mã trung gian arg Nhƣ sử dụng hàm back_patch câu lệnh if ta sử dụng nhƣ sau: back_patch( if_var->for_jmp_false,JMP_FALSE,gen_label()); Tại địa ngăn xếp mã trung gian for_jmp_false thực mã trung gian JMP_FALSE nhảy đến vị trí ngăn xếp gen_label(), vị trí ngăn xếp gen_label() vị trí sau token ELSE Mã trung gian JMP_FALSE dịch 53 thực exp trả giá trị Vì giá trị điều kiện exp sai (có giá trị 0) thực nhảy vị trí ngăn xếp mã trung gian sau token ELSE back_patch( if_var->for_goto, GOTO, gen_label() ); Tại địa ngăn xếp mã trung gian for_goto thực mã trung gian GOTO nhảy đến vị trí ngăn xếp gen_label(), vị trí ngăn xếp gen_label() vị trí sau token ENDIF Vì trƣờng hợp giá trị điều kiện exp khơng thực mã trung gian JMP_FALSE tiếp tục thực commands sau token THEN Sau thực commands sau token THEN vị trí địa ngăn xếp mã trung gian for_goto, nên thực mã trung gian GOTO, thực nhảy đến vị trí sau token ENDIF  Xử lý ngữ nghĩa sinh câu lệnh while command: WHILE { $1 = (struct lbs *) newlblrec(); $1->for_goto = gen_label(); } exp { $1->for_jmp_false = reserve_loc(); } DO commands ENDWHILE { gen_code(GOTO, $1->for_goto ); back_patch($1->for_jmp_false,JMP_FALSE, gen_label()); } 54 Khi nhận cấu trúc WHILE chƣơng trình thực hành vi ngữ nghĩa sau: { $1 = (struct lbs *) newlblrec(); $1->for_goto = gen_label(); } Tức tạo cấu trúc có tên $1 Lƣu lại vị trí ngăn xếp mã trung gian vào biến $1->for_goto để thực nhảy cho vòng lặp WHILE trƣờng hợp điều kiện Tiếp đến thực hành vi ngữ nghĩa biểu thức exp Sau thực hành vi ngữ nghĩa biểu thức exp chƣơng trình thực tiếp hành vi ngữ nghĩa: { $1->for_jmp_false = reserve_loc(); } để lƣu địa ngăn xếp mã trung gian vào biến $1->for_jmp_false Tiếp đến chƣơng trình thực hành vi ngữ nghĩa cho câu lệnh commands nằm sau token DO Kết thúc câu lệnh WHILE chƣơng trình thực hành vi ngữ nghĩa sinh mã trung gian GOTO với tham số $1->for_goto mã trung gian JMP_FALSE cho địa ngăn xếp mã trung gian $1->for_jmp_false Với ý nghĩa: gặp mã trung gian GOTO nhảy trở địa $1->for_goto Khi gặp mã trung gian JMP_FALSE địa ngăn xếp mã trung gian $1>for_jmp_false kiểm tra giá trị exp có hay khơng Nếu nhảy địa ngăn xếp mã trung gian nơi kết thúc lệnh WHILE  Xử lý ngữ nghĩa sinh câu lệnh for to command: FOR IDENTIFIER ASSGNOP exp { context_check( STORE, $2, function_name ); $1 = (struct lbs *) newlblrec(); $1->for_goto = gen_label(); 55 context_check( LD_VAR, $2, function_name ); } TO exp { gen_code( LTEQ, ); $1->for_jmp_false = reserve_loc(); } DO commands { context_check(LD_VAR, $2, function_name); gen_code( LD_INT, ); gen_code( ADD, ); context_check( STORE, $2, function_name); } ENDFOR { gen_code( GOTO, $1->for_goto ); back_patch($1->for_jmp_false,JMP_FALSE,gen_label()); } Về nguyên lý câu lệnh FOR giống với câu lệnh WHILE Tuy nhiên điểm khác quan trọng chƣơng trình thực sinh mã trung gian câu lệnh WHILE thân chứa đựng điều kiện biểu thức exp để thực lặp cho câu lệnh này, câu lệnh FOR phải sinh điều kiện thực lặp cho phải thực việc tăng biến chạy thêm giá trị sau vòng lặp  Xử lý ngữ nghĩa sinh hàm func_decls :  | func_decls func_decl ; func_decl: FUNCTION IDENTIFIER { 56 if (function_name != NULL) free(function_name); function_name = (char *) malloc (strlen($2)+1); function_name = $2; install( function_name , function_name, FUN, gen_label()); install( function_name , "global", FUN, gen_label()); } '(' func_var_decls ')' var func_declarations BEGIN { gen_code( DATA, data_location() - ); } commands ENDFUNCTION ';' { if (function_name != NULL) free(function_name); function_name = "main"; gen_code(END_CAL, 0); } Khi xử lý với hàm Minipas, chia thành bƣớc sau: + Nhận biết khai báo hàm + Nhận biết gọi hàm Ta tập trung vào việc gọi hàm Cách nhận biết gọi hàm chƣơng trình nhƣ sau: Chƣơng trình duyệt tệp parser.y để tìm cấu trúc gọi hàm thực hành vi ngữ nghĩa cấu trúc nhƣ sau: IDENTIFIER {gen_code(BEGIN_CAL,0);} 57 '('values')' {context_check(CAL, $1, "global");} Trong trƣờng hợp nhận biết đƣợc câu lệnh gọi hàm sinh mã trung gian bắt đầu gọi hàm để đánh dấu từ điểm bắt đầu gọi hàm đến mã trung gian gọi hàm danh sách giá trị truyền vào cho hàm Ở hành vi ngữ nghĩa thể nhƣ sau: {gen_code(BEGIN_CAL,0);}: sinh mã trung gian bắt đầu gọi hàm '(' values ')': xử lý sinh mã trung gian cho giá trị truyền vào hàm context_check(CAL, $1, "global");: Kiểm tra hàm đƣợc khai báo hay chƣa, đƣợc khai báo thức sinh mã trung gian gọi hàm 58 KẾT LUẬN Sau trình nghiên cứu, luận văn đạt đƣợc kết nhƣ sau: Tìm hiểu đƣợc tổng quan chƣơng trình dịch gồm bƣớc để thiết kế chƣơng trình dịch Đi sâu vào tìm hiểu ba bƣớc phân tích từ vựng, phân tích cú pháp phân tích ngữ nghĩa Tìm hiểu hai thuật tốn để phân tích cú pháp thuật tốn Earley thuật tốn CYK Tìm hiểu cơng cụ để xây dựng chƣơng trình dịch cơng cụ xây dựng trình phân tích từ vựng Flex cơng cụ xây dựng trình phân tích cú pháp Bison Sử dụng cơng cụ để viết đƣợc chƣơng trình dịch mức độ vừa phải cho ngôn ngữ tựa Pascal Minipas Chƣơng trình dịch sử dụng làm cơng cụ lập trình mức đơn giản cho ngƣời làm quen với ngơn ngữ lập trình Hƣớng phát triển công cụ là: Cải tiến ngôn ngữ: thêm hàm chuẩn xử lí kiểu liệu Thêm phép tốn cho kiểu kí tự mảng kí tự Hỗ trợ tham biến cho chƣơng trình Cho phép sử dụng mảng nhiều chiều kiểu liệu tự định nghĩa Tìm hiểu tiếp giai đoạn sau trình thiết kế chƣơng trình dịch nhƣ tối ƣu mã 59 TÀI LIỆU THAM KHẢO [1] Nguyễn Văn Ba (2002), Ngơn ngữ hình thức, Nhà xuất Khoa học kỹ thuật [2] Trần Đức Quang (biên dịch, 2000), Trình biên dịch – Nguyên lý, kỹ thuật công cụ - Tập 1, Nhà xuất Thống kê [3] Thái Thuần Thạch (2000), Xây dựng cơng cụ thực số thuật tốn lý thuyết ngơn ngữ hình thức automat, Luận văn tốt nghiệp, Đại học Bách khoa Đà Nẵng [4] Phan Thị Tƣơi (2009), Giáo trình Trình biên dịch, Nhà xuất Đại học Quốc Gia thành phố Hồ Chí Minh [5] Alfred V Aho, Ravi Sethi, Jeffrey D Ullman (2002), Compilers: Principles, Techniques and Tools, Addison – Wesley Publishing Company [6] John R.Levine, Tony Mason & Doug Brown (1992), Lex and Yacc, O‟Reilly & Associates, Inc 60 ... DỊCH Chƣơng trình bày kiến thức tổng quan chƣơng trình dịch, đƣợc trích từ tài liệu tham khảo [2, 4, 5] 1.1 Chƣơng trình dịch Chƣơng trình dịch, cịn gọi phần mềm biên dịch, chƣơng trình máy tính... loại văn phạm Dựa vào dạng luật sinh P để chia thành lớp văn phạm sau: Văn phạm quy Văn phạm phi ngữ cảnh Văn phạm cảm ngữ cảnh Văn phạm tổng quát Trong luận văn, đề cập đến hai lớp văn phạm văn. .. xử lý sau, chƣơng trình dịch nhƣ đƣợc biết đến nhƣ biên dịch phân tầng 1.2 Các bƣớc thiết kế chƣơng trình dịch Chƣơng trình nguồn ngơn ngữ lập trình chuỗi ký tự Chƣơng trình dịch có nhiệm vụ chuyển

Ngày đăng: 20/11/2020, 09:21

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

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

Tài liệu liên quan