Nhiều trình biên dịch áp dụng đồng thời hai cơ chế xử lý lỗi: đồng bộ theo dòng (khi phát hiện lỗi đầu tiên trên một dòng, bỏ qua toàn bộ phần còn lại của dòng đó — vì các lỗi tiếp theo trên cùng dòng nhiều khả năng chỉ là hệ quả của lỗi đầu) và giới hạn số lỗi tối đa M (nếu số lỗi đã báo cáo đạt đến M, mọi lỗi phát hiện thêm sẽ khiến trình biên dịch dừng ngay lập tức để tránh tràn ngập thông báo).
Mã nguồn đã được tiền xử lý thành n dòng, mỗi dòng là một chuỗi chỉ gồm ký tự 0 và 1 (độ dài tuỳ ý, có thể 0), trong đó 1 ở vị trí j (1-based, theo thứ tự ký tự trong dòng) nghĩa là token thứ j của dòng đó có lỗi cú pháp.
Xử lý từng dòng theo thứ tự 1,2,…,n:
1 đầu tiên (nếu có) ở vị trí j. Nếu không có 1 nào, dòng này không có lỗi, chuyển sang dòng kế tiếp.Nếu quét hết n dòng mà không bị dừng giữa chừng, biên dịch được xem là hoàn tất.
Ví dụ: n=5, M=2, các dòng: 010, 000, 1, 01, 11. Dòng 1 có lỗi tại vị trí 2 → báo cáo (đã báo 1). Dòng 2 không có lỗi. Dòng 3 có lỗi tại vị trí 1 → báo cáo (đã báo 2, bằng M). Dòng 4 có lỗi tại vị trí 2 → nhưng đã báo đủ M=2 lỗi → dừng ngay tại dòng 4, không báo lỗi này, không xét dòng 5. Kết quả in ra:
Line 1 Token 2
Line 3 Token 1
ABORTED at line 4
0/1 (độ dài mỗi dòng không quá 200, có thể là dòng rỗng).COMPLETED k với k là tổng số lỗi đã báo cáo, sau đó k dòng theo thứ tự báo cáo, mỗi dòng dạng Line L Token P.Line L Token P), rồi một dòng cuối ABORTED at line L2 với L2 là số thứ tự dòng gây ra việc dừng.Ví dụ:
Đầu vào:
3 3
000
0
Đầu ra:
COMPLETED 0
Đầu vào:
5 2
010
000
1
01
11
Đầu ra:
Line 1 Token 2
Line 3 Token 1
ABORTED at line 4
Đang tải editor...