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 số học – so sánh – logic

    Mở rộng bộ kiểm tra kiểu để xử lý biểu thức hỗn hợp gồm toán tử số học, so sánh và logic. Biểu thức được cho ở dạng tiền tố có ngoặc đầy đủ, mỗi token (kể cả dấu ngoặc) cách nhau bởi khoảng trắng: biểu thức con nhị phân viết ( op A B ), biểu thức con phủ định viết ( ! A ), còn lại là token đơn (hằng số hoặc biến).

    Toán hạng nguyên tố có kiểu:

    • Hằng true, false: kiểu bool.
    • Hằng số có dấu chấm: kiểu float; không có dấu chấm: kiểu int.
    • Biến: tra kiểu trong bảng khai báo cho trước (kiểu ∈{\in\{∈{int,float,bool}\}}).

    Luật kiểm tra kiểu cho từng toán tử opopop:

    • +,−,∗,/+,-,*,/+,−,∗,/: cả hai toán hạng phải là kiểu số (int/float, được phép trộn); kết quả float nếu có ít nhất một bên float hoặc opopop là /, ngược lại int. Toán hạng bool là lỗi.
    • <,≤,>,≥<, \le, >, \ge<,≤,>,≥: cả hai toán hạng phải là kiểu số (được phép trộn int/float); kết quả bool.
    • ==,≠==, \ne==,=: hai toán hạng phải cùng kiểu tuyệt đối (kể cả int so với float cũng là lỗi); kết quả bool.
    • &&,∣∣\&\&, ||&&,∣∣: cả hai toán hạng phải là bool; kết quả bool.
    • !!! (một ngôi): toán hạng phải là bool; kết quả bool.

    Nếu vi phạm bất kỳ luật nào, hoặc cấu trúc ngoặc không hợp lệ (thiếu/thừa token), in ERROR. Ngược lại in kiểu cuối cùng của toàn biểu thức.

    Ví dụ: với a: int, b: float, biểu thức ( < a b ) hợp lệ, kết quả bool; biểu thức ( == a b ) là lỗi vì so sánh bằng giữa int và float không được phép.

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

      Dòng đầu là số nguyên nnn — số biến khai báo. nnn dòng tiếp theo dạng <tên> <kiểu>. Dòng cuối cùng là biểu thức tiền tố có ngoặc, các token (bao gồm ( và )) cách nhau bởi khoảng trắng.

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

      In ra một dòng duy nhất: kiểu (int, float hoặc bool) của biểu thức, hoặc ERROR.

    Ví dụ:

    Đầu vào:

    0
    5
    

    Đầu ra:

    int
    

    Đầu vào:

    2
    a int
    b float
    ( < a b )
    

    Đầu ra:

    bool
    

    Đang tải editor...