Các lượt nộp
    Danh sách bài
    Trang chủ
    Báo lỗi

    solution

    Đề bài: [Trình biên dịch] Kết hợp phục hồi từ vựng và cú pháp cho câu lệnh gán

    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.

    • Định dạng đầu vào:
      • Dòng 1: số nguyên nnn (0≤n≤5000 \le n \le 5000≤n≤500).
      • nnn dòng tiếp theo: mỗi dòng là một câu lệnh (các token cách nhau bởi một hoặc nhiều khoảng trắng, có thể có 0 token nếu dòng rỗng).
    • Định dạng đầu ra:

      Với mỗi dòng thứ iii (theo đúng thứ tự 1..n1..n1..n), in đúng một dòng kết quả tương ứng, theo mẫu:

      • Hợp lệ: Dong {i}: OK - {id} = {so}
      • Lỗi từ vựng: Dong {i}: loi tu vung tai token '{tok}' - bo qua dong
      • Lỗi cú pháp: Dong {i}: loi cu phap - da phuc hoi thanh '{id} = {so} ;'

      Sau khi in xong nnn 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...