Bài tập
Trang 1HỌC VIỆN KỸ THUẬT QUÂN SỰ KHOA CÔNG NGHỆ THÔNG TIN
BỘ MÔN KHOA HỌC MÁY TÍNH
TÀI LIỆU HƯỚNG DẪN LÀM ĐỒ ÁN MÔN HỌC
LÝ THUYẾT CHƯƠNG TRÌNH DỊCH
Giảng viên: Hà Chí Trung
Hà nội, 2013
Trang 2I Thực hiện đồ án
Thực hiện đồ án bao gồm 2 phần: phần viết chương trình đồ án (với các bài tập lập trình) và phần viết báo cáo đồ án
I.1 Xây dựng chương trình đồ án (với các bài tập lập trình)
Yêu cầu xây dựng chương trình:
Sử dụng một trong các ngôn ngữ lập trình như C, C++, C#.net, Delphi, Visual Basic.net hoặc một ngôn ngữ khác Khuyến khích sử dung giao diện winforms
Chương trình cho phép nhập trực tiếp dữ liệu ( ví dụ, dưới dạng bảng…) từ bàn phím hoặc từ file, đảm bảo dễ sử dụng;
Code chương trình cần chú giải rõ ràng các lớp, các hàm, các biến chính được
sử dụng
I.2 Viết tiểu luận báo cáo (áp dụng với các bài tập lý thuyết và lập trình)
Viết tiểu luận của đồ án môn (dưới dạng tiểu luận ở định dạng word hoặc slides trình chiếu) phải thể hiện được các phần sau:
1 Trang bìa, thể hiện tên trường, tên đề tài, người hướng dẫn, tên người thực hiện, lớp, ngày hoàn thành (trên 1 slide)
2 Mục lục, thể hiện tên các đề mục, nội dung chính đã làm được (trên 1 slide)
3 Đặt vấn đề: mục đích của việc giải quyết bài tập được giao Nêu và phân tích các vấn đề cần giải quyết của đề tài được giao (ngắn gọn, 1-2 slide)
4 Nêu các kiến thức l{ thuyết liên quan trực tiếp đến đề tài được giao (khái niệm, thuật toán, không quá 3 trang A4 hay 5 slides)
5 Nêu rõ cấu trúc của chương trình, các moduls, các class hay cấu trúc được xây dựng, các hàm cơ bản được sử dụng (thể hiện ngắn gọn, nêu rõ { nghĩa của các hàm, đầu vào, đầu ra – không quá 2 trang giấy A4)
6 Thể hiện bằng sơ đồ khối các bước giải quyết công việc, hoặc sơ đồ thuật toán làm việc của chương trình (trình bày ngắn gọn trên khoảng 1 trang giấy A4)
7 Thể hiện giao diện chính của chương trình, màn hình nhập dữ liệu ban đầu và màn hình kết quả trả về (không quá 2 trang giấy A4)
8 Phụ lục: toàn bộ hoặc 1 phần demo code chính của chương trình có chú giải
rõ ràng (toàn bộ không quá 2 trang giấy A4)
9 Tài liệu tham khảo (nếu có, bao gồm các các sách được tham khảo, website, các code mã nguồn mở được sử dụng (toàn bộ không quá 1 trang giấy A4)
Trang 3Tổng cộng tiểu luận của đồ án môn được viết trên không quá 15 trang giấy A4 (không quá 20 slides) Sinh viên không nhất thiết phải đóng bìa mềm cho tiểu luận nhưng cần liên kết chúng với nhau nhằm tránh lộn xộn, mất trang
II Trả đồ án
Khi trả đồ án, sinh viên cần mang theo mã nguồn chương trình đã viết, mã đã
được biên dịch, bản mềm tiểu luận của đồ án (hoặc bản in), máy tính cá nhân (nếu
cần thiết cho báo cáo chương trình) Sinh viên có thể trả trước ngày quy định nếu tập hợp được một nhóm từ 3 đồ án trở lên, khi đó có thể thông qua lớp trưởng hoặc
tự liên hệ với giáo viên qua điện thoại, email (địa điểm tại bộ môn KHMT khoa CNTT,
tầng 2 nhà A1) để giáo viên bố trí thời gian nhận đồ án
Đồ án được chấp nhận khi và chỉ khi chương trình hoạt động đúng, có tiểu luận kèm theo
Cách tính điểm đồ án (áp dụng với phần bài tập):
Chương trình làm việc chính xác, thuật toán đúng đắn – 3 điểm
Giao diện dễ sử dụng, thân thiện và thể hiện tốt đồ họa – 3 điểm
Code chương trình được viết có cấu trúc mạch lạc, rõ ràng, thể hiện chú thích miêu tả - 2 điểm
Tiểu luận thể hiện rõ ràng, sạch sẽ, bố cục hợp l{, thể hiện được các công thức (nếu có), hình vẽ (sơ đồ làm việc), hình minh họa – 2 điểm
Cách tính điểm đồ án (áp dụng với phần l{ thuyết):
Hiểu đúng các nội dung trong đề tài l{ thuyết được giao – 3 điểm
Thực hiện được theo từng bước thông qua ví dụ – 3 điểm
Trả lời đúng các câu hỏi liên quan đến đề tài - 2 điểm
Tiểu luận thể hiện rõ ràng, sạch sẽ, bố cục hợp l{, thể hiện được các công thức (nếu có), hình vẽ (sơ đồ làm việc), hình minh họa – 2 điểm
Tổng cộng: không quá 10 điểm
Trang 4DANH SÁCH CÁC ĐỀ BÀI TẬP
I Nhóm bài tập lý thuyết
1
Tìm hiểu các thuật toán xây dựng DFA từ một biểu thức chính quy
sử dụng thuật toán biến đổi trực tiếp, dùng biểu thức gia tố và
phương pháp đệ quy, dùng giải thuật Thompson
2
Xác định biểu thức chính quy biểu diễn cho ngôn ngữ đoán nhận
bởi một automata hữu hạn cho trước bằng phương pháp đệ quy
và phương pháp loại trừ dần các trạng thái
3
Vấn đề biến đổi một văn phạm bất kz thành văn phạm không
chứa yếu tố thừa (loại bỏ lần lượt và loại bỏ đồng thời ba loại luật
sinh vô dụng, trống và đơn vị) và đưa về dạng chuẩn Chomsky,
dạng chuẩn Greibach
4 Biến đổi một CFG về văn phạm không đệ quy trái và đưa về dạng
LL(1)
5 Tìm hiểu về automata đẩy xuống (PDA), biến đổi PDA về văn
phạm phi ngữ cảnh
6 Tìm hiểu về automata đẩy xuống (PDA), xây dựng PDA từ văn
phạm phi ngữ cảnh
7 Tìm hiểu phương pháp phân tích cú pháp CYK (Có mô phỏng các
bước tính toán và dẫn xuất)
8 Tìm hiểu phương pháp phân tích cú pháp Earley (Có mô phỏng
các bước tính toán và dẫn xuất)
9 Cho văn phạm sau: G={ S → AB; A → aA | ; B → bB | }
Lập bảng phân tích cho văn phạm trên Chỉ rõ các bước thực hiện
10 Cho văn phạm {S iEtSS’| a; S’ eS | b } Lập bảng
phân tích cho văn phạm trên Chỉ rõ các bước thực hiện
11
Cho văn phạm:
{E→TE’; E’→ +TE’ | ; T→FT’; T’→*FT’ | ; F→ (E) | a} Lập bảng
phân tích cho văn phạm trên Chỉ rõ các bước thực hiện
12
Cho văn phạm G có dạng như sau:
bexpr→bexpr or bterm | bterm
bterm→bterm and bfactor | bfactor
bfactor→ not bfactor | (bexpr) | true | false
Trong đó:
bexpr, bterm, bfactor là k{ hiệu không kết thúc
or, and, not, true, false, (, ) là k{ hiệu kết thúc
a Xây dựng bộ phân tích cú pháp từ trên xuống bằng cách
Trang 5TT Nội dung Sinh viên đăng ký
xây dựng bảng phân tích M
b Dựa theo câu (a) hãy trình bày quá trình phân tích cú pháp
cho câu nhập not true and (false or true)
13
Cho văn phạm G =<{not, true, false, or, and, (, )}, {bexpr , bterm,
bfactor}, bterm, P> P là tập các luật sinh như sau:
bexpr→bexpr or bterm | bterm
bterm→bterm and bfactor | bterm
bfactor→not bfactor | (bexpr) | true | false
Xây dựng bảng phân tích SLR cho văn phạm trên Áp dụng phân
tích cú pháp của câu:
not false or (true or false)
14
Cho văn phạm G =<{+, -, *, /, a, b, (, )}, {R}, R, P> P là tập các luật
sinh như sau:
R→R+R | R*R | R-R| R/R | (R) | a| b
Xây dựng bảng phân tích SLR cho văn phạm trên Áp dụng phân
tích cú pháp của câu: (a+b)/a-b*c
15
Cho văn phạm G như sau:
E →E +T |T
T →TF |F
F →F * | a | b
a) Xây dựng bảng phân tích cú pháp SLR cho văn phạm này
b) Thực hiện quá trình phân tích cúpháp SLR cho chuỗi nhập : b +
ab* a
16 Tìm hiểu tính năng InlineAutoComplete trong một số trình duyệt
và chương trình, tính năng tự động hoàn thiện câu lệnh
17 Tìm hiểu thuật toán KMP tìm xâu mẫu trong văn bản cho trước
18 Tìm hiểu vấn đề gán nhãn văn bản tiếng việt và một số phương
pháp gán nhãn văn bản (ít nhất 2 phương pháp)
19 Tìm hiểu vấn đề lập chỉ mục tài liệu trong các hệ thống tìm kiếm
và ít nhất 2 phương pháp lập chỉ mục
20 Tìm hiểu ít nhất 03 phương pháp tách từ tiếng Việt
21 Tìm hiểu ít nhất 03 phương pháp sắp xếp (ranking) tài liệu trả về
trong các máy tìm kiếm
II Nhóm bài tập lập trình
22
Thiết kế, xây dựng một chương trình dịch hướng đối
tượng đơn giản (design a simple object-oriented
compiler/interpreter)
Trang 6
TT Nội dung Miêu tả
23
Tìm hiểu chương trình LEX (Lex compiler) và thiết kế
bộ phân tích từ vựng ngôn ngữ
X(http://userpages.monmouth.com/~wstreett/lex-yacc/lex-yacc.html)
Viết báo cáo tóm tắt về LEX
Tìm hiểu và demo hoạt động của chương trình thông qua ví dụ Viết chương trình cho phép kiểm tra và phân tích từ vựng của mã nguồn trên ngôn ngữ lập trình Pascal Mọi thao tác nhập/xuất đều thông qua các form của chương trình
24
Tìm hiểu chương trìn YACC () và thiết kế bộ phân tích
cú pháp cho ngôn ngữ Pascal (tham khảo thêm tại
http://stackoverflow.com/questions/5456011/how-to-compile-lex-yacc-files-on-windows)
Viết báo cáo tóm tắt về YACC Tìm hiểu và demo hoạt động của chương trình thông qua ví dụ Viết chương trình cho phép kiểm tra cú pháp các cấu trúc lệnh cơ bản trong C Giao diện winform, mọi thao tác nhập xuất dữ liệu đều thông qua cửa sổ của chương trình
25
Tìm hiểu chương trình LEX (Lex compiler) và thiết kế
bộ phân tích từ vựng ngôn ngữ C (tham khảo thêm
tại
http://stackoverflow.com/questions/5456011/how-to-compile-lex-yacc-files-on-windows)
Tìm hiểu và demo hoạt động của chương trình thông qua ví dụ Kiểm tra và phân tích từ vựng của
mã nguồn trên ngôn ngữ lập trình
C Mọi thao tác nhập/xuất đều thông qua các form của chương trình
Viết báo cáo tóm tắt về LEX
26
Tìm hiểu chương trìn YACC và thiết kế bộ phân tích
cú pháp cho ngôn ngữ X (tham khảo thêm tại
http://stackoverflow.com/questions/5456011/how-to-compile-lex-yacc-files-on-windows)
Viết báo cáo tóm tắt về YACC Tìm hiểu và demo hoạt động của chương trình thông qua ví dụ
Có thể kiểm tra cú pháp các cấu trúc lệnh cơ bản của mã nguồn trên ngôn ngữ lập trình C Mọi thao tác nhập/xuất đều thông qua các form của chương trình
27
Tìm hiểu chương trình VnTagger và viết ứng dụng
winform để gán nhãn văn bản tiếng việt SV: Trần Thị Thắm, Trần Thị Huệ
K24-buổi tối
28
Tìm hiểu chương trình vnTokenizer
(http://www.loria.fr/~lehong/tools/vnTokenizer.php)
và xây dựng một ứng dụng
Tìm hiểu chương trình phân tích từ vựng tiếng việt VNTokenizer, viết ứng dụng cho phép: thống kê từ trong văn bản, kết hợp gán nhãn từ loại, trích trọn đặc trưng của văn bản đầu vào theo định luật Zipf Mọi thao tác nhập/xuất đều thông qua các form của chương trình
29 Tìm hiểu GOLD Parsing System
(http://goldparser.org/) và xây dựng ứng dụng
Chương trình dịch tựa như LEX và YACC, giao diện cửa sổ, tìm hiểu và
Trang 7TT Nội dung Miêu tả
viết ứng dụng đi kèm cho phép phân tích từ vựng và cú pháp của
mã nguồn trên ngôn ngữ C
30
Sử dụng biểu thức chính quy viết chương trình tìm
kiếm theo mẫu (RE) các thực thể hoặc từ vựng trong
bản cho trước
Cài đặt chương trình tìm kiếm đơn giản theo RE, cho phép nhận dạng được ít nhất 5 dạng thực thể khác nhau: ví dụ các hòm thư, số điện thoại, tên riêng, địa chỉ URL, ngày tháng xuất hiện trong văn bản Viết chương trình phân tích văn bản và thống kê tự động các đối tượng trên, chương trình có thể đánh dấu (highlight) từ khóa trong văn bản hoặc đưa ra bảng thống kê (VD: trong office word) Để đơn giản có thể làm việc với file định dạng *.rtf
31
Viết chương trình cho phép chuyển đổi một văn
phạm CFG bất kz về dạng chuẩn Chomsky và dạng
chuẩn Greibach
32
Sử dụng biểu thức chính quy, viết chương trình bóc
tách thông tin tự động về một sản phẩm (ví dụ: máy
tính, điện thoại, bất động sản, ) từ các mẩu tin
Nếu có thể viết chương trình dạng add-in cho MSWord
SV: Phạm Việt Anh K24-buổi tối
33 Viết ứng dụng cho phép tự động tạo, xóa, sửa tên
các file và thư mục theo các mẫu (RE, RD)
SV: Nguyễn Việt Cường K24-buổi tối
34 Viết chương trình biến đổi trực tiếp RE về DFA
Dựa trên mã nguồn có sẵn, viết chương trình cho phép xây dựng DFA trực tiếp từ RE
35 Viết chương trình cho phép lập bảng phân tích của
phương pháp phân tích đoán trước
36 Viết chương trình biến đổi trực tiếp DFA về RE
Dựa trên mã nguồn có sẵn, viết chương trình cho phép biến đổi trực tiếp 1 automata hữu hạn về biểu thức chính quy
SV: Nguyễn Xuân Hùng, Nguyễn Chế Linh K24-buổi tối
37
Viết chương trình phân tích cú pháp theo phương
pháp Earley (Có mô phỏng các bước tính toán và dẫn
xuất, nếu có)
38
Viết chương trình phân tích cú pháp theo phương
pháp vét cạn Có trình bày tuần tự các bước phân
tích và dẫn xuất nếu có
39
Viết chương trình nhận dạng các token từ khoá
(begin, end, var, if, then, for, to), số nguyên, số thực,
tên biến, phép gán, phép so sánh, các phép toán số
học (+, -, *, /) của một chương trình viết bằng Pascal
Trang 8TT Nội dung Miêu tả
Chương trình phải được thực hiện theo mô hình l{
thuyết automata
40
Ứng dụng automata hữu hạn, viết chương trình
chuyển mã của các file text giữa ít nhất 3 bảng mã
thông dụng hiện nay VNI, Unicode,
41
Xây dựng chương trình soạn thảo, hoặc dạng add-in
vào trong chương trình soạn thảo, cho phép tìm kiếm
một số thông tin dạng đặc biệt (ví dụ tên tuổi, địa
danh, số đt, vvv…)
42
Viết chương trình phân tích cú pháp theo phương
pháp LL(k) Có trình bày các bước tính toán và dẫn
xuất nếu có
43
Viết chương trình phân tích cú pháp theo phương
pháp LR(k) Có trình bày các bước tính toán và dẫn
xuất nếu có
44
Viết chương trình phân tích cú pháp cho ngôn ngữ
Pascal đơn giản (bao gồm các khai báo hàm, thủ tục,
khai báo biến, begin, end, lệnh if, lệnh lặp for, repeat
… until, while … do, các phép so sánh, các phép toán
số học)
Xây dựng chương trình thực hiện các nhiệm vụ sau trên ngôn ngữ Java hoặc C, C++ (có thể dùng các chương trình hỗ trợ trên mạng và nêu rõ cách thực hiện: lex, Jlex, JFlex, yacc, CUP,…)
45
Mô phỏng máy tính bỏ túi (gồm các phép toán cộng
trừ nhân chia, lũy thừa, loga) theo cách cài đặt đệ qui
trên xuống
46
Mô phỏng máy tính bỏ túi (gồm các phép toán cộng
trừ nhân chia, lũy thừa, loga) theo cách cài đặt sử
dụng thứ bậc toán tử
47 Mô phỏng máy tính bỏ túi (gồm các phép toán cộng
trừ nhân chia và các hàm lượng giác)
48
Tính toán các hàm số logic viết theo dạng tuyển
chuẩn tắc (tuyển của các hội) theo cách cài đặt đệ
qui trên xuống
49
Tính toán các hàm số logic viết theo dạng tuyển
chuẩn tắc (tuyển của các hội) theo cách cài đặt sử
dụng thứ bậc toán tử
50 Viết chương trình tính FIRST và FOLLOW cho một văn
phạm
III Nhóm bài tập tự chọn: Ngoài những bài tập liệt kê ở trên, khuyến khích sinh viên
lựa chọn những bài tập sát với yêu cầu các bài toán thực tiễn và được sự nhất trí của giáo viên
IV Nhóm không thực hiện bài tập: Sinh viên có thể lựa chọn theo nhóm này, cách
kiểm tra đánh giá sẽ thông báo sau