~!SayWrite

From Esolang
Jump to navigation Jump to search
~! ========================================================
~! ~!SayWrite — Complete Language Rules (valid program)
~! All variables are exactly 3 characters.
~! All operands are variables, never literal numbers.
~! ========================================================
~! ----- Constants (each exactly 3 chars) -----
let spc be 32   ~! space
let nln be 10   ~! newline
let zer be 0
let one be 1
let two be 2
let thr be 3
let fiv be 5
let ten be 10
~! ----- RULE 1: Variables = exactly 3 chars, start at 0 -----
let AAA be zer
let BBB be one
let AAA be BBB     ~! copy: AAA = 1
write AAA
say spc
~! ----- RULE 2: Labels = 1 to 5 chars after '_' -----
~! Labels: _R1 (R1 = 2 chars), _L2 (L2 = 2 chars), _End (End = 3 chars)
_R1
let CNT be thr
_L2
jez _End CNT
write CNT
say spc
sub one from CNT
jump _L2
_End
write zer
say nln
~! ----- RULE 3: Arithmetic (add,sub,mul,div,mod) -----
~! Div/mod by zero -> result 0 (no error)
let X__ be ten
let Y__ be thr
mul X__ to Y__     ~! Y__ = 30
write Y__
say spc
let Z__ be zer
div Z__ from Y__   ~! Y__ = 0 (division by zero)
write Y__
say spc
let M__ be fiv
mod Z__ to M__     ~! M__ = 0 (modulo by zero)
write M__
say nln
~! ----- RULE 4: Input (examples commented) -----
~! let NUM be user writing
~! write NUM
~! let CHR be user text
~! say CHR
~! ----- RULE 5: Output: write (number), say (Unicode) -----
~! Each variable is exactly 3 chars:
let Hc1 be 72   ~! 'H'
let ec1 be 101  ~! 'e'
let lc1 be 108  ~! 'l'
let oc1 be 111  ~! 'o'
let Wc1 be 87   ~! 'W'
let rc1 be 114  ~! 'r'
let dc1 be 100  ~! 'd'
let ex1 be 33   ~! '!'
say Hc1
say ec1
say lc1
say lc1
say oc1
say spc
say Wc1
say rc1
say lc1
say dc1
say ex1
say nln
~! ----- RULE 6: Conditional jumps: jez (==0), jeb (>=) -----
let Axx be fiv
let Bxx be two
jeb _Yes Axx Bxx   ~! 5 >= 2 → jump to _Yes
write zer          ~! skipped
_Yes
write Axx
say spc
write Bxx
say nln
~! ----- RULE 7: 'stop' ends program -----
stop

Page made by User:Timm