[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]
पत्र S
(स्थान), T
(टैब), और N
(नई-पंक्ति) केवल हाइलाइटिंग के रूप में जोड़े गए।
[..._some_action]
केवल स्पष्टीकरण के रूप में जोड़ा गया।
70 रिक्त स्थान, 37 टैब और 33 नई लाइनें उपयोग की गईं।
आम तौर पर मैं क्रम में लेबल बनाएं का उपयोग NSSN
, NSSSN
,NSSTN
, NSSSSN
, NSSSTN
, NSSTSN
, NSSTTN
, आदि लेकिन क्योंकि एक संख्या जहां द्विआधारी मुद्रण S=0
/ T=1
प्रयोग किया जाता है संख्या मैं उत्पादन करने की आवश्यकता को प्रभावित करता है, मैं लेबल का उपयोग किया NSSN
, NSSSN
, NSSTN
, और NSSSTN
बजाय, जो दे दी है बाइनरी नंबर SSSTSSSSTN
(33, नई लाइनों की राशि), SSSTSSTSTN
(37, टैब की राशि औरSSSTSSSTTSN
(70; रिक्त स्थान की राशि ।
छद्म कोड में स्पष्टीकरण:
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
उदाहरण चलता है:
इनपुट: स्पेस
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
प्रोग्राम एक त्रुटि के साथ बंद हो जाता है: कोई निकास निर्धारित नहीं।
इसे ऑनलाइन आज़माएं (कच्चे स्थान, टैब और नई-नई लाइनों के साथ)।
इनपुट: टैब
STDIN होगा \t
9
इसके बजाय ( ) होगा, जिस स्थिति में यह 0
पहली If 0
जांच में होगा, LABEL_TAB
/ को जाता है NSSSTN
, और धक्का देगा और प्रिंट करेगा37
इसके बजाय ।
इसे ऑनलाइन आज़माएं (कच्चे स्थान, टैब और नई-नई लाइनों के साथ)।
इनपुट: नई-लाइन
STDIN इसके बजाय \n
( 10
) होगा, जिस स्थिति में यह 0
दूसरे स्थान पर होगाIf 0
जांच में होगा, Label_NEWLINE
/ को जाता है NSSSN
, और धक्का देगा और प्रिंट करेगा33
इसके बजाय ।
इसे ऑनलाइन आज़माएं (कच्चे स्थान, टैब और नई-नई लाइनों के साथ)।
इनपुट: कुछ और
कोई भी अन्य इनपुट-कैरेक्टर NSTN
तीसरे के बाद (जंप टू लेबल_PRINT) करेगाIf 0
जांच के करेगा0
जो अभी भी स्टैक पर था (जिसे हमने बहुत शुरुआत में डुप्लिकेट किया है)।
इसे ऑनलाइन आज़माएं (कच्चे स्थान, टैब और नई-नई लाइनों के साथ)।