1. Trang chủ
  2. » Luận Văn - Báo Cáo

Nghiên cứu phát triển kỹ thuật debugger cho các bộ phát sinh tự động phân tích từ vựng và phân tích cú pháp

70 28 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 70
Dung lượng 2,05 MB

Nội dung

Đại Học Quốc Gia Tp Hồ Chí Minh TRƯỜNG ĐẠI HỌC BÁCH KHOA - PHẠM HÙNG TIẾN NGHIÊN CỨU PHÁT TRIỂN KỸ THUẬT DEBUGGER CHO CÁC BỘ PHÁT SINH TỰ ĐỘNG PHÂN TÍCH TỪ VỰNG VÀ PHÂN TÍCH CÚ PHÁP Chuyên ngành: Khoa Học Máy Tính LUẬN VĂN THẠC SĨ TP HỒ CHÍ MINH, tháng năm 2010 CƠNG TRÌNH ĐƯỢC HỒN THÀNH TẠI TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐẠI HỌC QUỐC GIA TP HỒ CHÍ MINH Cán hướng dẫn khoa học: TS Nguyễn Hứa Phùng Cán chấm nhận xét 1: TS Thoại Nam Cán chấm nhận xét 2: TS Nguyễn Thanh Phương Luận văn thạc sĩ bảo vệ HỘI ĐỒNG CHẤM BẢO VỆ LUẬN VĂN THẠC SĨ TRƯỜNG ĐẠI HỌC BÁCH KHOA, ngày tháng năm 2010 i TRƯỜNG ĐẠI HỌC BÁCH KHOA KHOA: Công Nghệ Thông Tin CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAM Độc Lập - Tự Do - Hạnh Phúc -oOo - Tp HCM, ngày tháng năm 2010 NHIỆM VỤ LUẬN VĂN THẠC SĨ Họ tên học viên: Phạm Hùng Tiến Phái: Nam Ngày, tháng, năm sinh: 07/11/1983 Nơi sinh: TPHCM Chuyên ngành: Khoa Học Máy Tính MSHV: 00708210 1- TÊN ĐỀ TÀI: Nghiên cứu phát triển kỹ thuật debugger cho phát sinh tự động phân tích từ vựng phân tích cú pháp 2- NHIỆM VỤ LUẬN VĂN  Tìm hiểu các phát sinh tự động phân tích từ vựng phân tích cú pháp  Đánh giá giải pháp có debugger cho phát sinh tự động phân tích từ vựng phân tích cú pháp  Nghiên cứu phát triển debugger cho phát sinh tự động phân tích từ vựng phân tích cú pháp 3- NGÀY GIAO NHIỆM VỤ: 25/1/2010 4- NGÀY HOÀN THÀNH NHIỆM VỤ: 2/7/2010 5- HỌ VÀ TÊN CÁN BỘ HƯỚNG DẪN: TS Nguyễn Hứa Phùng Nội dung đề cương Luận văn thạc sĩ Hội Đồng Chuyên Ngành thông qua CÁN BỘ HƯỚNG DẪN CHỦ NHIỆM BỘ MÔN (Họ tên chữ ký) QUẢN LÝ CHUYÊN NGÀNH (Họ tên chữ ký) ii KHOA QL CHUYÊN NGÀNH (Họ tên chữ ký) LỜI CẢM ƠN Trước tiên, xin chân thành cảm ơn thầy TS Nguyễn Hứa Phùng tận tình hướng dẫn, truyền đạt kiến thức, kinh nghiệm cho tơi suốt q trình thực luận văn tốt nghiệp Xin gửi lời cảm ơn đến quý thầy cô Trường Đại học Bách Khoa TP.HCM, người truyền đạt kiến thức quý báu cho thời gian học cao học vừa qua Sau cùng, lời tri ân sâu sắc xin dành cho bố mẹ, người nuôi dạy khơn lớn hết lịng quan tâm, động viên để hồn thành luận văn tốt nghiệp iii Tóm tắt luận văn Sự đời sinh mã trình biên dịch làm giảm nhiều cơng sức phát triển trình biên dịch Người phát triển cần đặc tả văn phạm cho phân tích từ vựng cú pháp Khi sinh dựa vào phần đặc tả sinh mã cho phân tích từ vựng cú pháp.Tuy nhiên nhược điểm sinh khơng có hỗ trợ hạn chế trình tìm lỗi phát sinh q trình đặc tả văn phạm Mục đích luận văn nghiên cứu đưa giải pháp phát triển debugger cho phép debug mức cao – mức đặc tả văn phạm iv MỤC LỤC CHƯƠNG MỞ ĐẦU 1.1 Giới thiệu 1.2 Đóng góp luận văn 1.3 Cấu trúc luận văn CHƯƠNG BỘ SINH MÃ TRÌNH BIÊN DỊCH 2.1 Bộ phân tích từ vựng 2.1.1 2.1.1.1 Tách token sử dụng NFA 2.1.1.2 Tách token sử dụng DFA 11 2.1.2 2.2 Nguyên lý hoạt động Bộ sinh mã phân tích từ vựng 14 Bộ phân tích cú pháp 15 2.2.1 LR (k) 15 2.2.2 LL(k) 18 2.2.2.1 Recursive Decent Parser (RDP) 18 2.2.2.2 Non-recursive Predictive Parser (NPP) 20 CHƯƠNG DEBUGGER 24 3.1 Giới thiệu debugger 24 3.2 Phân loại debugger 24 3.3 Kiến trúc tổng quát debugger 24 3.3.1 Tầng giao diện (User Interface) 25 3.3.1.1 Source View 25 3.3.1.2 Stack View 26 3.3.1.3 Breakpoint View 27 3.3.1.4 Control, Disassembly Hardware Register View (CPU View) 27 3.3.1.5 Inspect View 28 3.3.1.6 Variable View 28 3.3.2 Debugger Kernel 29 3.3.3 Operating System Debugger Interface (OSDI) 29 v 3.4 Nguyên lý hoạt động debugger 29 CHƯƠNG CÁC NGHIÊN CỨU LIÊN QUAN 31 4.1 Antlrworks 31 4.2 AntlrIDE 33 4.3 Antlr Studio 35 4.4 Nooza 36 4.5 Zyacc 36 CHƯƠNG DEBUGGER CHO BỘ SINH MÃ TRÌNH BIÊN DỊCH 37 5.1 Chức debugger cho sinh 39 5.2 Kỹ thuật thực debugger cho sinh mã 39 5.2.1 Kiến trúc debugger cho sinh 39 5.2.2 Ánh xạ văn phạm mã sinh 40 5.2.3 Nguyên lý hoạt động debugger cho sinh 42 5.2.4 Các chức debugger cho sinh 45 5.3 5.2.4.1 Breakpoint 45 5.2.4.2 Chạy bước (stepping) 46 5.2.4.3 Phát lỗi 48 HLDCC (High Level Debugger for Compiler Compiler) 48 5.3.1 Kiến trúc tổng quan 49 5.3.2 Nguyên lý hoạt động HLDCC 50 5.3.3 Hiện thực 51 5.3.3.1 Language API 51 5.3.3.2 Debugger API 52 5.3.4 Debugger cho ngơn ngữ lập trình (Native Debugger) 59 CHƯƠNG KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN 61 6.1 Kết luận 61 6.2 Hướng phát triển 61 TÀI LIỆU THAM KHẢO 62 vi MỞ ĐẦU CHƯƠNG MỞ ĐẦU 1.1 Giới thiệu Ra đời từ thập niên 50, lý thuyết trình biên dịch có khoảng thời gian phát triển dài Các lý thuyết ứng dụng rộng rãi từ việc phát triển trình biên dịch cho ngơn ngữ lập trình đại đến ngôn ngữ scripting ứng dụng đơn giản đọc tập tin cấu hình Quá trình thực trình biên dịch trải qua nhiều bước Hình 1-1 minh họa sơ đồ tổng quan bước thực thi trình biên dịch Hình 1-1: Các bước q trình biên dịch Phân tích từ vựng tiến hành phân tích liệu đầu vào tách thành ký hiệu kết thúc (token) Các token sử dụng cho q trình phân tích cú pháp Kết phân tích cú pháp cú pháp Kế tiếp, trình xử lý ngữ nghĩa thực thi dựa vào phân tích cú pháp Nhằm đảm bảo tính khả MỞ ĐẦU chuyển, trình sinh mã trung gian thực thi Ứng với hệ máy khác trình biên dịch tiến hành tối ưu mã cuối sinh mã thực thi Trong trình biên dịch, trình biên dịch lưu trữ thơng tin trung gian (biến, tên thủ tục…) bảng danh biểu nhằm hỗ trợ cho q trình phân tích Ngồi trình biên dịch cung cấp chức xử lý lỗi( lỗi cú pháp ngữ nghĩa…) Tuy nhiên lúc bước thực thi cách đầy đủ Tùy theo nhu cầu cụ thể mà số bước ta bỏ qua Với đời biểu thức quy (regular expression), Cú pháp cho từ vựng định nghĩa cách hình thức Hình 1-2 minh họa cách thức đặc tả từ vựng dựa vào biểu thức quy, ID biểu thức định danh, INT biểu thức số nguyên: ID  ('a' 'z'|'A' 'Z')+ ; INT  '0' '9'+ ; Hình 1-2: Biểu thức quy cho phân tích từ vựng Tương tự vậy, cú pháp chương trình đặc tả cách hình thức dựa vào văn phạm phi ngữ cảnh (context-free grammar) Văn phạm phi ngữ cảnh bao gồm tập hợp luật sinh Q trình phân tích cú pháp vào luật sinh để kiểm tra xem chương trình nhập cú pháp hay khơng Hình 1-3 minh họa văn phạm phi ngữ cảnh cho biểu thức tính tốn: expr  multExpr (('+'|'-') multExpr)*; multExpr  atom (('*'|’/’) atom)*; atom  INT | ID | '(' expr ')'; Hình 1-3: Văn phạm phi ngữ cảnh cho cú pháp tính giá trị biểu thức Ngồi việc đặc tả cách hình thức, luật từ vựng cú pháp kết hợp với hành vi ngữ nghĩa Hành vi ngữ nghĩa đặc tả sử dụng ngơn ngữ lập trình phát triển cho phân tích từ vựng cú pháp Ví dụ MỞ ĐẦU Hình 1-4 minh họa luật sinh kết hợp với hành vi ngữ nghĩa Luật sinh expr multExpr nhận giá trị trả biến value Các hành vi ngữ nghĩa đặc tả “{“ “}” Đặc tả ngữ nghĩa sử dụng ký hiệu văn phạm vế phải (hoặc đặt lại tên cho ký hiệu văn phạm vế phải) biến expr returns [int value]  e=multExpr {$value = $e.value;} ( '+' e=multExpr {$value += $e.value;} | '-' e=multExpr {$value -= $e.value;} )* ; multExpr returns [int value]  e=atom {$value = $e.value;} ('*' e=atom {$value *= $e.value;})* ; Hình 1-4: Luật sinh kết hợp với hành vi ngữ nghĩa Từ đặc tả hình thức từ vựng, ta thực phân tích từ vựng dựa vào lý thuyết automat từ đặc tả cú pháp ta sử dụng phương pháp từ lên (bottom-up – LR(k)) từ xuống (top-down – LL(k)) để kiếm tra tính đắn chương trình nhập Trước việc thực lý thuyết tốn nhiều cơng sức Vì đời sinh mã cho trình biên dịch (compiler generator hay compiler compiler) giảm bớt nhiều gánh nặng cho người phát triển Mục đích sinh mã dựa vào đặc tả hình thức luật sinh kết hợp với hành vi ngữ nghĩa sinh mã ngôn ngữ lập trình mong muốn cho q trình phân tích từ vựng cú pháp Đến nhiều sinh mã đời công cụ hỗ trợ phát triển hạn chế nên việc ứng dụng sinh mã gặp nhiều giới hạn như:  Làm để phát lỗi trình đặc tả văn phạm?  Làm để biết văn phạm đặc tả yêu cầu? DEBUGGER CHO BỘ SINH MÃ TRÌNH BIÊN DỊCH Do cần phải có debugger khắc phục nhược điểm HLDCC mơi trường phát triển tích hợp (IDE) hỗ trợ cho trình đặc tả văn phạm Mục đích HLDCC:  Hỗ trợ sinh mã RDP  Mơi trường phát triển tích hợp (IDE)  Hỗ trợ đặc tả văn phạm cho nhiều sinh  Hỗ trợ debug nhiều ngơn ngữ lập trình khác  Real-time debugger: cho phép debug hành vi ngữ nghĩa  Hỗ trợ hầu hết chức debugger: step (in, out, over), breakpoint (có điều kiện khơng điều kiện) Phần trình bày chi tiếp kiến trúc tổng quan (mục 5.3.1), nguyên lý hoạt động (mục 5.3.2) thực HLDCC (mục 5.3.3) 5.3.1 Kiến trúc tổng quan Khác với loại debugger cho sinh có, HLDCC cung cấp framework có khả mở rộng cao cho phép phát triển hỗ trợ thêm sinh debug ngơn ngữ lập trình khác thơng qua plugin Kiến trúc tổng quan HLDCC Hình 5-12: Hình 5-12: Kiến trúc tổng quan HLDCC 49 DEBUGGER CHO BỘ SINH MÃ TRÌNH BIÊN DỊCH Tầng (UI) cung cấp giao diện đồ họa hỗ trợ đặc tả debug văn phạm Phần lõi (Core) thành phần quan trọng HLDCC, gồm hai phần chính:  Debugger API: cung cấp interface giúp cho việc phát triển thêm loại debugger hỗ trợ ngôn ngữ lập trình khác  Language API: cung cấp interface giúp cho việc phát triển thêm loại sinh khác 5.3.2 Nguyên lý hoạt động HLDCC Như trình bày trên, HLDCC cung cấp IDE hỗ trợ đặc tả văn phạm real-time debugger Sau đặc tả xong, ta tiến hành biên dịch văn phạm Quá trình biên dịch bao gồm bước: sinh mã, sinh thông tin ánh xạ văn phạm mã sinh cuối biên dịch mã sinh thành chương trình thực thi Hình 5-13 cho thấy sơ đồ hoạt động trình biên dịch văn phạm: Hình 5-13: Các bước trình biên dịch văn phạm Tùy sinh khác mà phương pháp ánh xạ khác Trong số trường hợp đòi hỏi phải can thiệp sửa đổi mã nguồn sinh để sinh thông tin ánh xạ 50 DEBUGGER CHO BỘ SINH MÃ TRÌNH BIÊN DỊCH 5.3.3 Hiện thực Phần tập trung chủ yếu vào phân tích thực cho phần lõi (core) HLDC: Language API (mục 5.3.3.1) Debugger API (mục 5.3.3.2) 5.3.3.1 Language API Language API cung cấp interface nhằm mục đích mở rộng thêm sinh cho HLDCC Các interface có chức xử lý văn phạm nhằm tách văn phạm thành element (luật sinh, hành vi ngữ nghĩa, vế phải…) khác phục vụ cho chức tầng UI highlighting, code completion,…Ngồi Language API cịn cung cấp interface giúp sinh thông tin ánh xạ văn phạm mã sinh phục vụ cho trình debug ILanguageProvider Language provider đóng vai trị factory cung cấp thực cho chức q trình phân tích văn phạm (IGrammarAnalyzer), phân giải biểu thức (IExpressionResolver) sinh mã (ITargetGenerator) sử dụng sinh tương ứng IGrammarAnalyzer IGrammarAnalyzer có nhiệm vụ phân tích văn phạm thành thành phần khác luật sinh, hành vi ngữ nghĩa, vế phải… Thông tin thành phần bao gồm tên, vị trí dịng văn phạm… 51 DEBUGGER CHO BỘ SINH MÃ TRÌNH BIÊN DỊCH IExpressionResolver Một số sinh cho phép sử dụng thành phần văn phạm(ví dụ luật sinh) làm biến sử dụng hành vi ngữ nghĩa Do mục đích IExpressionResolver interface biến đổi biểu thức sử dụng biến thành biểu thức có cú pháp ngơn ngữ lập trình mã sinh ITargetGenerator ITargetGenerator có nhiệm vụ thực sinh mã từ văn phạm đặc tả ánh xạ mã sinh với văn phạm Để thực trình debug, debugger cho sinh phải chứa thông tin ánh xạ văn phạm mã sinh Thơng tin sử dụng để thiết lập breakpoint thao tác chạy bước (stepping) Vì thực chất debug văn phạm chương trình thực thi lại chương trình mã sinh 5.3.3.2 Debugger API Như trình bày trên, Debugger API cung cấp interface giúp mở rộng thêm debugger cho mã sinh Hoạt động debugger hoàn toàn độc lập với văn phạm ICompilerProvider Giống ILanguageProvider, ICompilerProvider đóng vai trị factory cung cấp thực trình biên dịch 52 DEBUGGER CHO BỘ SINH MÃ TRÌNH BIÊN DỊCH (ICompiler) debugger (IDebugger) cho mã sinh ICompiler Để bắt đầu trình debug, mã sinh phải biên dịch chương trình thực thi ICompiler interface thực thi trình biên dịch Tùy thuộc vào ngôn ngữ mã sinh ra, interface ICompiler sử dụng trình biên dịch phù hợp tương ứng (trình biên dịch C#, Java…) IDebugSession Mỗi bắt đầu thực trình debug, session tạo để quản lý trình Như trình bày phần trên, debugger cho sinh hoạt động theo multi-thread Do session đóng vai trị thread trung gian điều phối hoạt động UI debugger Mọi thao tác UI phải qua session xử lý sau truyền cho debugger Tương tự vậy, debugger muốn giao tiếp với UI (hiển thị vị trí dừng…) phải qua session Breakpoint Breakpoint phân thành hai loại: khơng có điều kiện có điều kiện Tuy nhiên hầu hết debugger ngôn ngữ lập trình hỗ trợ breakpoint khơng điều kiện Để hỗ trợ breakpoint có điều kiện, ta phải kiểm tra tay Nghĩa breakpoint xảy ra, ta xét xem breakpoint có điều kiện hay khơng Nếu breakpoint có điều kiện, ta thực tính tốn điều kiện Trong trường hợp thỏa mãn dừng lại, cịn ngược lại cho thực tiếp chương trình 53 DEBUGGER CHO BỘ SINH MÃ TRÌNH BIÊN DỊCH Call stack Callstack chức nhằm hỗ trợ cho trình debug - tracking lại trình gọi luật sinh từ bắt đầu đến thời điểm debugger Tuy nhiên chức có ý nghĩ sinh RDP luật sinh gọi cách đệ quy, trường hợp sinh khác sử dụng bảng phân tích nên ta khơng thể tracking lại Callstack bao gồm tập hợp stack frame – lưu trữ thông tin thủ tục luật sinh gọi Thông tin stack frame bao gồm trạng thái tại, giá trị biến cục Hình 5-14 minh họa callstack HLDCC Hình 5-14: Thơng tin callstack breakpoint xảy luật sinh mulExpr Trạng thái biến (variable) Trong q trình debug, đơi ta cần phải xem xét giá trị biến giá trị biểu thức tạo thành từ biến hành vi ngữ nghĩa HLDCC cho phép nhập biểu thức tạo thành từ biến thực tính giá trị biểu thức 54 DEBUGGER CHO BỘ SINH MÃ TRÌNH BIÊN DỊCH Chạy bước (stepping) Ngồi giải thuật loại bỏ mã dư thừa thực thi chạy bước trên, số debugger cho ngôn ngữ lập trình hỗ trợ việc bỏ lệnh thực thi trình chạy bước Phần trình bày hai cách lọc: sử dụng thị #line cho ngôn ngữ C/C++/C# Java SMAP cho ngôn ngữ Java a) Chỉ thị #line Chỉ thị #line sử dụng để thay đổi vị trí dịng tập tin gốc sang vị trí dịng tập tin khác trình biên dịch Cú pháp thị line có dạng sau: #line digit-sequence ["filename"] digit-sequence vị trí dịng filename tập tin chứa dịng Ví dụ (Hình 5-15) minh họa rõ cách sử dụng thị #line Dòng tập tin grammar.target có thị #line “grammar.g” dịng (thủ tục tục prog()) ánh xạ sang dòng tập tin grammar.g Văn phạm(grammar.g) prog ::= ‘program’ body {action_block_1}; body ::= ‘begin’ stat Mã sinh (grammar.target) #line “grammar.g” prog(){ if(lookahead = ‘begin’){ {action_block_2} #line “grammar.g” ‘end’; body(); #line “grammar.g” action_block_1; } else error(); 10 } 11 #line “grammar.g” … 12 body (){ 13 #line “grammar.g” 14 match(‘begin’); 15 #line “grammar.g” 55 DEBUGGER CHO BỘ SINH MÃ TRÌNH BIÊN DỊCH 16 stat(); 17 #line “grammar.g” 18 action_block_2; 19 #line “grammar.g” match(‘end’); 20 21 } Hình 5-15: Ví dụ thị #line C/C++ Đối với ngơn ngữ C#, thị #line cịn có thêm hai thuộc tính default hidden Với thuộc tính hidden, tồn dịng sau thị bị ẩn q trình debug debugger bỏ qua dòng chị #line với thuộc tính hidden Ngược lại, thuộc tính default khơi phục lại quy định dịng tập tin gốc Ví dụ (Hình 5-16) minh họa thị line với thuộc tính default hidden Văn phạm(tập tin grammar.g) prog ::= ‘program’ body {action_block_1}; body ::= ‘begin’ stat {action_block_2} ‘end’; Mã sinh(tập tin grammar.target) #line default prog(){ #line hidden if(lookahead = ‘begin’){ #line default body(); #line hidden … #line default action_block_1; #line hidden … } else error(); } #line default 56 DEBUGGER CHO BỘ SINH MÃ TRÌNH BIÊN DỊCH body (){ #line default match(‘begin’); #line hidden … #line default stat(); #line hidden … #line default action_block_2; #line hidden … #line default match(‘end’); #line hidden } Hình 5-16: Ví dụ thị #line C# b) Java SMAP Java SMAP [16] định nghĩa chuẩn JSR-045 Sun nhằm hỗ trợ debug cho ngôn ngữ khác Java chạy máy ảo Java (Java Virtual Machine) Do ta sử dụng SMAP để ánh xạ văn phạm (có thể xem ngơn ngữ lập trình) mã Java sinh sinh Từ tập tin đặc tả văn phạm, sinh sinh mã Java (.java) HLDCC sinh tập tin smap (.smap) ánh xạ văn phạm mã sinh Sau trình biên dịch Java tiến hành biên dịch tập tin java thành tập tin class (.class) Kế tiếp trình post-processor thực thi với đầu vào tập tin class tập tin smap Kết tập tin class ghi đè lên tập tin class cũ chứa thông tin 57 DEBUGGER CHO BỘ SINH MÃ TRÌNH BIÊN DỊCH ánh xạ tập tin map sử dụng cho trình debug Hình 5-17 minh họa chi tiết trình này: Grammar file java file Java Compiler class file smap file Post processor class file Hình 5-17: Cơ chế hoạt động Java SMAP Chi tiết đặc tả tập tin smap thao khảo [16] Ví dụ minh họa cấu trúc tập tin smap Xét văn phạm ứng với mã sinh Hình 5.18Error! Reference source not found Văn phạm(grammar.g) prog ::= ‘program’ body {action_block_1}; body ::= ‘begin’ stat Mã sinh ra(target.java) prog(){ match(“program”); if(lookahead = ‘begin’){ {action_block_2} body(); ‘end’; action_block_1; } else error(); } body (){ 10 match(“begin”); 11 stat(); 12 action_block_2; 58 DEBUGGER CHO BỘ SINH MÃ TRÌNH BIÊN DỊCH 13 match(‘end’); 14 } Hình 5-18: Văn phạm mã Java sinh tương ứng Khi tập tin smap sau (Hình 5-19): SMAP target.java *F grammar.g *L 1#1,1:1,1 1#1,1:2,1 1#1,1:4,1 2#1,1:5,1 3#1,1:9,1 3#1,1:10,1 4#1,1:12,1 5#1,1:13,1 *E Hình 5-19: Cấu trúc tập tin SMAP sinh 5.3.4 Debugger cho ngơn ngữ lập trình (Native Debugger) Tùy vào ngơn ngữ lập trình mã sinh cụ thể ta sử dụng debugger tương ứng cho ngôn ngữ Việc thực native debugger không phụ thuộc vào sinh, ta áp dụng native debugger cho sinh sinh mã phù hợp với ngôn ngữ native debugger HLDCC cung cấp interface IDebugger nhằm hỗ trợ mở rộng thêm debugger Tùy vào ngơn ngữ ta sử dụng debugger khác như: 59 DEBUGGER CHO BỘ SINH MÃ TRÌNH BIÊN DỊCH Win32 Debugger [17], Unix/Linux Debugger (GDB, ptrace) [18], NET debugger [19], Java Debugger [20] 60 KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN CHƯƠNG KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN 6.1 Kết luận Bộ sinh mã trình biên dịch ngày sử dụng rộng rãi Tuy nhiên việc phát lỗi từ mã sinh thực thử thách người phát triển Quá trình debug mã sinh gặp phức tạp Do với đời debugger cho sinh mã trình biên dịch nhu cầu cần thiết Luận văn tập trung phân tích khó khăn đưa giải pháp thực HLDCC - debugger cho sinh mã trình biên dịch RDP HLDCC có đầy đủ chức debugger bao gồm: thiết lập breakpoint (điều kiện không điều kiện), cho phép chạy bước luật sinh hành vi ngữ nghĩa, xem xét trạng thái phân tích cú pháp thời điểm dừng HLDCC hỗ trợ hai sinh mã Antlr Coco, cho phép debug ngôn ngữ sinh C# Ngoài chức debugger, HLDCC cịn cung cấp mơi trường phát triển tích hợp (IDE) hỗ trợ cho trình đặc tả văn phạm interface cho phép mở rộng thêm việc hỗ trợ sinh khác debug ngơn ngữ lập trình mã sinh khác 6.2 Hướng phát triển Phiên HDLCC hỗ trợ debug cho phân tích cú pháp RDP ngơn ngữ mã sinh C# Do đề tài phát triển mở rộng theo hướng sau:  Hỗ trợ thêm sinh mã khác  Hỗ trợ debug ngôn ngữ lập trình khác (Java, C/C++…)  Phát triển debugger cho phân tích từ vựng  Phát triển debugger cho phân tích cú pháp LR NDP Khác với RDP, phân tích LR NDP hoạt động dựa bảng phân tích Các bảng thường nén nhằm tối ưu việc lưu trữ Vì chế debug cho sinh họ tương đối phức tạp 61 TÀI LIỆU THAM KHẢO TÀI LIỆU THAM KHẢO Aho, Sethi, Ullman Compilers: Principles, Techniques, and Tools s.l : Addison-Wesley, 2006 Flex/Bison [Online] http://www.gnu.org/software/bison/ Lex/Yacc [Online] http://dinosaur.compilertools.net GoldParser [Online] http://www.devincook.com/goldparser/ Antlr [Online] http://antlr.org Coco [Online] http://www.ssw.uni-linz.ac.at/coco/ Grammatica [Online] http://grammatica.percederberg.net JavaCC [Online] https://javacc.dev.java.net Rosenberg, Jonathan B How debuggers works: Algorithms, Data Structures, and Architecture 1996 10 Lisa [Online] http://www.lisa.org/ 11 Antlrworks [Online] http://www.antlr.org/works/index.html 12 AntlrIDE [Online] http://AntlrIDE.org 13 Antlr Studio [Online] http://www.placidsystems.com/antlrstudio.aspx 14 Debugging Eli-Generated Compilers with Noosa Sloane, Anthony M 1996 15 Zyacc [Online] http://www.cs.binghamton.edu/~zdu/zyacc/ 16 JSR-045: Java Debugging Support for Other Languages 17 Win32 Debugging API [Online] http://msdn.microsoft.com/enus/library/ee663265%28v=VS.85%29.aspx 18 GDB: The GNU Project Debugger [Online] http://www.gnu.org/software/gdb/ 19 CLR Debugging [Online] http://msdn.microsoft.com/enus/library/bb397953.aspx 20 Java Platform Debugger Architecture [Online] http://java.sun.com/javase/technologies/core/toolsapis/jpda/ 62 LÝ LỊCH TRÍCH NGANG Họ tên: Phạm Hùng Tiến Ngày, tháng, năm sinh: 07/11/1983 Nơi sinh: TpHCM Địa liên lạc: 164/25, Nguyễn Oanh, Phường 17, Quận Gị Vấp, TPHCM Q TRÌNH ĐÀO TẠO  2001-2005 : Cử nhân khoa học máy tính - Trường đại học Bách Khoa TPHCM  2008-2010 : Thạc sĩ khoa học máy tính - Trường đại học Bách Khoa TPHCM Q TRÌNH CƠNG TÁC  6/2006 – 6/2010 : Cơng ty InfoSoft  7/2010 - đến : Công ty CSC 63 ... TÀI: Nghiên cứu phát triển kỹ thuật debugger cho phát sinh tự động phân tích từ vựng phân tích cú pháp 2- NHIỆM VỤ LUẬN VĂN  Tìm hiểu các phát sinh tự động phân tích từ vựng phân tích cú pháp. ..  Đánh giá giải pháp có debugger cho phát sinh tự động phân tích từ vựng phân tích cú pháp  Nghiên cứu phát triển debugger cho phát sinh tự động phân tích từ vựng phân tích cú pháp 3- NGÀY GIAO... từ vựng Từ bảng truyền giải thuật nhận dạng automat thực thi cho q trình phân tích từ vựng Hình 2-17 cho thấy nguyên lý hoạt động sinh mã phân tích từ vựng Bộ phân tích từ vựng Đặc tả từ vựng

Ngày đăng: 15/02/2021, 07:45