Tải bản đầy đủ (.pdf) (5 trang)

Bài tập trình biên dịch doc

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (49.48 KB, 5 trang )

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 ]


×