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] Máy ảo ngăn xếp với biến

    Một máy ảo ngăn xếp (stack machine) đơn giản có 26 biến toàn cục đặt tên bằng các chữ cái thường a..z, tất cả khởi tạo giá trị 000, và một ngăn xếp (stack) số nguyên ban đầu rỗng. Máy hỗ trợ các lệnh sau, thực thi tuần tự từ trên xuống:

    • PUSH n: đẩy số nguyên nnn vào ngăn xếp.
    • LOAD x: đẩy giá trị hiện tại của biến xxx vào ngăn xếp.
    • STORE x: lấy (pop) phần tử trên đỉnh ngăn xếp, gán vào biến xxx.
    • ADD, SUB, MUL, DIV: lấy ra hai phần tử trên đỉnh, gọi bbb là phần tử lấy ra trước (đỉnh), aaa là phần tử lấy ra sau, tính a op ba\ \text{op}\ ba op b rồi đẩy kết quả trở lại ngăn xếp. Phép chia lấy phần nguyên làm tròn về 0.
    • PRINT: lấy (pop) phần tử trên đỉnh ngăn xếp và in ra (mỗi lần PRINT in trên một dòng).

    Cho một chương trình gồm các lệnh trên (không có nhãn, không có lệnh nhảy), hãy mô phỏng và in ra tất cả giá trị được PRINT, theo đúng thứ tự thực thi.

    Ví dụ: chương trình

    PUSH 3
    PUSH 4
    ADD
    PRINT
    

    in ra 7.

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

      Dòng 1: số nguyên mmm (1≤m≤5001 \le m \le 5001≤m≤500) - số lệnh của chương trình. mmm dòng tiếp theo, mỗi dòng là một lệnh theo đúng một trong các định dạng: PUSH n (số nguyên nnn, ∣n∣≤106|n| \le 10^6∣n∣≤106), LOAD x, STORE x (xxx là một chữ cái thường), ADD, SUB, MUL, DIV, PRINT. Dữ liệu đảm bảo chương trình hợp lệ: ngăn xếp không bao giờ bị thiếu phần tử khi cần lấy ra, và không có phép chia cho 0.

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

      Với mỗi lệnh PRINT được thực thi (theo đúng thứ tự), in ra giá trị bị lấy ra khỏi ngăn xếp tại thời điểm đó, mỗi giá trị trên một dòng.

    Ví dụ:

    Đầu vào:

    4
    PUSH 3
    PUSH 4
    ADD
    PRINT
    

    Đầu ra:

    7
    

    Đầu vào:

    8
    PUSH 5
    STORE x
    LOAD x
    LOAD x
    MUL
    PRINT
    LOAD x
    PRINT
    

    Đầu ra:

    25
    5
    

    Đang tải editor...