Phục hồi cấp cụm từ (phrase-level recovery) cho phép trình biên dịch tự sửa các lỗi cú pháp đơn giản và phổ biến — chẳng hạn tự chèn dấu ; còn thiếu ở cuối câu lệnh — thay vì chỉ báo lỗi rồi dừng.
Cho n dòng mã nguồn, với mỗi dòng: bỏ các khoảng trắng thừa ở cuối dòng (không đụng tới khoảng trắng đầu dòng). Nếu sau khi bỏ khoảng trắng cuối, dòng rỗng thì bỏ qua (không phải lỗi, coi là dòng trắng). Nếu dòng không rỗng và không kết thúc bằng ;, đó là lỗi thiếu dấu chấm phẩy; trình biên dịch phục hồi bằng cách chèn thêm ; vào cuối dòng đó. Nếu dòng đã kết thúc bằng ; thì giữ nguyên.
In các lỗi tìm được theo đúng thứ tự dòng, mỗi lỗi một dòng: Dòng {i}: thiếu dấu ';' cuối câu lệnh.
Sau đó in dòng Tổng số lỗi: {tổng số lỗi}.
Tiếp theo in dòng Mã đã phục hồi: rồi in lần lượt n dòng mã nguồn đã được xử lý (đã bỏ khoảng trắng cuối dòng, và đã chèn ; ở những dòng bị lỗi; dòng rỗng thì in dòng trống).
Ví dụ:
Đầu vào:
3
int x = 5;
int y = 10
return x + y;
Đầu ra:
Dòng 2: thiếu dấu ';' cuối câu lệnh
Tổng số lỗi: 1
Mã đã phục hồi:
int x = 5;
int y = 10;
return x + y;
Đầu vào:
4
x = 1;
y = 2;
z = 3
Đầu ra:
Dòng 4: thiếu dấu ';' cuối câu lệnh
Tổng số lỗi: 1
Mã đã phục hồi:
x = 1;
y = 2;
z = 3;
Đang tải editor...