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] Suy diễn kiểu biểu thức có chuỗi và lỗi kiểu

    Mở rộng bài toán suy diễn kiểu: biến có thể mang kiểu int, float, bool, hoặc string. Biểu thức gồm các toán tử hai ngôi + - * /, dấu ngoặc, biến, hằng số nguyên/thực, hằng true/false, và hằng chuỗi trong cặp nháy kép "..." (không chứa nháy kép lồng nhau).

    Luật kiểm tra kiểu áp dụng đệ quy từ trong ra ngoài cho từng toán tử:

    • +: nếu cả hai toán hạng là kiểu số (int/float) → kết quả là float nếu có ít nhất một bên float, ngược lại int. Nếu cả hai đều là string → kết quả string (nối chuỗi). Mọi kết hợp khác (trộn string với số/bool, hoặc có toán hạng bool) → lỗi kiểu.
    • - * /: cả hai toán hạng phải là kiểu số; kết quả là float nếu có ít nhất một bên float, ngược lại int. Nếu có toán hạng không phải kiểu số → lỗi kiểu.
    • Nếu một toán hạng con đã bị lỗi kiểu, toán tử cha cũng bị coi là lỗi (lỗi lan truyền lên toàn biểu thức).

    Cho khai báo biến và một biểu thức, in ra kiểu kết quả cuối cùng, hoặc ERROR nếu biểu thức có lỗi kiểu ở bất kỳ đâu.

    Ví dụ

    Input:
    2
    a int
    b string
    a + 1
    
    Output:
    int
    
    • Định dạng đầu vào:
      • Dòng 1: nnn (0≤n≤500 \le n \le 500≤n≤50).
      • nnn dòng: <tên biến> <kiểu> (kiểu ∈{int,float,bool,string}\in \{\text{int}, \text{float}, \text{bool}, \text{string}\}∈{int,float,bool,string}).
      • Dòng cuối: biểu thức (có thể chứa hằng chuỗi "...", hằng số, true/false, biến, + - * /, dấu ngoặc (), khoảng trắng).
    • Định dạng đầu ra:

      Một dòng: kiểu kết quả (int, float, string, hoặc bool nếu biểu thức chỉ gồm giá trị bool không qua toán tử số học/chuỗi nào), hoặc ERROR nếu có lỗi kiểu.

    Ví dụ:

    Đầu vào:

    2
    a int
    b string
    a + b
    

    Đầu ra:

    ERROR
    

    Đầu vào:

    2
    a int
    b string
    a + 1
    

    Đầu ra:

    int
    

    Đang tải editor...