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 tham số khi gọi hàm

    Cho một tập hợp các hàm đã khai báo (không nạp chồng — overload — mỗi tên hàm chỉ ứng với một chữ ký duy nhất), mỗi hàm có danh sách kiểu tham số theo đúng thứ tự. Khi kiểm tra một lời gọi hàm, trình biên dịch xác nhận lần lượt:

    1. Hàm được gọi đã tồn tại.
    2. Số lượng đối số truyền vào bằng đúng số lượng tham số của hàm.
    3. Kiểu của từng đối số phải gán được (assignable) cho kiểu tham số tương ứng theo luật ép kiểu ngầm định: bool → bool/int/float; int → int/float; float → float; string → string (không còn phép ép kiểu nào khác).

    Lời gọi hợp lệ (OK) khi cả ba điều kiện trên đều thỏa; ngược lại là ERROR.

    Ví dụ

    Input:
    2
    add 2 int int
    greet 1 string
    2
    add 2 int int
    greet 1 int
    
    Output:
    OK
    ERROR
    
    • Định dạng đầu vào:
      • Dòng 1: kkk (0≤k≤500 \le k \le 500≤k≤50) — số hàm khai báo.
      • kkk dòng, mỗi dòng: <tên hàm> <số tham số p> <kiểu 1> ... <kiểu p> (nếu p=0p=0p=0 thì dòng chỉ có <tên hàm> 0).
      • Dòng tiếp theo: qqq (0≤q≤500 \le q \le 500≤q≤50) — số lời gọi cần kiểm tra.
      • qqq dòng, mỗi dòng: <tên hàm> <số đối số r> <kiểu đối số 1> ... <kiểu đối số r>.
    • Định dạng đầu ra:

      In ra qqq dòng, mỗi dòng OK hoặc ERROR tương ứng với từng lời gọi, theo đúng thứ tự.

    Ví dụ:

    Đầu vào:

    1
    add 2 int int
    4
    add 2 int int
    add 2 bool bool
    add 1 int
    sub 2 int int
    

    Đầu ra:

    OK
    OK
    ERROR
    ERROR
    

    Đầu vào:

    0
    0
    

    Đầu ra:

    
    

    Đang tải editor...