Cho văn phạm sinh biểu thức số học không đệ quy trái sau (đã loại bỏ đệ quy trái để dùng cho phân tích cú pháp đệ quy):
EE′TT′F→T E′→+ T E′∣− T E′∣ε→F T′→∗ F T′∣/ F T′∣ε→( E )∣soˆˊMỗi ký hiệu chưa kết thúc E,E′,T,T′,F tương ứng đúng một hàm đệ quy cùng tên. Khi phân tích một biểu thức, các hàm gọi lẫn nhau đúng theo thứ tự vế phải của luật sinh, từ trái sang phải: mỗi lần một hàm bắt đầu thực thi (được gọi), độ sâu ngăn xếp gọi hàm tăng thêm 1 đơn vị; khi hàm đó kết thúc (return), độ sâu giảm đi 1 đơn vị. Lời gọi khởi đầu là E() ở độ sâu 1.
Ví dụ với luật F→( E ): khi F gặp dấu (, nó gọi E (lồng bên trong F), rồi mới xử lý tiếp dấu ).
Cho một biểu thức hợp lệ theo văn phạm trên (không cần xử lý lỗi), hãy xác định độ sâu lớn nhất mà ngăn xếp gọi hàm đạt tới trong toàn bộ quá trình phân tích cú pháp đệ quy nói trên.
Ví dụ: với biểu thức 1+2:
1, F trả về (độ sâu 2), T gọi T′ (độ sâu 3, gặp + không khớp * / nên dừng ngay), T′ trả về (độ sâu 2), T trả về (độ sâu 1)+, E′ gọi T (độ sâu 3) → T gọi F (độ sâu 4) đọc 2 → trả về, T gọi T′ (độ sâu 4, dừng ngay) → trả về, T trả về (độ sâu 2); E′ gọi E′ đệ quy (độ sâu 3, gặp hết chuỗi nên dừng) → trả vềĐộ sâu lớn nhất đạt được là 4 (tại lời gọi F đọc số 2).
Một dòng duy nhất chứa biểu thức, gồm các chữ số 0-9 (số nguyên không âm, có thể nhiều chữ số), các toán tử + - * / và dấu ngoặc tròn ( ), không chứa dấu cách. Biểu thức được đảm bảo hợp lệ theo văn phạm đã cho. Độ dài biểu thức không quá 200 ký tự.
Một số nguyên duy nhất — độ sâu lớn nhất của ngăn xếp gọi hàm đệ quy khi phân tích biểu thức, theo đúng quy tắc gọi hàm mô tả ở trên.
Ví dụ:
Đầu vào:
1+2
Đầu ra:
4
Đầu vào:
5
Đầu ra:
3
Đang tải editor...