Trong lược đồ dịch (translation scheme) kinh điển cho biểu thức số học, văn phạm S-attributed sau gắn hành động ngữ nghĩa để sinh ra dạng hậu tố ngay trong lúc phân tích cú pháp:
E→E1+T{print(′+′)}∣E1−T{print(′−′)}∣T T→T1∗F{print(′∗′)}∣T1/F{print(′/′)}∣F F→(E)∣id∣num
Các hành động print được thực hiện đúng theo thứ tự mà bộ phân tích cú pháp thu giảm (reduce) các luật sinh (tức là ngay sau khi phân tích xong toán hạng thứ hai của một phép toán). Toán hạng id/num được in ra ngay khi được nhận dạng.
Cho một biểu thức trung tố hợp lệ, chỉ gồm các phép + - * /, dấu ngoặc (), các toán hạng là số nguyên không âm (một hoặc nhiều chữ số) hoặc định danh (chữ cái/_ theo sau bởi chữ, số, _), không có khoảng trắng bên trong toán hạng. Hãy mô phỏng lược đồ dịch trên và in ra chuỗi các token theo đúng thứ tự được print, cách nhau bởi một khoảng trắng.
Ví dụ: với a+b*(c-3), các bước reduce theo văn phạm trên sinh ra dãy in a b c 3 - * +.
Một dòng duy nhất chứa biểu thức trung tố (không chứa khoảng trắng), độ dài tối đa 200 ký tự.
Một dòng chứa các token (toán hạng và toán tử) theo đúng thứ tự mà lược đồ dịch thực hiện print, cách nhau bởi đúng một khoảng trắng, không có khoảng trắng thừa ở đầu/cuối.
Ví dụ:
Đầu vào:
(a+b)*(c-3)/d
Đầu ra:
a b + c 3 - * d /
Đầu vào:
a+b*(c-3)
Đầu ra:
a b c 3 - * +
Đang tải editor...