Crates.io | mangle |
lib.rs | mangle |
version | 0.0.5 |
source | src |
created_at | 2022-04-02 05:03:31.458804 |
updated_at | 2022-04-06 00:17:58.199143 |
description | Exolang that can take any utf8 text as valid code and return some result out of it |
homepage | https://mangle.ga |
repository | https://github.com/matheusfillipe/mangle |
max_upload_size | |
id | 560668 |
size | 45,381 |
An exolang (A scripting programming language just for fun) without any reserved keywords that can run any utf8 compatible with more than 2 space separated words on it.
cargo install mangle
Python bindings are available for python > 3.7. You can install them with:
pip install mangle
Then you can get started evaluating mangle from python with:
import mangle
mangle.eval("cat is fat")
>> '5'
More info at: https://github.com/matheusfillipe/mangle/tree/master/python
There are only labels, variables and operators. All variables are globally scoped, there are no locals, classes or anything fancy. All variables are dynamically typed and shadowed.
The only type of scope is sentences. Sentences are like english sentences, any text that comes before the punctuation marks: .,;:?!
. All the other symbols will be interpreted as variable names, operators, labels, strings or numbers.
If a text has none of those punctuation marks it will run as a single sentence.
The label of a sentence is the last word before the punctuation mark except by the first sentence. Labels are the way to have subroutines on this language. They define a scope with a body that you can goto
from any other subroutine.
The first sentence on the interpreted code is the equivalent of the main function in another languages, so it has no need for a label. If the first sentence doesn't call any function, all the others labels will execute in the order they are until you exit or jump to another label.
The only types are strings, ints and stacks.
The length of a word - 1
define its numerical value. For example "a" evaluates to 0 and "cat" to 2.
The words themselves can be also interpreted as strings. You can't easily build multiword strings like "a bird" though since that would read as: "a
and bird"
each as individual words.
Strings themselves are a stack of ints that the interpreter itself decodes at runtime. You can add ints to a stack by adding to its variable.
WIP...
Operators are defined by the word's length. Here is the table of operators on this language
Word Length | Operator | syntax | Example | Description |
---|---|---|---|---|
1 | ||||
2 | Assign | OP receiver Value | is cat fat | Assigns variable cat to value 3 |
3 | ||||
4 | ||||
5 | ||||
6 | ||||
7 | ||||
8 | ||||
9 | ||||
10 | ||||
11 |
Well... In some interpretation yes, I guess I lied then, sorry about it. You can still pass the -F
argument to change the word separator (like field separator in awk) to any other character.