You are on page 1of 4

Quy ước là chỉ làm việc trên các văn phạm G không có đệ quy, số lượng NonTerminal

không quá 5 và không quá 10 luật.


I. Đề 1:
1. Viết chương trình tính FIRST bằng C/C++/Java với
- Input: Cần mô tả
- Mảng 2 chiều production[][] mô tả 1 luật
- Ký hiệu kết thúc xâu: $
- Ký hiệu ký tự rỗng: #
- 1 xâu đầu vào kiểu string đối với C/C++ hoặc String đối với Java
- Hàm tính First nhận bảng production
2. Viết chương trình tính FOLLOW bằng C/C++/Java
3. Sửa chương trình để nó tự động phát hiện văn phạm có là LL(1) hay không?
4. Cài đặt bộ phân tích LL(1)
5. Cài đặt bộ phân tích LR(1)
- Nhóm 1 cần làm việc với nhóm 2 và nhóm 3 viết trên C/C++
- Nhóm 4,5,6 làm lại đề trên với Java
Tham khảo:
Cho Thuật toán LL(1) dưới đây, Hãy cài đặt thuật toán bằng ngôn ngữ C/C++/Java. Test
thử 1 xâu đầu vào. Đưa ra cây cú pháp của xâu đó.
Input:
string ω
parsing table M for grammar G
Output:
If ω is in L(G) then left-most derivation of ω,
error otherwise.
Initial State : $S on stack (with S being start symbol)
ω$ in the input buffer
SET ip to point the first symbol of ω$.
repeat
let X be the top stack symbol and a the symbol pointed by ip.
if X∈ Vt or $
if X = a
POP X and advance ip.
else
error()
endif

else /* X is non-terminal */
if M[X,a] = X → Y1, Y2,... Yk
POP X
PUSH Yk, Yk-1,... Y1 /* Y1 on top */
Output the production X → Y1, Y2,... Yk
else
error()
endif
endif
until X = $ /* empty stack */
II. Đề 2:
6. Cho Thuật toán phân tích cú pháp Top-down có đệ quy

Cho Văn phạm G:


Cho Giải thuật RDP cho văn phạm G

Hãy:
1. Viết hàm next_token()
2. Viết hàm Expr()
3. Viết hàm Eprime()
4. Viết hàm Term()
5. Viết hàm Tprime()
6. Viết hàm Factor
Nhóm 7,8,9 viết chương trình bằng ngôn ngữ C/C++
Nhóm 10,11,12 viết chương trình bằng ngôn ngữ Java

You might also like