Bài này kết hợp hai chiến lược phục hồi lỗi trên cùng một danh sách câu lệnh gán đơn giản có dạng chuẩn ID = SO ;. Với mỗi dòng, tách thành các token theo khoảng trắng, rồi xử lý theo hai bước:
Bước 1 — kiểm tra từ vựng: một token hợp lệ về từ vựng nếu nó khớp định danh (^[A-Za-z_][A-Za-z0-9_]*$), số nguyên không âm (^[0-9]+$), hoặc là chính xác = hoặc ;. Nếu dòng có token đầu tiên (từ trái) không khớp bất kỳ dạng nào ở trên, đây là lỗi từ vựng: báo lỗi và áp dụng phục hồi panic-mode bằng cách bỏ qua toàn bộ dòng đó (không kiểm tra cú pháp nữa), chỉ báo token lỗi đầu tiên tìm thấy.
Bước 2 — kiểm tra cú pháp (chỉ khi dòng không có lỗi từ vựng): dòng hợp lệ khi và chỉ khi có đúng 4 token theo đúng thứ tự ID = SO ; (token 1 là định danh, token 2 là =, token 3 là số, token 4 là ;). Nếu không đúng cấu trúc này (thiếu/thừa token, sai thứ tự, thiếu = hoặc ;, ...), đây là lỗi cú pháp: phục hồi cấp cụm từ bằng cách tìm token định danh đầu tiên xuất hiện trong dòng làm tên biến (nếu không có thì dùng err), và token số đầu tiên xuất hiện trong dòng làm giá trị (nếu không có thì dùng 0), rồi coi như câu lệnh đã được sửa thành ID = SO ; với ID, SO vừa tìm được.
Với mỗi dòng thứ i (theo đúng thứ tự 1..n), in đúng một dòng kết quả tương ứng, theo mẫu:
Dong {i}: OK - {id} = {so}Dong {i}: loi tu vung tai token '{tok}' - bo qua dongDong {i}: loi cu phap - da phuc hoi thanh '{id} = {so} ;'Sau khi in xong n dòng kết quả, in ba dòng tổng kết:
So dong hop le: {số dòng OK}
So loi tu vung: {số dòng lỗi từ vựng}
So loi cu phap: {số dòng lỗi cú pháp}
Ví dụ:
Đầu vào:
3
a = 1 ;
b = ;
c = 3
Đầu ra:
Dong 1: OK - a = 1
Dong 2: loi cu phap - da phuc hoi thanh 'b = 0 ;'
Dong 3: loi cu phap - da phuc hoi thanh 'c = 3 ;'
So dong hop le: 1
So loi tu vung: 0
So loi cu phap: 2
Đầu vào:
4
x = 5 ;
y 10 ;
z = @ ;
count = 42 ;
Đầu ra:
Dong 1: OK - x = 5
Dong 2: loi cu phap - da phuc hoi thanh 'y = 10 ;'
Dong 3: loi tu vung tai token '@' - bo qua dong
Dong 4: OK - count = 42
So dong hop le: 2
So loi tu vung: 1
So loi cu phap: 1
Đang tải editor...