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 n 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ệ.
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 đó i là số thứ tự dòng (bắt đầu từ 1), j 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...