Một kỹ thuật phục hồi lỗi ngữ nghĩa phổ biến khi trình biên dịch gặp một định danh chưa khai báo là gợi ý định danh gần đúng nhất có trong bảng ký hiệu (giống thông báo "did you mean ...?" của nhiều trình biên dịch hiện đại), dựa trên khoảng cách chỉnh sửa Levenshtein: số phép chèn, xóa, thay thế ký tự tối thiểu để biến chuỗi này thành chuỗi kia.
Cho bảng ký hiệu gồm n định danh hợp lệ, và m định danh bị báo lỗi "chưa khai báo". Với mỗi định danh lỗi x, xét tất cả định danh y trong bảng ký hiệu, tính khoảng cách Levenshtein d(x,y). Gọi t=⌊∣x∣/2⌋ (với ∣x∣ là độ dài x) là ngưỡng chấp nhận.
Ví dụ: bảng ký hiệu {counter, total, result}, định danh lỗi countr (độ dài 6, ngưỡng t=3). Khoảng cách đến counter là 1 (thiếu một ký tự e) — nhỏ nhất và ≤3 → gợi ý counter.
In ra m dòng theo đúng thứ tự các định danh lỗi trong dữ liệu vào. Với mỗi định danh x: nếu tìm được gợi ý y, in x -> y; nếu không, in x -> none.
Ví dụ:
Đầu vào:
3
counter total result
2
countr toatl
Đầu ra:
countr -> counter
toatl -> total
Đầu vào:
2
foo bar
1
xyzxyzxyz
Đầu ra:
xyzxyzxyz -> none
Đang tải editor...