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.. 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ị
Trang 1Chươ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 )
1 G1 với P1: 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 G4 với P4: 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
Trang 2b 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ự đố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
Trang 3Bà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ự đố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 tồ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 = ({S0,A,B}, {id, true, false, if, then, else,=, ; }, P, S 0 , với tập luật sinh P như sau:
S0→ 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
Trang 4Chươ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] ]
Trang 5c) 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 ]