[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]
Harfler S(boşluk), T(sekme) ve N(yeni satır) yalnızca vurgulama olarak eklenmiştir.
[..._some_action]sadece açıklama olarak eklendi.
70 boşluk, 37 sekme ve 33 yeni satır kullanıldı.
Genellikle sırayla oluşturun Etiketleri kullanabilirsiniz NSSN, NSSSN, NSSTN, NSSSSN, NSSSTN, NSSTSN, NSSTTN, vb Ama ikili bir sayı baskı nedeniyle S=0/ T=1kullanılır ben çıkışa ihtiyacım sayısını etkiler, ben etiketleri kullanılan NSSN, NSSSN, NSSTNve NSSSTNbunun yerine, verdi İkili sayılarla SSSTSSSSTN(33; yeni satırların miktarı), SSSTSSTSTN(37; sekmelerin miktarı) ve SSSTSSSTTSN(70; boşlukların miktarı) basılacak mükemmel miktarda boşluk / sekme .
Sahte kodda açıklama:
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
Örnek çalışır:
Giriş: boşluk
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
Program bir hata ile duruyor: Tanımlanmış bir çıkış yok.
Çevrimiçi deneyin (yalnızca ham alanlar, sekmeler ve yeni satırlarla).
Giriş: sekme
Bunun yerine STDIN \t( 9) olacaktır , bu durumda 0ilk If 0kontrolde olacaktır, LABEL_TAB/ işaretine NSSSTNgidecektir ve 37yerine itip basacaktır .
Çevrimiçi deneyin (yalnızca ham alanlar, sekmeler ve yeni satırlarla).
Giriş: yeni hat
Bunun yerine STDIN \n( 10) olacaktır; bu durumda 0ikinci If 0kontrolde olacaktır, Label_NEWLINE/ konumuna gider NSSSNve 33yerine basıp yazdırır .
Çevrimiçi deneyin (yalnızca ham alanlar, sekmeler ve yeni satırlarla).
Giriş: başka bir şey
Başka herhangi bir giriş karakteri NSTNüçüncü çekimden sonra (Label_PRINT'e atla) yapacaktır If 0, 0bu da hala yığındaydı (en başında çoğalttığımız).
Çevrimiçi deneyin (yalnızca ham alanlar, sekmeler ve yeni satırlarla).