Chương 2 Bài 1. Cho văn phạm phi ngữ cảnh sau: (1) stmt → id := expr (2) expr → expr + expr | (3) expr ∗ expr | (4) id | (5) num a) Viết các luật sinh dẫn ra câu nhập: a := b + 10 + c*50 b) Xây dựng một cây phân tích cú pháp cho câu nhập trên ? Bài 2. Cho văn phạm G chứa các luật sinh sau: S → ( L) a L → L, S | S a) Hãy chỉ ra các thành phần của văn phạm phi ngữ cảnh cho G. b) Viết văn phạm tương ñương sau khi loại bỏ ñệ quy trái Bài 3. Cho văn phạm phi ngữ cảnh sau: S → id := E E → E + E | E ∗ E | id | num a) Viết các luật sinh dẫn ra câu nhập: t1:= t2 + t3*10 + 60 b) Xây dựng một cây phân tích cú pháp cho câu nhập trên? Bài 4. Cho văn phạm phi ngữ cảnh sau: S → S S + | S S * | a a) Viết các luật sinh dẫn ra câu nhập: a a + a * b) Xây dựng một cây phân tích cú pháp cho câu nhập trên? c) Văn phạm này sinh ra ngôn ngữ gì? Giải thích câu trả lời. Bài 5. Ngôn ngữ gì sinh ra từ các văn phạm sau? Văn phạm nào là văn phạm mơ hồ? a) S → 0 S 1 | 0 1 b) S → + S S | - S S | a c) S → S ( S ) S | ε d) S → a S b S | b S a S | ε e) S → a | S + S | S S | S * | ( S ) Bài 6. Cho các Văn phạm: 1. G 1 với P 1 : S → SS | aSb | bSa | ab| ba. 2. G 2 với P 2 : S→ aS | a. 3. G 3 với P 3 : S → aS | Sb | aSb| c. 4. G 4 với P 4 : S → SS | b | a. 5. G 5 với P 5 : S → aA | bB | c. A → Sa B → Sb. Hãy: a. Viết lại từng Văn phạm dưới dạng ñầy ñủ theo ñịnh nghĩa. b. Tìm các ngôn ngữ do các Văn phạm trên sinh ra. Chương 3 Bai 1. Hãy xác ñịnh các trị từ vựng có thể hình thành các token trong các ñoạn chương trình sau: a. PASCAL function max (i, j :integer) : integer; { Trả về số nguyên lớn hơn trong 2 số i và j } begin i > j then max : = i else max : = j; end; b. C int max (i, j) int i, j; /* Trả về số nguyên lớn hơn trong 2 số i và j */ { return i > j ? i : j } Bài 2. Viết một chương trình Lex sao chép một tập tin, thay các chuỗi khoảng trắng thành một khoảng trắng duy nhất. Bài 3. Viết một ñặc tả Lex cho các token của ngôn ngữ Pascal và dùng trình biên dịch Lex ñể xây dựng một bộ phân tích từ vựng cho Pascal. Chương 4 Bài 1. Cho văn phạm G chứa các luật sinh sau: S → ( L) | a L → L , S | S a) Hãy chỉ ra các thành phần của văn phạm phi ngữ cảnh cho G. b) Viết văn phạm tương ñương sau khi loại bỏ ñệ quy trái . c) Xây dựng bộ phân tích cú pháp dự ñoán cho văn phạm. d) Hãy dùng bộ phân tích cú pháp ñã ñược xây dựng ñể vẽ cây phân tích cú pháp cho các câu nhập sau: i) (a, a) ii) (a, (a, a)) iii) (a, (a, a), (a, a))) Bài 2. Cho văn phạm G chứa các luật sinh sau: S → aSbS | bSaS | ε a) Chứng minh văn phạm này là mơ hồ bằng cách xây dựng 2 chuỗi dẫn xuất trái khác nhau cho cùng câu nhập abab. b) Xây dựng các chuỗi dẫn xuất phải tương ứng cho câu nhập abab. c) Vẽ các cây phân tích cú pháp tương ứng. Bài 3. Cho văn phạm G chứa các luật sinh sau: bexpr → bexpr or bterm | bterm bterm → bterm and bfactor | bfactor bfactor → not bfactor | (bexpr) | true | false a) Hãy xây dựng bộ phân tích cú pháp dự ñoán cho văn phạm G. b) Xây dựng cây phân tích cú pháp cho câu : not ( true and false ) c) Chứng minh rằng văn phạm này sinh ra toàn bộ các biểu thức boole. d) Văn phạm G có là văn phạm mơ hồ không ? Tại sao ? Bài 4. Cho văn phạm sau: G ({expr, term, factor}, {or, and, not, true, false}, P, expr) P = { expr → expr or term | term term → term and factor | factor factor → not factor | (expr) | true | false } a. Hãy vẽ sơ ñồ cú pháp cho các ký hiệu không kết thúc. b. Viết chương trình cho sơ ñồ cú pháp tổng quát expr của câu a. Bài 5. Cho văn phạm G = ({S 0 ,A,B}, {id, true, false, if, then, else,=, ; }, P, S 0 , với tập luật sinh P như sau: S 0 → S S → if B then S | if B then S else S | A; B → true | false A → id | A = id a. Hãy vẽ sơ ñồ cú pháp cho các ký hiệu không kết thúc. b. Viết chương trình cho sơ ñồ cú pháp A. Bài 6. Cho văn phạm G = ({S,A,B,C}, {a, b, c}, P, S) với tập luật sinh P như sau: S → ABC A → bA|B|a B → Ba|bC|ba C → B|cba|ca|c Hãy tính FIRST, FOLLOW cho tất cả các ký hiệu không kết thúc của văn phạm. Bài 7. Cho văn phạm G = ({S,A,B,C}, {a, b, c}, P, S) với tập luật sinh P như sau: S → ABC A → bA|B|a B → Ba|bC|ba C → B|cba|ca|c Hãy tính FIRST, FOLLOW cho tất cả các ký hiệu không kết thúc của văn phạm Chương 5 Bài 1. Xây dựng một cây phân tích cú pháp chú thích cho biểu thức số học sau: (4 * 7+ 1) * 2 Bài 2. Xây dựng một cây phân tích cú pháp và cây cú pháp cho biểu thức ((a) + (b)) theo: a) Ðịnh nghĩa trực tiếp cú pháp cho biểu thức số học. b) Lược ñồ dịch cho biểu thức số học. Bài 3. Xây dựng một DAG cho các biểu thức sau ñây: a) a + a + ( a+ a + a + ( a+ a+ a+ a)) b) x *( 3 *x + x * x) Bài 4. Cho văn phạm sinh ra các dòng text như sau: S → L L → L B | B B → B sub F | F F → { L } | text a) Xây dựng một ñịnh nghĩa trực tiếp cú pháp cho văn phạm. b) Chuyển ñịnh nghĩa trực tiếp cú pháp trên thành lược ñồ dịch. c) Loại bỏ ñệ quy trái trong lược ñồ dịch vừa xây dựng. Chương 7 Bài 1. Dịch biểu thức : a * - ( b + c) thành các dạng: a) Cây cú pháp. b) Ký pháp hậu tố. c) Mã lệnh máy 3 - ñịa chỉ. Bài 2. Trình bày cấu trúc lưu trữ biểu thức - ( a + b) * ( c + d ) + ( a + b + c) ở các dạng: a) Bộ tứ . b) Bộ tam. Bài 3. Sinh mã trung gian ( dạng mã máy 3 - ñịa chỉ) cho các biểu thức C ñơn giản sau: a) x = 1 b) x = y c) x = x + 1 d) x = a + b * c e) x = a / ( b + c) - d * ( e + f ) Bài 4. Sinh mã trung gian ( dạng mã máy 3 - ñịa chỉ) cho các biểu thức C sau: a) x = a [i] + 11 b) a [i] = b [ c[j] ] c) a [i][j] = b [i][k] * c [k][j] d) a[i] = a[i] + b[j] e) a[i] + = b[j] Bài 5. Dịch lệnh gán sau thành mã máy 3 - ñịa chỉ: A [ i,j ] := B [ i,j ] + C [A[ k,l]] + D [ i + j ] . Bài 2. Viết một chương trình Lex sao chép một tập tin, thay các chuỗi khoảng trắng thành một khoảng trắng duy nhất. Bài 3. Viết một ñặc tả Lex cho các token của ngôn ngữ Pascal và dùng trình. Chuyển ñịnh nghĩa trực tiếp cú pháp trên thành lược ñồ dịch. c) Loại bỏ ñệ quy trái trong lược ñồ dịch vừa xây dựng. Chương 7 Bài 1. Dịch biểu thức : a * - ( b + c) thành các dạng: a). kết thúc. b. Viết chương trình cho sơ ñồ cú pháp tổng quát expr của câu a. Bài 5. Cho văn phạm G = ({S 0 ,A,B}, {id, true, false, if, then, else,=, ; }, P, S 0 , với tập luật sinh P như sau: