SeeLlash
Jump to navigation
Jump to search
SeeLlash is an esolang that is created by User:AnotherUser05, which she finally wrote an interpreter for an esolang before making the page for it.
Overview
The language is somewhat inspired by Brainfuck, but only uses 2 values, which one of them cannot be modified directly, which is called the Stored value. The value you can directly modify (like adding or subtracting) is called the Current value.
| Command | Function |
|---|---|
+ |
Increment the Current value by 1 |
- |
Decrement the Current value by 1 |
~ |
Move the Current value to the Stored, leaving behind a 0 |
` |
Move the Stored value to the Current, leaving behind a 0 |
^ |
Swap the Current with the Stored value |
, |
Ask for a single character, and set the Current to the Unicode code point of it |
. |
Output the character at the Unicode code point of the Current value |
; |
Ask for a number, and set the Current to it |
: |
Output the Current |
[ |
Jump past the matching ] if the Current is 0
|
] |
Jump back to the macthing [ if the Current is nonzero
|
( |
Initializes a fixed loop, iterates the amount of times determined by the Stored value |
) |
Jump back to the matching ( if its still iterating
|
Examples
A+B Problem
;~;(+):
Truth Machine
;[:]:
Fibonacci sequence
+[^:(+)]
Fixed Repeating Output
;~+(:)-:
Hello, World!
++++++++~(+++++++++).~+++++++^(++++)+.+++++++..+++.~+++++++++++^(------)-.~++^(------).~+++++++++^(++++++)+.~++++++^(++++).+++.------.--------.~+++++++++++^(------)-.
Implementation
An interpreter in python that hopefully works
def build_loop_map(code,open,close):
loop_stack = []
loop_map = {}
for i, char in enumerate(code):
if char == open:
loop_stack.append(i)
elif char == close:
start=loop_stack.pop()
loop_map[start]=i
loop_map[i]=start
return loop_map
def execute(code):
current = 0
stored = 0
index = 0
code = list(code)
brackets = build_loop_map(code,'[',']')
parenthesis = build_loop_map(code,'(',')')
iterations = {}
while True:
if index == len(code):
break
elif code[index] == "+":
current+=1
elif code[index] == "-":
current-=1
elif code[index] == "~":
stored = current
current=0
elif code[index] == "`":
current = stored
stored=0
elif code[index] == "^":
current,stored=stored,current
elif code[index] == ",":
current=ord(input("single character"))
elif code[index] == ".":
print(chr(current))
elif code[index] == ";":
current=int(input("number"))
elif code[index] == ":":
print(current)
elif code[index] == "[":
if current == 0: index=brackets[index]
elif code[index] == "]":
if current != 0: index=brackets[index]-1
elif code[index] == "(":
if index not in iterations: iterations[index]=stored-1
elif iterations[index]>0: iterations[index]-=1
else:
del iterations[index]
index=parenthesis[index]
elif code[index] == ")":
if iterations[parenthesis[index]]>0: index=parenthesis[index]-1
else: del iterations[parenthesis[index]]
index+=1