Một lexer tổng quát nhận một bảng toán tử tùy biến gồm m chuỗi phân biệt, mỗi chuỗi dài 1 đến 4 ký tự lấy từ bộ ký tự +-*/=<>!&|:.%^~? (không chứa chữ cái, chữ số, khoảng trắng). Chuỗi nguồn s chỉ gồm các chữ cái thường (tạo thành định danh) và/hoặc các ký tự thuộc bộ ký tự nói trên (phải khớp với bảng toán tử), không có khoảng trắng.
Lexer quét s từ trái sang phải:
ID(<dãy_chữ>).Ví dụ: với bảng toán tử {==, =, <=, <, !=, ->} và s= x<=y->z, kết quả token hóa là ID(x) <= ID(y) -> ID(z).
Dòng 1: số nguyên m (0≤m≤50) — số toán tử trong bảng. Dòng 2: m toán tử cách nhau bởi dấu cách (nếu m=0 thì đây là dòng rỗng, vẫn phải có mặt). Dòng 3: chuỗi nguồn s (0≤∣s∣≤1000, có thể rỗng).
Nếu s được token hóa hoàn toàn thành công: in ra một dòng chứa các token theo đúng thứ tự tìm được, cách nhau một dấu cách (nếu không có token nào, in ra một dòng rỗng).
Nếu gặp lỗi tại vị trí không token hóa được: in ra ERROR p, với p là vị trí 1-based của ký tự gây lỗi trong s.
Ví dụ:
Đầu vào:
6
== = <= < != ->
x<=y->z
Đầu ra:
ID(x) <= ID(y) -> ID(z)
Đầu vào:
3
+ - *
foo+bar#baz
Đầu ra:
ERROR 8
Đang tải editor...