Trong phục hồi lỗi panic-mode theo tập FOLLOW, khi phân tích một phi kết thúc (nonterminal) A gặp lỗi tại một vị trí trong dòng token, bộ phân tích sẽ bỏ qua các token tiếp theo cho tới khi gặp một token thuộc FOLLOW(A) (tập token có thể xuất hiện ngay sau A), rồi coi như đã phục hồi tại đó.
Cho một dãy n token gốc (không bị chỉnh sửa qua các truy vấn) và k tập FOLLOW của k phi kết thúc khác nhau, hãy trả lời độc lập q truy vấn phục hồi. Mỗi truy vấn cho biết vị trí pos (1-based, 1≤pos≤n) nơi phát hiện lỗi khi đang phân tích phi kết thúc tên name: hãy bỏ qua các token kể từ vị trí pos+1 cho tới khi gặp token đầu tiên thuộc FOLLOW(name) (token này được coi là điểm phục hồi) hoặc hết dãy token. Mỗi truy vấn được tính độc lập trên dãy token gốc, không ảnh hưởng lẫn nhau.
name s tok1 tok2 ... toks: tên phi kết thúc name, số lượng phần tử s, và s token thuộc FOLLOW(name).pos name (1≤pos≤n, name là tên một phi kết thúc đã định nghĩa ở trên).Với mỗi truy vấn thứ i (theo đúng thứ tự trong input, i đánh số từ 1), in một dòng:
Query {i}: bo qua {c} token, phuc hoi tai vi tri {r} (token='{tok}')Query {i}: bo qua {c} token, phuc hoi tai EOFtrong đó c là số token bị bỏ qua (không tính token tại vị trí r nếu có).
Ví dụ:
Đầu vào:
3
id id id
1
EXPR 1 ;
1
1 EXPR
Đầu ra:
Query 1: bo qua 2 token, phuc hoi tai EOF
Đầu vào:
11
id + id * ) id ; id = id ;
2
EXPR 2 ; )
STMT 1 ;
3
3 EXPR
6 STMT
1 EXPR
Đầu ra:
Query 1: bo qua 1 token, phuc hoi tai vi tri 5 (token=')')
Query 2: bo qua 0 token, phuc hoi tai vi tri 7 (token=';')
Query 3: bo qua 3 token, phuc hoi tai vi tri 5 (token=')')
Đang tải editor...