Bước tiền xử lý kinh điển trước khi dựng cây cú pháp cho một "động cơ regex" là chèn tường minh toán tử nối (concatenation), vì trong regex viết thông thường phép nối hai biểu thức con không có ký hiệu riêng (ví dụ ab nghĩa là a nối b), gây khó khăn khi áp dụng thuật toán chuyển postfix kiểu Shunting-Yard.
Xét regex chỉ gồm các ký tự a–z (literal), |, *, +, ?, (, ). Với mỗi cặp ký tự liền kề (c1,c2) trong chuỗi (theo đúng thứ tự xuất hiện), ta chèn một dấu chấm . (toán tử nối tường minh) vào giữa c1 và c2 khi và chỉ khi đồng thời:
), *, +, ?}; vàHãy in ra regex sau khi đã chèn đầy đủ các dấu . theo quy tắc trên (không thay đổi gì khác).
Ví dụ: (a|b)*c → sau khi chèn: (a|b)*.c (chèn . giữa )*... chính xác là giữa * và c vì * kết thúc biểu thức con (a|b)*, còn c bắt đầu một biểu thức con mới).
Một dòng duy nhất chứa chuỗi regex r (độ dài từ 1 đến 200), chỉ gồm các ký tự trong tập {a..z, |, *, +, ?, (, )}, đảm bảo cú pháp regex hợp lệ (ngoặc cân bằng).
In ra một dòng duy nhất là chuỗi regex sau khi đã chèn tường minh toán tử nối . theo đúng quy tắc nêu trên.
Ví dụ:
Đầu vào:
ab|c*
Đầu ra:
a.b|c*
Đầu vào:
a
Đầu ra:
a
Đang tải editor...