[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 होगा \t9 इसके बजाय ( ) होगा, जिस स्थिति में यह 0पहली If 0जांच में होगा, LABEL_TAB/ को जाता है NSSSTN, और धक्का देगा और प्रिंट करेगा37 इसके बजाय ।
इसे ऑनलाइन आज़माएं (कच्चे स्थान, टैब और नई-नई लाइनों के साथ)।
इनपुट: नई-लाइन
STDIN इसके बजाय \n( 10) होगा, जिस स्थिति में यह 0दूसरे स्थान पर होगाIf 0 जांच में होगा, Label_NEWLINE/ को जाता है NSSSN, और धक्का देगा और प्रिंट करेगा33 इसके बजाय ।
इसे ऑनलाइन आज़माएं (कच्चे स्थान, टैब और नई-नई लाइनों के साथ)।
इनपुट: कुछ और
कोई भी अन्य इनपुट-कैरेक्टर NSTNतीसरे के बाद (जंप टू लेबल_PRINT) करेगाIf 0 जांच के करेगा0 जो अभी भी स्टैक पर था (जिसे हमने बहुत शुरुआत में डुप्लिकेट किया है)।
इसे ऑनलाइन आज़माएं (कच्चे स्थान, टैब और नई-नई लाइनों के साथ)।