Xét văn phạm phi ngữ cảnh cho biểu thức logic Boolean với ba toán tử NOT, AND, OR (độ ưu tiên giảm dần: NOT cao nhất, rồi đến AND, thấp nhất là OR; AND và OR kết hợp trái):
Expr→Term ( OR Term )∗ Term→Factor ( AND Factor )∗ Factor→NOT Factor ∣ ( Expr ) ∣ TRUE ∣ FALSE
Chuỗi đầu vào gồm các token (TRUE, FALSE, AND, OR, NOT, (, )) cách nhau bởi đúng một khoảng trắng. Hãy cài đặt bộ phân tích cú pháp đệ quy xuống, trong đó mỗi hàm (Expr, Term, Factor) vừa phân tích vừa tính giá trị Boolean trực tiếp (không cần dựng cây cú pháp trung gian).
Yêu cầu: in ra kết quả cuối cùng của toàn bộ biểu thức.
Ví dụ: TRUE OR FALSE AND NOT TRUE — do AND ưu tiên hơn OR và NOT ưu tiên cao nhất, biểu thức được hiểu là TRUE OR (FALSE AND (NOT TRUE)) = TRUE OR (FALSE AND FALSE) = TRUE OR FALSE = TRUE.
Một dòng chứa các token cách nhau bởi một khoảng trắng, gồm TRUE, FALSE, AND, OR, NOT, (, ), đảm bảo hợp lệ cú pháp theo văn phạm trên. Độ dài dòng không quá 2000 ký tự.
In ra TRUE hoặc FALSE — giá trị của biểu thức Boolean.
Ví dụ:
Đầu vào:
TRUE
Đầu ra:
TRUE
Đầu vào:
TRUE OR FALSE AND NOT TRUE
Đầu ra:
TRUE
Đang tải editor...