StupidStackLanguage
Jump to navigation
Jump to search

StupidStackLanguage (or SSL) is an esoteric programming language created by Lebster in which all operations take place on a Stack
SSL Uses the characters A-Z to perform actions. SSL is also case-insensitive.
Operations
Note: Items on the stack can only be numbers.
Character | Operation |
---|---|
a | Pushes 0 to the top of the stack |
b | Pops the 1st item from the stack |
c | Subtracts the 2nd item on the stack from the 1st item and pushes the result to the stack |
d | Decrements the 1st item of the stack by 1 |
e | Pushes the 1st item mod the 2nd item onto the stack |
f | Prints the 1st item on the stack as an ASCII character |
g | Adds the first 2 stack items together and pushes the result to the stack |
h | Gets input from the user as a number and pushes to the stack |
i | Increments the 1st item of the stack by 1 |
j | Gets input from the user as a character and pushes that character's ASCII code onto the stack |
k | Skips the next command if the 1st item on the stack is 0 |
l | Swaps the 1st and 2nd items on the stack |
m | Multiplies the first two stack items together and pushes the result onto the stack |
n | If the 1st item on the stack is equal to the 2nd item, push a 1 to the stack, else push a 0 |
o | Pops the (first item on the stack)th item on the stack |
p | Divides the 1st item on the stack by the 2nd item and pushes the result onto the stack |
q | Duplicates the 1st item on the stack |
r | Pushes the total length of the stack onto the stack |
s | Swaps the 1st and (first item on the stack)th items on the stack |
t | If the 1st item on the stack is 0, jumps to the corresponding 'u' in the program, otherwise does nothing |
u | If the 1st item on the stack is not 0, jumps back to the corresponding 't' in the program, otherwise does nothing |
v | Increments the top item on the stack by 5 |
w | Decrements the top item on the stack by 5 |
x | Prints the 1st item on the stack |
y | Deletes the entire stack |
z | Exits the script |
Examples
Hello World
avqmimcfdddfviiffvddfavdegmfavdmcwfwdddfvddfwdfwdddf
The online interpreter also features macros, so you can compile a "hello world" program using the print
macro:
.print("hello world")
Cat
jf
A+B Problem
hhgx
Truth-machine
htxux
Find the Factorial of a Number
hqdtmldubx
h # Set X q # Duplicate x (z) d # Decrement z (y) t # Begin loop m # Multiply y by x l # Swap result and y d # Decrement y u # End loop b # Pop remaining 0 x # Print (x!)
Calculator
hhhtdtdtblpxzubmxzublcxzubgxz
Usage
Takes 3 inputs, X, Y and Z
Z | Program output |
---|---|
0 | X + Y |
1 | X - Y |
2 | X * Y |
3 | X / Y |
Print the Fibonacci Sequence
# Note: Works best on tio.run as when run via command line it runs so fast that you can't really see any of the numbers. axiqvvdflxlwwltgavvfbxu
Print a box of any character
jfffavvflflqvvvviifblflflfff
Ackermann function
hhaitbltlanlbailtbbbdaiaaubtbdlqdlavdqslobaublubirdubx
hh # read m and n ait # loop while len(stack) > 1 b # drop stack length l # n m t # loop while m != 0 l # m n anlb # push case2=(n == 0) ail # push case3=1 to below top of stack tb # if case2 b # drop case3 b # drop n d # m -= 1 ai # push n=1 a # push case3=0 aub # endif tb # if case3 d # n -= 1 l # n-1 m qdl # n-1 m-1 m avdqslob # lift 3rd (stack: m-1 m n-1) aub # endif l # n m u b # drop m (== 0) i # n += 1 rd # push len(stack)-1 u b # drop stack length x # print result
Implementations
Website
You can use the website to run SSL code online. Note that this executes programs slower than the Python interpreter.
Python
There is also a python interpreter, which can be accessed on tio.run
import sys, re if len(sys.argv) < 2: print(f"Usage: python {sys.argv[0]} [filename]") sys.exit(1) file = open(sys.argv[1], "r") prg = file.read() file.close() stack = [] prg = re.compile("#(?=.*).*").sub("", prg) prg = re.compile("[^abcdefghijklmnopqrstuvwxyz]*", re.IGNORECASE).sub("", prg) prgPos = 0 shouldSkip = False while prgPos < len(prg): if shouldSkip: shouldSkip = False prgPos += 1 continue char = prg[prgPos].lower() if char == "a": stack.insert(0, 0) elif char == "b": stack.pop(0) elif char == "c": stack.insert(0, stack[0] - stack[1]) elif char == "d": stack[0] -= 1 elif char == "e": stack.insert(0, stack[0] % stack[1]) elif char == "f": print(chr(stack[0]), end="") elif char == "g": stack.insert(0, stack[0] + stack[1]) elif char == "h": stack.insert(0, int(input("\nNumber: "))) elif char == "i": stack[0] += 1 elif char == "j": stack.insert(0, ord(input("\nInput: ")[0])) elif char == "k" and stack[0] == 0: shouldSkip = True elif char == "l": temp = stack[1] stack[1] = stack[0] stack[0] = temp elif char == "m": stack.insert(0, (stack[0] * stack[1])) elif char == "n": stack.insert(0, int(stack[0] == stack[1])) elif char == "o": stack.pop(stack[0]) elif char == "p": stack.insert(0, stack[0] / stack[1]) elif char == "q": stack.insert(0, stack[0]) elif char == "r": stack.insert(0, len(stack)) elif char == "s": temp = stack[stack[0]] stack[stack[0]] = stack[0] stack[0] = temp elif char == "t": if stack[0] == 0: opened = 0 prgPos += 1 while prgPos < len(prg): if prg[prgPos] == "u" and opened == 0: break elif prg[prgPos] == "t": opened += 1 elif prg[prgPos] == "u": opened -= 1 prgPos += 1 elif char == "u": if stack[0] != 0: closed = 0 prgPos -= 1 while prgPos >= 0: if prg[prgPos] == "t" and closed == 0: break elif prg[prgPos] == "u": closed += 1 elif prg[prgPos] == "t": closed -= 1 prgPos -= 1 elif char == "v": stack[0] += 5 elif char == "w": stack[0] -= 5 elif char == "x": print(stack[0], end="") elif char == "y": stack = [] elif char == "z": sys.exit(0) else: print("Invalid character:", char, "at", prgPos) sys.exit(0) prgPos += 1
Usage
$ python SSL.py [filename]
Where [filename] is the name/path of a file containing the SSL program to execute
Comments
Comments can be written as such:
# Comment