[S S S N
_Push_0][S N
S _Duplicate][S N
S _Duplicate][T N
T S _Read_STDIN_as_character][T T T _Retrieve][S S S T S S T N
_Push_9][T S S T _Subtract][S N
S _Duplicate][N
T S S T N
_If_0_Jump_to_Label_TAB][S S S T N
_Push_1][T S S T _Subtract][S N
S _Duplicate][N
T S S N
_If_0_Jump_to_Label_NEWLINE][S S S T S T T S N
_Push_22][T S S T _Subtract][N
T S T N
_If_0_Jump_to_Label_SPACE][N
S T N
_Jump_to_Label_PRINT][N
S S S T N
_Create_Label_TAB][S S S T S S T S T N
_Push_37][N
S T N
_Jump_to_Label_PRINT][N
S S S N
_Create_Label_NEWLINE][S S S T S S S S T N
_Push_33][N
S T N
_Jump_to_Label_PRINT][N
S S T N
_Create_Label_SPACE][S S S T S S S T T S N
_Push_70][N
S S N
_Create_Label_PRINT][T N
S T _Print_as_integer]
Chữ cái S(dấu cách), T(tab) và N(dòng mới) được thêm vào dưới dạng chỉ tô sáng.
[..._some_action]chỉ thêm vào giải thích.
70 dấu cách, 37 tab và 33 dòng mới được sử dụng.
Thông thường tôi sử dụng Tạo Labels theo thứ tự NSSN, NSSSN, NSSTN, NSSSSN, NSSSTN, NSSTSN,NSSTTN , vv Nhưng vì in một số nơi nhị phân S=0/ T=1được sử dụng ảnh hưởng đến số tôi cần phải đầu ra, tôi đã sử dụng nhãn NSSN, NSSSN, NSSTN, và NSSSTNthay vào đó, đã mang đến cho số lượng không gian / tab hoàn hảo sẽ được in bằng các số nhị phân SSSTSSSSTN(33; số lượng dòng mới), SSSTSSTSTN(37; số lượng tab) và SSSTSSSTTSN(70; số lượng khoảng trắng).
Giải thích bằng mã giả:
Character c = STDIN-input as character
If c is a tab:
Print 37
Else if c is a new-line:
Print 33
Else if c is a space:
Print 70
Else
Print 0
Ví dụ chạy:
Đầu vào: không gian
Command Explanation Stack Heap STDIN STDOUT STDERR
SSSN Push 0 [0]
SNS Duplicate top (0) [0,0]
SNS Duplicate top (0) [0,0,0]
TNTS Read STDIN as character [0,0] {0:32} \n
TTT Retrieve [0,32] {0:32}
SSSTSSTN Push 9 [0,32,9] {0:32}
TSST Subtract top two (32-9) [0,23] {0:32}
SNS Duplicate top (23) [0,23,23] {0:32}
NTSSTN If 0: Jump to Label_TAB [0,23] {0:32}
SSSTN Push 1 [0,23,1] {0:32}
TSST Subtract top two (23-1) [0,22] {0:32}
SNS Duplicate top (22) [0,22,22] {0:32}
NTSSN If 0: Jump to Label_NEWLINE [0,22] {0:32}
SSSTSTTSN Push 22 [0,22,22] {0:32}
TSST Subtract top two (22-22) [0,0] {0:32}
NTSTN If 0: Jump to Label_SPACE [0] {0:32}
NSSTN Create Label_SPACE [0] {0:32}
SSSTSSSTTSN Push 70 [0,70] {0:32}
NSTN Jump to Label_PRINT [0,70] {0:32}
NSSN Create Label_PRINT [0,70] {0:32}
TNST Print as integer [0] {0:32} 70
error
Chương trình dừng với một lỗi: Không có lối ra được xác định.
Dùng thử trực tuyến (chỉ có khoảng trắng, tab và dòng mới).
Đầu vào: tab
STDIN sẽ là \t( 9) thay vào đó, trong trường hợp đó nó sẽ 0ở đầu tiênIf 0 kiểm tra , đi đến LABEL_TAB/ NSSSTN, và sẽ đẩy và in37 thay thế.
Dùng thử trực tuyến (chỉ có khoảng trắng, tab và dòng mới).
Đầu vào: dòng mới
STDIN sẽ là \n( 10) thay vào đó, trong trường hợp đó, nó sẽ 0ở lần If 0kiểm tra thứ hai , đi đến Label_NEWLINE/ NSSSN, và sẽ đẩy và in33 thay thế.
Dùng thử trực tuyến (chỉ có khoảng trắng, tab và dòng mới).
Đầu vào: bất cứ điều gì khác
Bất kỳ ký tự đầu vào nào khác cũng sẽ làm NSTN(Chuyển đến Label_PRINT) sau lần If 0kiểm tra thứ ba , in0 vẫn còn trên ngăn xếp (mà chúng tôi đã nhân đôi ngay từ đầu).
Dùng thử trực tuyến (chỉ có khoảng trắng, tab và dòng mới).