[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
ตัวอย่างการทำงาน:
อินพุต: space
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
(ข้ามไปที่ Label_PRINT) หลังจากการIf 0
ตรวจสอบครั้งที่สามโดยการพิมพ์0
ที่ยังคงอยู่ในสแต็ก (ซึ่งเราได้ทำซ้ำตั้งแต่เริ่มต้น)
ลองใช้ออนไลน์ (ด้วยพื้นที่ว่างเปล่าแท็บและบรรทัดใหม่เท่านั้น)