GIÁO TRÌNH MÔN CHƯƠNG TRÌNH DỊCH

158 3.4K 36
GIÁO TRÌNH MÔN CHƯƠNG TRÌNH DỊCH

Đ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

GIÁO TRÌNH MÔN CHƯƠNG TRÌNH DỊCH

Khoa công nghệ thông tin - Đại học Thái Nguyên Bộ mơn cơng nghệ phần mềm GIÁO TRÌNH MƠN CHƯƠNG TRÌNH DỊCH (Compiler Construction) Thái ngun, 2007 LỜI NĨI ĐẦU Mơn học chương trình dịch mơn học ngành khoa học máy tính Trong suốt thập niên 50, trình biên dịch xem khó viết Ngày nay, việc viết chương trình dịch trở nên đơn giản với hỗ trợ công cụ khác Cùng với phát triển chuyên ngành lý thuyết ngơn ngữ hình thức automat, lý thuyết thiết kế trình biên dịch ngày hồn thiện Có nhiều trình biên dịch đại, có hỗ trợ nhiều tính tiện ích khác Ví dụ: visual Basic, studio Microsoft, Jbuilder, netbean, Delphi … Tại ta không đứng vai người khổng lồ mà lại nghiên cứu cách xây dựng chương trình dịch nguyên thuỷ Với vai trị sinh viên cơng nghệ thơng tin ta phải tìm hiểu nghiên cứu xem chương trình dịch thực thực nào? Mục đích mơn học sinh viên học thuật tốn phân tích ngữ pháp kỹ thuật dịch, hiểu thuật toán xử lý ngữ nghĩa tối ưu hóa q trình dịch u cầu người học nắm thuật toán kỹ thuật dịch Nội dung mơn học : Mơn học Chương trình dịch nghiên cứu vấn đề: - Lý thuyết thiết kế ngơn ngữ lập trình ( cách tạo ngơn ngữ giúp người lập trình đối thoại với máy tự động dịch được) - Cách viết chương trình chuyển đổi từ ngơn ngữ lập trình sang ngơn ngữ lập trình khác Học mơn chương trình dịch giúp ta: - Nắm vững nguyên lý lập trình: Hiểu ngơn ngữ, điểm mạnh điểm yếu => chọn ngơn ngữ thích hợp cho dự án Biết chọn chương trình dịch thích hợp (VD với pascal Dos: chương trình dịch turbo pascal Đối với ngôn ngữ C: chọn turbo C hay bolean C? Bolean C tiện lợi, dễ dùng, turbo C sinh mã gọn, lo vè vấn đề tương thích với hệ điều hành khố dùng hơn) Phân biệt cơng việc chương trình dịch thực chương trình ứng dụng thực - Vận dụng: thực dự án xây dựng chương trình dịch Áp dụng vào ngành khác xử lý ngơn ngữ tự nhiên… Để viết trình biên dịch ta cần có kiến thức ngơn ngữ lập trình, cấu trúc máy tính, lý thuyết ngơn ngữ, cấu trúc liệu, phân tích thiết kế giải thuật công nghệ phần mềm Những kiến thức của môn học có thể được sử dụng các lĩnh vực khác xử lý ngôn ngữ tự nhiên Tài liệu tham khảo: Giáo trình sử dụng: Dick Grune, Ceriel Jacobs, Parsing Techniques: A Practical Guide, 1998 Một số tài ngun trực tuyến tìm thấy việc sử dụng máy tìm kiếm, chẳng hạn http://www.cppreference.com/ http://www.sgi.com/tech/stl/ Bài giảng Lý thuyết và Thực hành Chương Trình Dịch của Lê Anh Cường, khoa Công Nghệ, ĐHQG Hà nợi, 2004 Giáo trình lý thuyết, thực hành mơn học Chương trình dịch Phạm Hồng Ngun, Khoa Công Nghệ, ĐHQG Hà nội, 1998 Ngôn ngữ hình thức Nguyễn Văn Ba, ĐHBK Hà nội, 1994 Thực hành kỹ thuật biên dịch Nguyễn Văn Ba, ĐHBK Hà nội, 1993 Compiler: principles techniques and tools A.V Aho, Ravi Sethi, D Ulman, 1986 Bản dịch tài liệu: Trình biên dịch: Nguyên lý, kỹ thuật công cụ Trần Đức Quang, 2000 Chương 1: Tổng quan ngơn ngữ lập trình chương trình dịch Ngơn ngữ lập trình chương trình dịch Con người muốn máy tính thực cơng việc người phải viết u cầu đưa cho máy tính ngơn ngữ máy hiểu Việc viết u cầu gọi lập trình Ngơn ngữ dùng để lập trình gọi ngơn ngữ lập trình Có nhiều ngơn ngữ lập trình khác Dựa sở tính khơng phụ thuộc vào máy tính ngày cao người ta phân cấp ngôn ngữ lập trình sau: - Ngơn ngữ máy (machine languge) - Hợp ngữ (acsembly langguge) - Ngôn ngữ cấp cao (high level langguage) Ngôn ngữ máy gồm số 1, khó hiểu người sử dụng Mà ngơn ngữ tự nhiên người lại dài dịng nhiều chi tiết mập mờ, không rõ ràng máy Để người giao tiếp với máy dễ dàng cần ngôn ngữ trung gian gần với ngôn ngữ tự nhiên Vì ta cần có chương trình để dịch chương trình ngơn ngữ sang mã máy để chạy Những chương trình làm nhiệm vụ gọi chương trình dịch Ngồi ra, chương trình dịch cịn chuyển chương trình từ ngơn ngữ sang ngơn ngữ khác tương đương Thông thường ngôn ngưc nguồn ngôn ngữ bậc cao ngơn ngữ đích ngơn ngữ bậc thấp, ví dụ ngơn ngữ Pascal hay ngơn ngữ C sang ngôn ngữ Acsembly * Định nghĩa chương trình dịch: Chương trình dịch chương trình thực việc chuyển đổi chương trình hay đoạn chương trình từ ngơn ngữ (gọi ngơn ngữ nguồn) sang ngơn ngữ khác (gọi ngơn ngữ đích) tương đương chương trình nguồn (ngơn ngữ bậc cao) chương trình dịch chương trình đích (ngơn ngữ máy) Lỗi Hình 1.1: Sơ đồ chương trình dịch Để xây dựng chương trình dịch cho ngơn ngữ đó, ta cần biết đặc tả ngơn ngữ lập trình, cú pháp ngữ nghĩa ngơn ngữ lập trình đó… Để đặc tả ngơn ngữ lập trình, ta cần định nghĩa: - Tập kí hiệu cần dùng chương trình hợp lệ - Tập chương trình hợp lệ - Nghĩa chương trình hợp lệ Việc định nghĩa tập kí hiệu cần dùng ngôn ngữ dế dàng, ta cần liệt kê đủ Việc xác định chương trình hợp lệ khó khăn Thơng thường ta dùng luật văn phạm để đặc tả Việc thứ 3, định nghĩa ý nghĩa chương trình hợp lệ khó khăn Có phương pháp để xác định nghĩa chương trình hợp lệ + Phương pháp 1: định nghã phép ánh xạ ánh xạ chương trình vào câu ngơn ngữ mà ta hiểu + Phương pháp 2: Xác định ý nghĩa chương trình máy lý tưởng Ý nghĩa chương rình đăc tả ngơn từ máy lý tưởng Máy lý tưởng thông dịch ngôn ngữ + Phương pháp 3: ý nghĩa cảu chương trình nguồn sản phẩm xuất trình biên dịch, dịch chương trình nguồn Phân loại chương trình dịch Có thể phân thành nhiều loại tuỳ theo tiêu chí khác - Theo số lần duyệt: Duyệt đơn, duyệt nhiều lần - Theo mục đích: Tải chạy, gỡ rối, tối ưu, chuyển đổi ngôn ngữ, chuyển đôỉ định dạng… - Theo độ phức tạp chương trình nguồn đích: + Asembler (chương trình hợp dịch): Dịch từ ngơn ngữ asembly ngôn ngữ máy + Preproccessor: (tiền xử lý) : Dịch từ ngôn ngữ cấp cao sang ngôn ngữ cấp cao khác (thực chất dịch số cấu trúc sang cấu trúc cũ) + Compiler: (biên dịch) dịch từ ngôn ngữ cấp cao sang ngôn ngữ cấp thấp - Theo phương pháp dịch chạy: + Thông dịch: (diễn giải - interpreter) chương trình thơng dịch đọc chương trình nguồn theo lệnh phân tích thực (Ví dụ hệ điều hành thực câu lệnh DOS, hay hệ quản trị sở liệu Foxpro) Hoặc ngôn ngữ nguồn không chuyển sang ngôn ngữ máy mà chuyển sang ngôn ngữ trung gian Một chương trình có nhiệm vụ đọc chương trình ngôn ngữ trung gian thực câu lệnh Ngôn ngữ trung gian gọi ngôn ngữ CT NN Chương máy ảo, chương trình thơng dịch thực ngơn ngữ gọi máy ảo trung gian trình nguồn Compiler Interpreter Hình 1.2 Hệ thống thơng dịch Kết Ví dụ hệ thơng dịch Java Mã nguồn Java dịch dạng Bytecode File đích trình thơng dịch gọi máy ảo Java thực Chính mà người ta nói Java chạy hệ điều hành có cài máy ảo Java + Biên dịch: tồn chương trình nguồn trình biên dịch chuyển sang chương trình đích dạng mã máy Chương trình đích chạy độc lập máy mà khơng cần hệ thống biên dịch - Theo lớp văn phạm: LL (1) (LL – Left to right, leftmost) LR(1) (LR – letf to right, right most) 1.3 Cấu trúc chương trình dịch 1.3.1 cấu trúc tĩnh (cấu trúc logic) 1) Phân tích từ vựng: đọc luồng kí tự tạo thành chương trình nguồn từ trái sang phải, tách thành từ tố (token) - Từ vựng: Cũng ngơn ngữ tự nhiên, ngơn ngữ lập trình xây dựng dựa từ vựng Từ vựng ngơn ngữ lập trình thường xây dựng dựa chữ gồm có: + chữ cái: A Z, a z + chữ số: + ký hiệu toán học: +, - , *, /, (, ), =, , !, %, / + ký hiệu khác: [, ], Các từ vựng ngơn ngữ hiểu bao gồm từ khóa, tên hàm, tên hằng, tên biến, phép toán, Các từ vựng có qui định định ví dụ: tên viết chữ sau khơng nhiều chữ chữ số, phép gán C =, Pascal :=,v Để xây dựng chương trình dịch, hệ thống phải tìm hiểu tập từ vựng ngơn ngữ nguồn phân tích để biết loại từ vựng thuộc tính nó, Ví dụ: Câu lệnh chương trình nguồn viết ngơn ngữ pascal: “a := b + c * 60” Chương trình phân tích từ vựng trả về: a tên (tên (định danh )) := toán tử gán b tên (định danh) + toán tử cộng c định danh * toán tử nhân 60 số Kết phân tích từ vựng là: (tên, a), phép gán, (tên, b) phép cộng (tên, c) phép nhân, (số, 60) 2) Phân tích cú pháp: Phân tích cấu trúc ngữ pháp chương trình Các từ tố nhóm lại theo cấu trúc phân cấp - Cú pháp: Cú pháp thành phần quan trọng ngôn ngữ Như biết ngơn ngữ hình thức ngơn ngữ tập câu thỏa mãn văn phạm ngơn ngữ Ví dụ câu = chủ ngữ + vị ngữ vị ngữ = động từ + bổ ngữ v.v Trong ngơn ngữ lập trình, cú pháp thể luật cú pháp Bộ luật dùng để mô tả cấu trúc chương trình, câu lệnh Chúng ta quan tâm đến cấu trúc bao gồm: 1) khai báo 2) biểu thức số học, biểu thức logic 3) lệnh: lệnh gán, lệnh gọi hàm, lệnh vào ra, 4) câu lệnh điều kiện if 5) câu lệnh lặp: for, while 6) chương trình (hàm thủ tục) Nhiệm vụ trước tiên phải biết luật cú pháp ngơn ngữ mà định xây dựng chương trình cho Với chuỗi từ tố tập luật cú pháp ngôn ngữ, phân tích cú pháp tự động đưa cú pháp cho chuỗi nhập Khi cú pháp xây dựng xong q trình phân tích cú pháp chuỗi nhập kết thúc thành cơng Ngược lại phân tích cú pháp áp dụng tất luật có xây dựng cú pháp chuỗi nhập thơng báo chuỗi nhập khơng viết cú pháp Chương trình phải phân tích chương trình nguồn thành cấu trúc cú pháp ngôn ngữ, từ để kiểm tra tính đắn mặt ngữ pháp chương trình nguồn 3) Phân tích ngữ nghĩa: Phân tích đặc tính khác chương trình mà khơng phải đặc tính cú pháp Kiểm tra chương trình nguồn để tìm lỗi cú pháp hợp kiểu Dựa cú pháp phân tích ngữ nghĩa xử lý phép tốn Mỗi phép tốn kiểm tra toán hạng loại liệu chúng có phù hợp với phép tốn khơng VD: tên (biến) khai báo kiểu real, 60 số kiểu interge trình biên dịch đổi thành số thực 60.0 - Ngữ nghĩa: ngôn ngữ lập trình liên quan đến: + Kiểu, phạm vi biến + Phân biệt sử dụng tên hằng, tên biến, tên hàm Chương trình dịch phải kiểm tra tính đắn sử dụng đại lượng Ví dụ kiểm tra khơng cho gán giá trị cho hằng, kiểm tra tính đắn gán kiểu, kiểm tra phạm vi, kiểm tra sử dụng tên tên không khai báo trùng, dùng cho gọi hàm phải tên có thuộc tính hàm, 4) Sinh mã trung gian: Sinh chương trình rong ngôn ngữ trung gian nhằm: dễ sinh tối ưu mã dễ chuyển đổi mã máy sau giai đoạn phân tích mã trung gian sinh sau: temp1 := 60 temp2 := id3 * temp1 temp3 := id2 + temp id1 := temp3 (1.2) (trong id1 position; id2 initial id3 rate) 5) Tối ưu mã: Sửa đổi chương trình ngơn ngữ trung gian hằm cải tién chương trình đích hiệu Ví dụ với mã trung gian (1.2), làm tốt đoạn mã để tạo mã máy chạy nhanh sau: temp1 := id3 * 60 id1 := id2 + temp1 (1.3) 6) Sinh mã: tạo chương trình đích từ chương trình ngơn ngữ trung gian đẫ tối ưu Thông thường sinh mã máy hay mã hợp ngữ Vấn đề định việc gán biến cho ghi Chẳng hạn sử dụng ghi R1 R2, thị lệnh MOVF, MULF, ADDF, sinh mã cho (1.3) sau: MOVF id3, R2 MULF #60, R2 MOVF id2, R1 ADDF R2, R1 MOVF R1, id1 (1.4) Ngoài ra, chương trình dịch cịn phải thực nhiệm vụ: * Quản lý bảng ký hiệu: Để ghi lại kí hiệu, tên … sử dụng chương trình nguồn thuộc tính kèm theo kiểu, phạm vi, giá trị để dùng cho bước cần n Rút gọn sơ đồ thay t¬ng øng CS 3240 Homework I Scanning and Parsing Let us consider the language of arithmetic expressions The alphabet of this language is the set {+, -, *, /, (, ), x, y, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9} Note commas are not a part of the alphabet in the above set – they are only shown to separate elements of the set That is, strings in this language can be composed only by using one or more of the following + - * / ( ) x y The tokens in this language are of the following classes MOPER: * / AOPER: + CONS : Strings made of through VAR : x y OPARAN : ( CPARAN : ) Consider a compiler that scans and parses the language of arithmetic expressions Question 1: As you scan the following expression from left to right, list the tokens and the token class identified by the scanner for each of the arithmetic expressions below Identify, explain and clearly mark the errors if any (30 points) a b c d e ( x ( y x * y * (20 * + ) ( + ( y 100 + ( x x * + * / + 100 ) + y – ( x + y – 320 ) ) x + ( + x^3 ) / y ) 100 - y 100 / 30y3 ) The grammar for the language of arithmetic expressions is as follows → → → → AOPER → → MOPER → OPARAN CPARAN VAR CONS Question 2: What are the terminals and non-terminals in this grammar? (10 points) Question 3: For each of the expressions below, scan it from left to right; list the tokens returned by the scanner and the rules used by the parser (showing appropriate expansions of the non-terminals) for matching (40 points) a b c d e a b c d e Identify, ( ( ( ( ( x y x x x + * * + + y ( y ( explain ) x y ) y ) + * – and clearly mark the errors if any + 10 10 ) ) ( y + z ) ( ) ) Question 4: You are asked the count the number of constants (CONS), variables (VAR) and MOPER in an expression Insert action symbols in the grammar described before Question 2, explain what semantic actions they trigger and what each semantic action does (20 points) Regular Expressions Question 1: Consider the concept of “closure” A set S is said to be closed under a (binary) operation ⊕ if and only if applying the operation to two elements in the set results in another element in the set For example, consider the set of natural numbers N and the “+” (addition) operation If we add any two natural numbers, we get a natural number Formally x, y are elements of N implies x + y is an element of N State true or false and explain why a Only infinite sets (sets with infinite number of elements, like the set of natural numbers) can be closed b Infinite sets are closed under all operations c The set [a-z]* is closed under concatenation operation Question 2: For each of the regular expressions below, state if they describe the same set of strings (state if they are equivalent) If they are equivalent, what is the string they describe? [a-z][a-z]* and [a-z]+ [a-z0-9]+ and [a-z]+[0-9]+ [ab]?[12]? [ab12]+ and a|b|1|2|[ab12]* [-az]* and [a-z]* [abc]+ and [cba]+ and a1|b1|a2|b2 [a-j][k-z] and [a-z] Question 3: For each of the strings described below, write a regular expression that describes them and draw a finite automaton that accepts them 1 The string of zero or more a followed by three b followed zero or more c 2 b The string of zero or more a, b and c but every a is followed by two or more 3 All strings of digits that represent even numbers 4 All strings of a’s and b’s that contain no three consecutive b’s 5 All strings that can be made from {0, 1} except the strings 11 and 111 Question 1: Pumping Lemma and Regular Languages You can use the pumping lemma and the closure of the class of regular languages under union, intersection and complement to answer the following question Proofs should be rigorous Note that for each of the questions below, you may or may not have to use the pumping lemma Note that the notation 0m means “0 repeated m times” So the language of strings of the form 0m such that m ¡Ý would contain strings like the null string 0, 00, 000, … (this is [0]* Whereas the language of strings of the form 0m such that m ¡Ý would be [0]+) a Is the language of strings of the form 0m1n0m such that m, n ¡Ý regular? If it is regular, prove that it is regular If it is not regular, prove that is not regular Note that, a rigorous proof is needed General reasoning or explanations that are not rigorous will not get full credit (15 points) b Consider a language whose alphabet is from the set {a, b} Is the language of palindromes over this alphabet regular? If it is regular, prove that it is regular If it is not regular, prove that is not regular Note that, a rigorous proof is needed General reasoning or explanations that are not rigorous will not get full credit (15 points) Hint: A palindrome is a word such that when read backwards, is the same word For example the word “mom” when read left to right is the same as it is when it is read right to left In general, the first half, when reversed, yields the second half If the length of the string is odd, the middle character is left as it is For example, consider the word “redivider” Reversing “redi” yields “ider” and “v” is left as it is For strings with alphabet {a, b}, “aaabaaa” is a palindrome but “abaaa” is not c A language, whose alphabet is {a, b}, such that the strings of the language contain equal number of “ab” and “ba” Note that “aba” is part of the language, because the first letter and the second letter form “ab” and the second and third form “ba” Is this language regular? If it is regular, prove that it is regular If it is not regular, prove that is not regular Note that, a rigorous proof is needed General reasoning or explanations that are not rigorous will not get full credit (15 points) d The class of regular languages is closed under union That is of A is a regular language and B is a regular language, then C is a regular language, where C = A B Note that B C (B is a subset of C) Let D be some subset of C (that is, D C) In general, is D regular? If it is regular, prove that it is regular If it is not regular, prove that is not regular Note that, a rigorous proof is needed General reasoning or explanations that are not rigorous will not get full credit (15 points) Question 2: Consider the language described by the regular expression a+b*a, the set of all strings that has one or more a’s followed by zero or more b’s and ending in a single a a Construct a NFA which recognizes this language Note that you need to construct a primitive NFA using the constructions describe in class (10 points) b Convert the above NFA to a DFA using closure Clearly indicate the steps of closure (20 points) c Convert the above DFA to an optimized DFA (10 points) HomeWork Work on the homework individually Do not collaborate or copy from others The homework is due on Tuesday, April 24 In Class No late submissions will be entertained Do not email your answers to either the Professor or the TA Emailed answers will not be considered for evaluation Question (50 Points) Consider the following grammar Construct LR(0) items, DFA for this grammar showing LR(0) shiftreduce table Is this grammar LR(0)? Indicate all possible shift-reduce as well as reduce-reduce conflicts Using the concept of look-ahead, generate SLR(1) table – which LR(0) conflicts get eliminated? Using the input (ID + ID) * ID show the SLR(1) parse - show the stack states and shifts and reductions as shown in the examples in the Louden book Grammar: E' -> E E -> E + T E -> T T -> T * ID T -> ID T -> (E) Question (50 Points) Construct a pushdown automaton for the following language: L = { aibjck | i, j, k >= 0, either i = j or j = k} Practice Q #1 Design a Turing machine for recognizing the language (please give a formal description including tape alphabet, full state transition diagram identifying the acceptance and rejection states if any) L = {an bn cn | n >= 0} L = { w | w contains twice as many 0's as 1's, w is made from {0,1}* } Q #2 Design a Turing machine to perform multiplication of two natural numbers represented as the number of zeroes For example, number five is represented as 00000 Hint: Use repeated addition Q #3 Design LR(0) items, their DFA and SLR(1) parse table for the following grammar showing the parse for the following input : ((a), a, (a, a)) Also show the parse tree obtained Is this a LR(0) grammar? If not show the conflicts and show how you can resolve them through SLR(1) construction Grammar : E -> (L)| a L -> L, E| E Q #4 Design Context free grammars for the following languages (alphabet is {0,1}) a {w | w starts and ends with the same symbol (either or 1, which is the alphabet)} b {w | w = wr ie, w is a palindrome} c {ai bj ck | i = j or j = k, i, j, k >= 0} Q #5 Design pushdown automata (PDA) for the following language: {w | w has odd length and the middle character is 0} Q #6 Show first, follow and predict sets for the following grammar after removing left recursion and left factoring: E -> E + T E -> T T -> T * P T -> P P -> (E) P -> ID Q # Using the pumping lemma show that the following languages are not regular: {0m 1n | m not equal to n} {02n | n >= 0} Q #8 Design NFA, DFA and minimize the DFA for the regular expression: 0*1*0*0 Test Question 1: DFAs (Choose any three questions out of five: 30 points) Devise DFAs for: All strings that start with must end with a and those which start with must end with (alphabet of this language is {0,1}), no null string All strings from the alphabet {a, b} which contain an odd number of a’s and even (but non-zero) number of b’s All strings that must have 0110 as the substring (alphabet {0,1}) All strings which have a length greater than or equal to and ending on b or two consecutive a’s Strings that not contain consecutive a’s Question 2: Regular expressions (Choose any three questions out of five: 30 points) Write regular expressions for: Expressions that enumerate all positive integers (including 0) upto 100000 but without any leading zeroes Strings made from {a, b} that start and end on the same letter (ie, strings starting with a end on a and those starting with b end on b) Floats using decimal point representation with integer and fractional parts – no leading or trailing zeros and precision upto places after decimal Identifiers that start with a digit or lowercase letter following which one can optionally have one or more of digits or letters or underscores Identifiers can not end on an underscore (consecutive underscores ok though) Positive integers no leading zeros in which all 2’s should occur only after 3’s and all 1’s should occur only after 2’s (ie, no should occur before a or no should occur before a 2) Question 3: Regular Expression NFA DFA (30 points) Convert the following regular expression into a NFA and convert the NFA to DFA showing the key steps (such as computing å-closures of sets of states etc.) : b[ab]* Show all possible NFA transitions (using parallel tree) for the string babba and verify the state transitions in corresponding DFA Question 4: State True or False (10 points) a Consider a language S=(a|b)* Consider a Regular Language L, whose alphabet is from the set = {a, b} Let M be a DFA that Recognizes L Let M' be a DFA obtained from M by changing all accepting states of the M into non-accepting states, and by changing all non-accepting states of M to accepting states M' recognizes the complement of language L given by S – L b For every NFA and its equivalent DFA, the number of states in equivalent DFA must be at least equal to the number of states in the NFA c Consider languages L and L’ such that L L’ Let M be a DFA that recognizes L and M’ be DFA that recognizes L’ then the number of states in M’ must be equal to or greater than those in M d Consider languages L and L’ such that L L’ Let M be a DFA that recognizes L and M’ be DFA that recognizes L’ then the number of states in M’ must be lesser than or equal to those in M e For every regular expression there can exist more than one DFA that recognizes the language described by the regular expression Tesst Project Notes: This project has two phases Phase is due by April 14th by 5pm Phase is due by April 28th by 5pm There will be no extensions for either phases You will work in groups of three Each group should submit a report and source code for each phase If multiple source files, they must be tarred along with the makefile You can program in C, C++ or Java Do not use tools (like lex and yacc) or the standard template library Code should be properly documented with meaningful variable and function names Short elegant code will get bonus points You will find the course slides on DFA/NFA/scanner/recursive descent parser useful Each phase of the project is worth 100 points The bonus section is worth 50 points Phase 1: Objective: To write a scanner and parser which can construct and execute an NFA for any regular expression Consider the language of regular expressions The alphabet of this language is the set {a, b, *, +, (, ), , |} (commas and spaces are not part of the language) Using this alphabet one can write any regular expression Our goal in this project is to be able to read any regular expression described by the following grammar and construct primitive NFAs and join them together to form a NFA that will recognize strings described by the regular expression We will this step by step by developing answers to the following questions The production rules for this language are given by R R* R R+ R (R) R (R | R) R R.R R.a R.b Question 1: Rewrite the grammar to remove left recursion Question 2: Identify the tokens of this language and write a scanner program which can scan this language and return tokens Question 3: Write a recursive descent parser which can parse this language (based on the modified grammar which removed left recursion) and yield a parse tree Note that this grammar has implicit precedence That is for a regular expression, a.b* the “*” operates on “b” and not a.b as a whole This is true unless it is bracketed In, (a.b)* on the other hand, the “*” operates on (a.b) When you build a parse tree you must take care of such precedences Question 4: Now you need to write a program which can construct a NFAs based on the parse tree based on primitive NFAs As discussed in class, primitive NFAs should be joined together to form NFA for the complete regular expression This final NFA will be represented as an adjacency matrix described below Thus the output of this program should be an adjacency matrix Adjacency matrix: Any NFA is a directed graph A directed graph G consists of a set of nodes (in our case states) and directed edges (in our case, transitions) For example, in the graph below, A,B,C are nodes and 1,2,3 are edges A B C 12 Any directed graph can be represented by an adjacency matrix For example, the matrix below represents the graph Since edge “1” connects A to B, there is a “1” in the row corresponding to “A” and the column corresponding to “B” ABC A13 B2 C Similarly an NFA can be represented by an adjacency matrix Note that more than one element can be present in a cell For example, in the NFA if the edge from A to B is labeled a,b then you would have both “a” and “b” in the corresponding cell Question 5: Given such an adjacency matrix of an NFA and given an input string consisting of a’s and b’s write a program to simulate the NFA and output if the string is accepted or rejected Note : NFAs can progress on multiple paths and you should simulate this effect – if one of the paths results in accept state then the input string is accepted by NFA Phase 2: To write a program which will construct a DFA from any NFA You will use adjacency matrix as the representation and use epsilon closures to generate DFA Finally write a program to simulate the DFA Bonus: Given an adjacency matrix for a DFA, write a program to produce minimal DFA by state merging ... nhiên Vì ta cần có chương trình để dịch chương trình ngơn ngữ sang mã máy để chạy Những chương trình làm nhiệm vụ gọi chương trình dịch Ngồi ra, chương trình dịch cịn chuyển chương trình từ ngơn ngữ... chương trình dịch: Chương trình dịch chương trình thực việc chuyển đổi chương trình hay đoạn chương trình từ ngơn ngữ (gọi ngơn ngữ nguồn) sang ngôn ngữ khác (gọi ngôn ngữ đích) tương đương chương. .. vào chương trình dịch kí tự chương trình nguồn thực tế, trước đầu vào chương trình dịch, tồn file nguồn qua chí vài bọo tiền xử lý Sản phẩm tiền xử lý chương trình nguồn thực chương trình dịch

Ngày đăng: 18/08/2012, 09:00

Hình ảnh liên quan

Bảng ký hiệu - GIÁO TRÌNH MÔN CHƯƠNG TRÌNH DỊCH

Bảng k.

ý hiệu Xem tại trang 16 của tài liệu.
<tờn, con trỏ trỏ đến initial trờn bảng kớ hiệu> <phộp cộng, > - GIÁO TRÌNH MÔN CHƯƠNG TRÌNH DỊCH

lt.

;tờn, con trỏ trỏ đến initial trờn bảng kớ hiệu> <phộp cộng, > Xem tại trang 18 của tài liệu.
hàm chuyển trạng thỏi được mụ tả bởi bảng sau: - GIÁO TRÌNH MÔN CHƯƠNG TRÌNH DỊCH

h.

àm chuyển trạng thỏi được mụ tả bởi bảng sau: Xem tại trang 25 của tài liệu.
2.2.2. Lập bộ phõn tớch từ vựng bằng bảng. - GIÁO TRÌNH MÔN CHƯƠNG TRÌNH DỊCH

2.2.2..

Lập bộ phõn tớch từ vựng bằng bảng Xem tại trang 28 của tài liệu.
Bảng ký hiệutừ tố - GIÁO TRÌNH MÔN CHƯƠNG TRÌNH DỊCH

Bảng k.

ý hiệutừ tố Xem tại trang 33 của tài liệu.
Đặt tất cả cỏc vị trớ chưa được định nghĩa trong bảng là “lỗi”. - GIÁO TRÌNH MÔN CHƯƠNG TRÌNH DỊCH

t.

tất cả cỏc vị trớ chưa được định nghĩa trong bảng là “lỗi” Xem tại trang 49 của tài liệu.
Giải thuật trờn cú thể ỏp dụng bất kỳ văn phạm G nào để sinh ra bảng phõn tớch M. Tuy nhiờn cú những văn phạm ( đệ quy trỏi và nhập nhằng) thỡ trong bảng  phõn tớch M cú những ụ chứa nhiềuhơn một luật sinh. - GIÁO TRÌNH MÔN CHƯƠNG TRÌNH DỊCH

i.

ải thuật trờn cú thể ỏp dụng bất kỳ văn phạm G nào để sinh ra bảng phõn tớch M. Tuy nhiờn cú những văn phạm ( đệ quy trỏi và nhập nhằng) thỡ trong bảng phõn tớch M cú những ụ chứa nhiềuhơn một luật sinh Xem tại trang 49 của tài liệu.
* Định nghĩa: Văn phạm LL(1) là văn phạm xõy dựng được bảng phõn tớc hM cú cỏc ụ chỉ được định nghĩa nhiều nhất là một lần. - GIÁO TRÌNH MÔN CHƯƠNG TRÌNH DỊCH

nh.

nghĩa: Văn phạm LL(1) là văn phạm xõy dựng được bảng phõn tớc hM cú cỏc ụ chỉ được định nghĩa nhiều nhất là một lần Xem tại trang 50 của tài liệu.
c) xõy dựng bảng phõn tớch LL(1) cho văn phạm trờn - GIÁO TRÌNH MÔN CHƯƠNG TRÌNH DỊCH

c.

xõy dựng bảng phõn tớch LL(1) cho văn phạm trờn Xem tại trang 52 của tài liệu.
Input: Một chuỗi nhập w, một bảng phõn tớch LR với hàm action và goto cho văn phạm G. - GIÁO TRÌNH MÔN CHƯƠNG TRÌNH DỊCH

nput.

Một chuỗi nhập w, một bảng phõn tớch LR với hàm action và goto cho văn phạm G Xem tại trang 55 của tài liệu.
Giả sử chỳng ta đó xõy dựng được bảng phõn tớch action và goto như sau: - GIÁO TRÌNH MÔN CHƯƠNG TRÌNH DỊCH

i.

ả sử chỳng ta đó xõy dựng được bảng phõn tớch action và goto như sau: Xem tại trang 56 của tài liệu.
Bảng phõn tớch cỳ phỏp - GIÁO TRÌNH MÔN CHƯƠNG TRÌNH DỊCH

Bảng ph.

õn tớch cỳ phỏp Xem tại trang 56 của tài liệu.
Tiếp tục theo cỏch này, ta thu được bảng phõn tớch cỳ phỏp SLR: - GIÁO TRÌNH MÔN CHƯƠNG TRÌNH DỊCH

i.

ếp tục theo cỏch này, ta thu được bảng phõn tớch cỳ phỏp SLR: Xem tại trang 65 của tài liệu.
Bảng phõn tớch xỏc định bởi giải thuật 4.7 gọi là bảng SLR(1) của văn phạm G, bộ phõn tớch LR sử dụng bảng SLR(1) gọi là bộ phõn tớch SLR(1) và văn phạm cú một bảng SLR(1)  gọi là văn phạm SLR(1). - GIÁO TRÌNH MÔN CHƯƠNG TRÌNH DỊCH

Bảng ph.

õn tớch xỏc định bởi giải thuật 4.7 gọi là bảng SLR(1) của văn phạm G, bộ phõn tớch LR sử dụng bảng SLR(1) gọi là bộ phõn tớch SLR(1) và văn phạm cú một bảng SLR(1) gọi là văn phạm SLR(1) Xem tại trang 65 của tài liệu.
* Thuật toỏn xõy dựng bảng phõn tớch cỳ phỏp LR chớnh tắc - GIÁO TRÌNH MÔN CHƯƠNG TRÌNH DỊCH

hu.

ật toỏn xõy dựng bảng phõn tớch cỳ phỏp LR chớnh tắc Xem tại trang 67 của tài liệu.
Bảng phõn tớch xỏc định bởi giải thuật 4.9 gọi là bảng phõn tớch LR(1) chớnh tắc của văn phạm G, bộ phõn tớch LR sử dụng bảng LR(1) gọi là bộ phõn tớch LR(1) chớnh tắc và văn phạm cú một   bảng LR(1) khụng cú cỏc action đa trị thỡ được gọi là văn phạm LR( - GIÁO TRÌNH MÔN CHƯƠNG TRÌNH DỊCH

Bảng ph.

õn tớch xỏc định bởi giải thuật 4.9 gọi là bảng phõn tớch LR(1) chớnh tắc của văn phạm G, bộ phõn tớch LR sử dụng bảng LR(1) gọi là bộ phõn tớch LR(1) chớnh tắc và văn phạm cú một bảng LR(1) khụng cú cỏc action đa trị thỡ được gọi là văn phạm LR( Xem tại trang 68 của tài liệu.
Ta cú thể xõy dựng bảng phõn tớch cỳ phỏp LALR cho văn phạm như sau: - GIÁO TRÌNH MÔN CHƯƠNG TRÌNH DỊCH

a.

cú thể xõy dựng bảng phõn tớch cỳ phỏp LALR cho văn phạm như sau: Xem tại trang 70 của tài liệu.
- Mục M(A,a) trong bảng phõn tớch là lỗi (rỗng). - GIÁO TRÌNH MÔN CHƯƠNG TRÌNH DỊCH

c.

M(A,a) trong bảng phõn tớch là lỗi (rỗng) Xem tại trang 72 của tài liệu.
Phương phỏp phõn tớch bảng CYK (Cocke – Younger – Kasami) - GIÁO TRÌNH MÔN CHƯƠNG TRÌNH DỊCH

h.

ương phỏp phõn tớch bảng CYK (Cocke – Younger – Kasami) Xem tại trang 74 của tài liệu.
VD1: Dựa vào cõy phõn tớc h( nột đứt đoạn) và luật ngữ nghĩa ứng với sản xuất ở bảng, ta thờm cỏc nỳt và cạnh thành đồ thị phụ thuộc: - GIÁO TRÌNH MÔN CHƯƠNG TRÌNH DỊCH

1.

Dựa vào cõy phõn tớc h( nột đứt đoạn) và luật ngữ nghĩa ứng với sản xuất ở bảng, ta thờm cỏc nỳt và cạnh thành đồ thị phụ thuộc: Xem tại trang 82 của tài liệu.
Hành động ứng với sản xuất D→ Tờn:T lưu vào bảng kớ hiệu một kiểu cho một tờn. Hàm      {addtype (tờn.entry, T.type)} nghĩa là cất một thuộc tớnh T.type vào bản kớ hiệu ở vị trớ   entry. - GIÁO TRÌNH MÔN CHƯƠNG TRÌNH DỊCH

nh.

động ứng với sản xuất D→ Tờn:T lưu vào bảng kớ hiệu một kiểu cho một tờn. Hàm {addtype (tờn.entry, T.type)} nghĩa là cất một thuộc tớnh T.type vào bản kớ hiệu ở vị trớ entry Xem tại trang 104 của tài liệu.
* Nếu ghi trực tiếp tờn trong trường tờn của bảng thỡ: ưu điểm: đơn giản, nhanh. Nhược điểm: Độ dài tờn bị giới hạn bởi kớch thước của trường , hiệu quả sử dụng  bộ nhớ khụng cao - GIÁO TRÌNH MÔN CHƯƠNG TRÌNH DỊCH

u.

ghi trực tiếp tờn trong trường tờn của bảng thỡ: ưu điểm: đơn giản, nhanh. Nhược điểm: Độ dài tờn bị giới hạn bởi kớch thước của trường , hiệu quả sử dụng bộ nhớ khụng cao Xem tại trang 109 của tài liệu.
Trong bảng ký hiệu cũng cú thể cú lưu cỏc từ khúa của ngụn ngữ. Nếu vậy thỡ chỳng phải được đưa vào bảng ký hiệu trước khi bộ phõn tớch từ vựng bắt đầu. - GIÁO TRÌNH MÔN CHƯƠNG TRÌNH DỊCH

rong.

bảng ký hiệu cũng cú thể cú lưu cỏc từ khúa của ngụn ngữ. Nếu vậy thỡ chỳng phải được đưa vào bảng ký hiệu trước khi bộ phõn tớch từ vựng bắt đầu Xem tại trang 109 của tài liệu.
Hỡnh 7.2 0- Bảng ký hiệu lưu giữ cỏc tờn khụng bị giới hạn độ dài - GIÁO TRÌNH MÔN CHƯƠNG TRÌNH DỊCH

nh.

7.2 0- Bảng ký hiệu lưu giữ cỏc tờn khụng bị giới hạn độ dài Xem tại trang 110 của tài liệu.
3.3. Bảng Băm. - GIÁO TRÌNH MÔN CHƯƠNG TRÌNH DỊCH

3.3..

Bảng Băm Xem tại trang 111 của tài liệu.
Để trỏnh phải đưa cỏc tờn tạm thời vào bảng ký hiệu, chỳng ta cú thể tham chiếu đến một giỏ trị tạm bằng vị trớ của cõu lệnh dựng để tớnh nú (tham chiếu đến  cõu lệnh đú chớnh là tham chiếu đến con trỏ chứa bộ ba của cõu lệnh đú) - GIÁO TRÌNH MÔN CHƯƠNG TRÌNH DỊCH

tr.

ỏnh phải đưa cỏc tờn tạm thời vào bảng ký hiệu, chỳng ta cú thể tham chiếu đến một giỏ trị tạm bằng vị trớ của cõu lệnh dựng để tớnh nú (tham chiếu đến cõu lệnh đú chớnh là tham chiếu đến con trỏ chứa bộ ba của cõu lệnh đú) Xem tại trang 116 của tài liệu.
địa chỉ từ chương trỡnh nguồn là tập lệnh ba địa chỉ và bảng ký hiệu quản lý cỏc định danh. - GIÁO TRÌNH MÔN CHƯƠNG TRÌNH DỊCH

a.

chỉ từ chương trỡnh nguồn là tập lệnh ba địa chỉ và bảng ký hiệu quản lý cỏc định danh Xem tại trang 123 của tài liệu.

Từ khóa liên quan

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

Tài liệu liên quan