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] Phát hiện lỗi từ vựng theo bộ ký tự hợp lệ

    Trong giai đoạn phân tích từ vựng (lexical analysis), bộ quét (scanner) phải phát hiện các ký tự không thuộc bảng chữ cái hợp lệ của ngôn ngữ nguồn để báo lỗi. Cho một đoạn mã nguồn gồm nnn dòng, hãy quét từng dòng theo thứ tự từ trái sang phải và liệt kê tất cả các ký tự không hợp lệ.

    Bộ ký tự hợp lệ gồm: chữ cái La-tinh hoa/thường (a-z, A-Z), chữ số (0-9), dấu gạch dưới _, khoảng trắng (dấu cách và tab), và các ký hiệu + - * / = ( ) ; , < > : .

    Ví dụ: với dòng let y = 3 @ 4; thì ký tự @ ở cột 7 là không hợp lệ.

    • Định dạng đầu vào:
      • Dòng đầu tiên: số nguyên nnn (0≤n≤10000 \le n \le 10000≤n≤1000) — số dòng mã nguồn.
      • nnn dòng tiếp theo: nội dung từng dòng mã nguồn (độ dài mỗi dòng không quá 200 ký tự, có thể là dòng rỗng).
    • Định dạng đầu ra:

      In lần lượt các lỗi theo đúng thứ tự quét (theo dòng, rồi theo cột trong dòng), mỗi lỗi một dòng theo mẫu:

      Dòng {i}, cột {j}: ký tự không hợp lệ '{c}'

      trong đó iii là số thứ tự dòng (bắt đầu từ 1), jjj là số thứ tự cột trong dòng đó (bắt đầu từ 1). Sau khi liệt kê hết, in dòng cuối: Tổng số lỗi: {tổng số} (nếu không có lỗi nào thì chỉ in dòng này với giá trị 0).

    Ví dụ:

    Đầu vào:

    2
    let y = 3 @ 4;
    print("hi#") $end
    

    Đầu ra:

    Dòng 1, cột 11: ký tự không hợp lệ '@'
    Dòng 2, cột 7: ký tự không hợp lệ '"'
    Dòng 2, cột 10: ký tự không hợp lệ '#'
    Dòng 2, cột 11: ký tự không hợp lệ '"'
    Dòng 2, cột 14: ký tự không hợp lệ '$'
    Tổng số lỗi: 5
    

    Đầu vào:

    3
    int x = 10;
    for (i=0;i<10;i++)
    return x;
    

    Đầu ra:

    Tổng số lỗi: 0
    

    Đang tải editor...