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] Trình thông dịch tối giản cho chuỗi lệnh gán tuần tự

    Một chương trình trong ngôn ngữ tối giản gồm một dãy các câu lệnh gán, mỗi câu lệnh kết thúc bằng dấu ;, theo văn phạm:

    Program→Stmt∗Stmt→IDENT=E ;E→T  ((+∣−)  T)∗T→U  ((∗∣/)  U)∗U→−U  ∣  FF→NUMBER  ∣  IDENT  ∣  (E)\begin{aligned} \text{Program} &\to \text{Stmt}^* \\ \text{Stmt} &\to \text{IDENT} = E\,; \\ E &\to T\;((+|-)\;T)^* \\ T &\to U\;((*|/)\;U)^* \\ U &\to -U \;\mid\; F \\ F &\to \text{NUMBER} \;\mid\; \text{IDENT} \;\mid\; (E) \end{aligned}ProgramStmtETUF​→Stmt∗→IDENT=E;→T((+∣−)T)∗→U((∗∣/)U)∗→−U∣F→NUMBER∣IDENT∣(E)​

    trong đó IDENT là một chuỗi một hay nhiều chữ cái thường liên tiếp (tên biến, ví dụ total, x), NUMBER là số nguyên không âm. Phép / thực hiện chia nguyên làm tròn xuống (floor) như toán tử // của Python. Một biến ở vế phải nếu chưa từng được gán trước đó có giá trị mặc định 0. Một biến có thể được gán lại nhiều lần; hãy dùng bộ phân tích cú pháp đệ quy để phân tích và thực thi tuần tự từng câu lệnh theo đúng thứ tự xuất hiện trong chương trình.

    Ví dụ: chương trình x=3; y=4; z=x+y*2; cho x=3, y=4, z=3+4×2=11x=3,\,y=4,\,z=3+4\times2=11x=3,y=4,z=3+4×2=11.

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

      Toàn bộ input (có thể trên nhiều dòng, đọc tới hết EOF) là một chương trình gồm các câu lệnh gán như mô tả ở trên, mỗi câu lệnh kết thúc bằng ;. Độ dài input không quá 2000 ký tự.

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

      Nếu trong quá trình thực thi có phép chia cho 0 ở câu lệnh thứ kkk (đánh số từ 1), in ra đúng dòng ERROR at statement k và dừng lại, không in gì thêm. Ngược lại, in ra giá trị cuối cùng của mọi biến từng được gán, mỗi biến một dòng theo định dạng tên=giá_trị, theo đúng thứ tự biến đó được gán lần đầu tiên trong chương trình (không lặp lại tên biến đã in).

    Ví dụ:

    Đầu vào:

    a=10; a=a+1; b=a*2;

    Đầu ra:

    a=11
    b=22
    

    Đầu vào:

    x=3; y=4; z=x+y*2;

    Đầu ra:

    x=3
    y=4
    z=11
    

    Đang tải editor...