Người ta sử dụng hai vùng bộ nhớ, một vùng chứa chương trình (danh sách các mô tả các thay thế), còn vùng kia (ta sẽ gọi là R với kích thước gần như không giới hạn) được dùng để lưu tr[r]
Trang 1Bài toán 5 [ PROLAN/M ]
Giả sử công ty phần cứng NePhihhan đang phát triển một bộ vi xử lý mới mang tên RISC có khả năng xử lý một kiểu thông tin đơn giản - chuỗi ký tự - và thực hiện một lệnh thay thế đơn giản (tìm kiếm các chuỗi con và thay thế nó bằng các chuỗi con khác) Người ta sử dụng hai vùng bộ nhớ, một vùng chứa chương trình (danh sách các mô tả các thay thế), còn vùng kia (ta sẽ gọi là R với kích thước gần như không giới hạn) được dùng để lưu trữ dữ liệu vào, các kết quả trung gian
và kết quả cuối cùng
Các chương trình điều khiển bộ vi xử lý được viết bằng ngôn ngữ được gọi là PROLAN/M Trước khi mô tả chính thức, ta xét chương trình ví dụ dưới:
(aa,b) (ba,a) (bc,a) (c,start) (d,) (b,finish) (,)
Khi xử lý chuỗi dữ liệu vào 'abcabcd', chương trình in chuỗi dữ liệu ra 'finish', còn nội dung của R lần lượt là một trong các chuỗi abcabcd, aaabcd, babcd, abcd, aad, db, b, finish
Mô tả cú pháp chính thức của ngôn ngữ PROLAN/M (dùng "::=" để chỉ "được định nghĩa là" và
":" để chỉ "hoặc"):
<'PROLAN/M'-program> ::= <substitut.sequence>(,)
<substitut.sequence> ::= <substitution>:
::= <substitut.sequence><substitution>
<substitution> ::= (<left part>,<right part>)
<left-hand part> ::= <string>
<right-hand part> ::= <string>:<empty>
<string> ::= <string symbol>:<string><string symbol>
<empty string> ::=
<string symbol> ::= <any ASCII character except ',' , ')' >
Sau khi chuỗi dữ liệu được nhập vào R, chương trình được thực hiện như sau: bộ vi xử lý tìm kiếm <substitution> đầu tiên trong <substitut.sequence> trong đó <left-hand part> là chuỗi con của chuỗi trong R Nếu tìm kiếm thành công, <right-hand part> của cùng <substitution> sẽ thay thế chuỗi con tương ứng trong R (chuỗi tận cùng bên trái nếu kết quả tìm kiếm không là duy nhất) Thủ tục này được lặp lại từ đầu với giá trị R mới đến khi <left-hand part> trong <'PROLAN/M'-program> được tìm thấy là một chuỗi con với giá trị R hiện tại, đây là kết quả cuối cùng và quá trình xử lý kết thúc
Câu 1
Hãy viết và sửa lỗi một chương trình PROLAN/M chuyển một chuỗi kiểu
<nat.nr1>+<nat.nr2>=?
(trong đó <nat.nr1> và <nat.nr2> là các chuỗi số thập phân hiện thân là các số tự nhiên) thành một chuỗi kiểu <nat.nr1>+<nat.nr2>=<nat.nr3> chứa đựng phát biểu toán học đúng (<nat.nr1> và
<nat.nr2> như nhau) Ví dụ, chuỗi 1990+123=? được chuyển thành 1990+123=2113 sau quá trình xử lý Lưu chương trình của bạn vào tệp SUM.PRM
Câu 2
Viết chương trình sửa lỗi theo ngôn ngữ PROLAN/M thực hiện nhiệm vụ sau:
(a) Lưu tên tệp văn bản theo ngôn ngữ PROLAN/M;
(b) Tìm nội dung ban đầu của R;
(c) Biểu diễn quá trình chuyển chuỗi dữ liệu vào bằng chương trình trong tệp văn bản;
(d) hiển thị kết quả lên màn hình;
(e) Tìm sơ đồ chuyển đổi
Trang 2
Page 2