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] Thông dịch biểu thức Boolean với AND/OR/NOT

    Trình phân tích ngữ nghĩa của trình biên dịch thường phải định giá (evaluate) các biểu thức điều kiện boolean xuất hiện trong lệnh if/while. Cho một biểu thức boolean trên một dòng, gồm:

    • Các phép so sánh nguyên tử dạng a OP b, trong đó a,ba, ba,b là số nguyên và OP là một trong == != < <= > >=.
    • Các toán tử logic NOT (một ngôi), AND, OR (hai ngôi) với độ ưu tiên chuẩn: NOT cao nhất, rồi AND, rồi OR (đều tính từ trái sang phải khi cùng độ ưu tiên).
    • Dấu ngoặc () để nhóm biểu thức con.

    Hãy thông dịch (định giá) biểu thức và in ra kết quả.

    Ví dụ: (3 < 5) AND NOT (2 == 2) OR (7 >= 7) được định giá là (True∧¬True)∨True=True(\text{True} \land \lnot \text{True}) \lor \text{True} = \text{True}(True∧¬True)∨True=True, in ra true.

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

      Một dòng duy nhất chứa biểu thức boolean, các thành phần (số, toán tử so sánh, AND, OR, NOT, dấu ngoặc) cách nhau bởi đúng một khoảng trắng (dấu ngoặc có thể liền với thành phần bên trong). Độ dài dòng không vượt quá 500500500 ký tự.

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

      In ra true nếu biểu thức đúng, hoặc false nếu sai (chữ thường, không viết hoa).

    Ví dụ:

    Đầu vào:

    3 < 5

    Đầu ra:

    true
    

    Đầu vào:

    NOT (5 == 5)

    Đầu ra:

    false
    

    Đang tải editor...