User:Gilbert189/Jumble
- This article is just a draft. See User:Gilbert189#Drafts for more info.
Jumble is a letter-only, object-oriented esolang that consists of jumbled (maybe nonsensical) pseudo-English words (i guess). It is made by User:Gilbert189.
Note that proper Jumble code has no space nor symbols and numbers; it's a letter-only esolang. For example purposes, spaces has been added to codes so that the code becomes somewhat readable, but note that that program will fail to run.
Warm-up
Here's an example code in Jumble:
divintfarscttesteqsstop
If we add spaces to the code, it will become this:
div int far sct test eqs stop
The keyword div
defines something, in this case a number, signed by the int
keyword after it.
The far
keyword means we're defining a variable. The text encased in sct
and eqs
are the name of the variable.
Finally, we get stop
, which terminates the statement (like a semicolon).
Syntax
The overall syntax looks like this EBNF syntax:
literal = "sct", {? all allowed characters ?}, "end"; line = starting_statement, data_type, {argument, literal}, "stop"; program = {line};
To better explain the example codes, examples are formatted like this:
Jumble code Jumble code with spaces Java-ish code
Literal
There is only one literal in Jumble. It's encased in sct
and eqs
. Literals can store anything, from strings, numbers, and even codes.
Here's an example of a literal:
sctfooeqs sct foo eqs // Could be "foo", {foo}, [foo], or just foo.
div
starting statement
Keyword div
defines something. If used alone, it becomes an anonymous object with a null value.
divint div int new Double();
If used with the far
argument, it will assign a variable. (if used without far
, it will become a anonymous object)
divintfarsctnumbereqs div int far sct number eqs double number;
If used with the par
argument, it will assign inputs (for use with functions and classes)
divfunfarsctfooeqsparsctdivintfarsctnumbereqseqs div fun far sct foo eqs par sct div int far sct number eqs eqs function foo(int number);
If used with the kon
argument, it will assign the value of the object.
divstrfarsctfooeqskonsctbareqs div str far sct foo eqs kon sct bar eqs String foo = "bar";
net
starting statement
Keyword net
gets/executes something.
netint net int // nothing
The far
argument must be included at least once to define the variable.
netintfarsctnumbereqs net int far sct number eqs number; // a variable called number
If the far
argument is used more than once, it will act like a dot notation.
netklasfarsctsyseqsfarsctstdouteqsfarsctwriteeqs net klas far sct sys eqs far sct stdout eqs far sct write eqs sys.stdout.write;
If used with the par
argument, it will assign parameters of variable. The stop
keyword seperates parameters.
netklasfarsctsyseqsfarsctstdouteqsfarsctwriteeqsparsctnetintfarsctfooeqseqs net klas far sct sys eqs far sct stdout eqs far sct write eqs par sct net int far sct foo eqs eqs sys.stdout.write(foo);
Data types
There is 5 types of data in Jumble: int
, str
, are
, fun
, and klas
.
int
type
int
is a number. Despite its name, it's not restricted to integers. Since number characters aren't allowed, you have to use a workaround:
divintfarsctfooeqskonsctabcdefghijkaeqs div int far sct foo eqs kon sct abcdefghijka eqs double foo = "1234567890.1"
In this case, a
becomes 1
, b
becomes 2
, and so on until j
, which becomes 0
. k
becomes a decimal point.
str
type
str
is a string. Nothing unusual.
divstrfarsctfooeqskonsctbareqs div str far sct foo eqs kon sct bar eqs String foo = "bar"
Using par
instead of kon
will allow you to create string character by character:
divstrfarsctfooeqsparsctdivintkonsctcbeqseqs div str far sct foo eqs par sct div int kon sct cb eqs eqs String foo = " "
Here's how it works:
divstrfarsctfooeqs ------ defines a str variable named foo parsct eqs ------ using characters to make string divintkonsctcbeqs --------- number 32 is space in ASCII
You can seperate numbers by the stop
keyword.
are
type
are
is an array. It can store any data type.
divarefarsctfooeqskonsctdivstrfarsctfooeqskonsctbareqseqs div are far sct foo eqs kon sct div str far sct foo eqs kon sct bar eqs eqs Array foo = {"bar"}
You can seperate numbers by the stop
keyword.
Using par
will allow you to index the array:
divarefarsctfooeqsparsctdivintkonsctjeqseqs div are far sct foo eqs par sct div int kon sct j eqs eqs foo[0]
klas
type
klas
is a class. It
Some OOP junk
jazz
keyword
jazz
refers to the current object.
Code snippets
Here's some code snippets for you to learn.
Making a function
divfunfarsctfooeqsparsctdivintfarsctbareqseqskonsctnetklasfarsctsyseqsfarsctstdouteqsfarsctwriteeqsparsctnetintfarsctfooeqseqsstopeqsstop div fun far sct foo eqs par sct div int far sct bar eqs eqs kon sct net klas far sct sys eqs far sct stdout eqs far sct write eqs par sct net int far sct bar eqs eqs stop eqs stop function foo(double bar){ sys.stdout.write(bar); }