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] Sơ đồ dịch trung tố sang hậu tố

    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(′−′)}∣TE \to E_1 + T \{\text{print}('+')\} \mid E_1 - T \{\text{print}('-')\} \mid TE→E1​+T{print(′+′)}∣E1​−T{print(′−′)}∣T T→T1∗F{print(′∗′)}∣T1/F{print(′/′)}∣FT \to T_1 * F \{\text{print}('*')\} \mid T_1 / F \{\text{print}('/')\} \mid FT→T1​∗F{print(′∗′)}∣T1​/F{print(′/′)}∣F F→(E)∣id∣numF \to (E) \mid \text{id} \mid \text{num}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 - * +.

    • Định dạng đầu vào:

      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ự.

    • Định dạng đầu ra:

      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...