~!SayWrite
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