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] Kiểm tra kiểu biểu thức hậu tố (RPN)

    Trong giai đoạn kiểm tra kiểu (type checking) của trình biên dịch, ta cần xác định kiểu của biểu thức trước khi sinh mã. Cho một biểu thức số học viết ở dạng hậu tố (Reverse Polish Notation), gồm các token là hằng số nguyên (không chứa dấu chấm, có thể có dấu - ở đầu để biểu diễn số âm) hoặc hằng số thực (chứa đúng một dấu chấm .), và các toán tử hai ngôi +,−,∗,/+, -, *, /+,−,∗,/.

    Luật suy diễn kiểu:

    • Nếu cả hai toán hạng đều có kiểu int, và toán tử là +,−,∗+, -, *+,−,∗ thì kết quả có kiểu int.
    • Riêng phép chia / giữa hai toán hạng int luôn cho kết quả kiểu float (mô phỏng phép chia thực).
    • Nếu có ít nhất một toán hạng kiểu float thì kết quả luôn là float (số nguyên được nâng kiểu ngầm định).

    Nếu biểu thức không hợp lệ về mặt cú pháp hậu tố (thiếu toán hạng khi gặp toán tử, hoặc sau khi xử lý hết token còn dư/thiếu toán hạng trên ngăn xếp) thì kết quả là ERROR.

    Ví dụ: biểu thức 2.5 3 * cho kết quả float; biểu thức 10 2 / cho kết quả float (dù cả hai đều là int); biểu thức 3 4 + cho kết quả int.

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

      Dòng đầu tiên chứa số nguyên nnn (0≤n≤10000 \le n \le 10000≤n≤1000) — số biểu thức cần kiểm tra kiểu. Mỗi dòng trong nnn dòng tiếp theo là một biểu thức hậu tố, các token cách nhau bởi đúng một khoảng trắng.

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

      In ra nnn dòng, dòng thứ iii là kiểu (int hoặc float) của biểu thức thứ iii, hoặc ERROR nếu biểu thức không hợp lệ.

    Ví dụ:

    Đầu vào:

    1
    3 4 + 5 *
    

    Đầu ra:

    int
    

    Đầu vào:

    3
    3 4 +
    2.5 3 *
    10 2 /
    

    Đầu ra:

    int
    float
    float
    

    Đang tải editor...