Snakel

Snakel is an alternative universe version of Python created in 1989 by Tolly Edd in the gammaline universe
Syntax
Every program starts with a definition, to actually define a function, you can do this:
1: def name[arguments]; !Used for argumented functions
2: ignore !"ignore" will exit the function
3: def name:none; !Used for argumentless functions
4: ignore
translated into python:
def name(arguments):... def name():...
I/O in Snakel also exist:
1: def main:none;
2: tell["anything here"] !Prints "anything here" in one line
3: user !Gets user input. No argument required
translated into python:
print("""anything here""") input()
By the way. The strings are actually multi-liners so:
1: def main:none;
2: tell["multi
3: line"] !Prints "multi\nline"
translated into python:
print("""multi line""")
Now let's talk about the "ignore" and "end".
1: !We already know that "ignore" goes to the end of the function.
2: !But did you know that you can also ignore errors with "ignore" and with "test"?
3: test:1/0 !Will emit a DevideByZero error
4: ignore DevideByZero:tell["inf"] !Prints "inf" instead of emitting DevideByZero error
5: end !"end" just ends the program. Nothing special
translated into python:
try:1/0 except:print("""inf""") exit()
Also i think i kinda stole the logic of rust's case statements for Snakel conditional
1: num i=0
2: if i=0;tell[0] | i=1;end | tell[3]
translated into python:
i:int=0 if i==0:print(0) elif i==1:exit() else:print(3)
Snakel also has the feature of making multiple files in one file (just like in DreamBerd). You can also import that file to another file as a internal module
1: -one.sl-
2: tell["executed one.sl"]
3: -two.sl-
4: import file one.sl
5: tell["executed two.sl"]
Errors
- This is still a work in progress. It may be changed in the future.
If you make an error in the code (for example putting an undefined variable into the code) in a Snakel interpreter. Then the terminal (or emiter as it's called in the gammaline universe) will emit an error and will explain and show where you made a mistake
TypeError
Using a wrong type in a variable
code:
1: !for example
2: num a="eso"
emiter:
Current operation stopped
Error type:TypeError
At what line:line 2
Explanation:
2: num a="eso"
-----
Wrong value type. num is used as a's type, str was used instead
Not specifying a type or specify a non-existent type to a variable (as long as it's not defined)
code:
1: int i=user
emiter:
Current operation stopped
Error type:TypeError
At what line:line 1
Explanation:
1: int i=user
---
Invalid type. "int" is not a Type
Removing an entry that is not on the list
code:
1: l=["H","I"]
2: entry.pop(l,"!")
emiter:
Current operation stopped
Error type:TypeError
At what line:line 2
Explanation:
2: entry.pop(l,"!")
---
Pop non-related entry from list. "!" is not an element on list "l"
SyntaxError
Using anything BUT tabs or spaces as indentation
code:
1: def main:none;
2: ;tell["how"]
emiter:
Current operation stopped
Error type:SyntaxError
At what line:line 2
Explanation:
2: ;tell["how"]
^
Invalid indentation. A tab or 4 spaces must be used as the indentation, ";" was used instead
Examples
Hello, world!
1: def main:none;tell["Hello, world!\n"]
translated into python:
print("Hello, world!")
Cat program
1: def main:none;tell[user]
translated into python:
print(input())
Truth-machine
1: def truth:none;
2: num i=user
3: if i>0;ignore | tell[0];end
4: def main:none;
5: truth[]
6: while 1:tell[1]
translated into python:
def truth(): i:int=input() if int(i)>0:return else:print(0);exit() truth() while 1:print(1,end="")
A+B Problem
1: def APB [num[a,b]];tell[a+b]
2: def main:none;APB[7,4]
translated into python:
def APB (a:int,b:int):print(a+b) APB(7,4)