Skip to content

Latest commit

Β 

History

History
399 lines (276 loc) Β· 6.95 KB

README.md

File metadata and controls

399 lines (276 loc) Β· 6.95 KB

RizzScript

Yet another TypeScript esoteric programming language.

Setup

Install the dependencies:

npm install

Running

  • To run a specific file: npm run rizz <FILENAME>
  • To run in REPL mode: npm run rizz

Examples

Examples can be found at examples directory. To run them, use the following command:

npm run rizz ./examples/<FILENAME>

Both versions of the language are present:

  • base.rizz - The base version of the language (with the haha keywords)
  • transcribed.rizz - The transcribed version of the language (with the original interpreter's keywords)

Language

RizzScript features a custom interpreter built fully in TypeScript. Interpreter can interpret regular, the usual keywords (see more in /examples/transcribed.rizz) and the brainrot and slang words (see more further or in /examples/base.rizz).

Have fun!

Variables

Mutable variables are created using bet keyword. Variables are assigned using is keyword:

bet x is 10 ahh

Constant variables can be created using based keyword:

based y is 20 ahh

Note: You can only use ahh on declaring a variable.

Data Structures

Strings

Strings can be created with double quotes:

bet x is "hello, world!" ahh

You can also insert variables using the glue() function:

bet x is 0 ahh
bet y is glue("hello, ", x) ahh // "hello, user"

You can use RizzScript helper functions to manipulate strings:

bet x is haircut(" hello ") ahh // "hello"
bet y is slash("hello,world", ",") ahh // ["hello", "world"]

Numbers

Numbers are created as usual:

bet x is 10 ahh
bet aura is 20 ahh
bet guysAura is aura lose x ahh // 10
guysAura is guysAura gain x // 20

bet y is digits("123") ahh // 123

Null

Null value is represented by npc:

bet x is npc ahh // null

Booleans

Booleans are created using deadass and cap:

bet x is deadass ahh // true
bet y is cap ahh // false

Objects

Objects are created using curly braces {}. Objects support referencing variables:

bet x is deadass ahh
based obj is { "key": cap, x } ahh

obj.key is deadass
yap(obj.key) // true

Getting/setting dynamic keys is possible using global gang object:

gang.get(obj, "key") // e.g. true
gang.set(obj, "key", false) // e.g. { "key": false }

You can also get info on the keys of an object using gang:

gang.hasKey(obj, "key1") // e.g. true
gang.keys(obj) // e.g. ["key1", "key2", "key3"]

Arrays

Arrays contain information without keys. They are created using square brackets []:

bet arr is [1, 2, 3] ahh

arr[0] = 5

yap(arr) // [5, 2, 3]

Array's indexes start at 0.

Length of Data Structures

Lengths of strings, objects and arrays can be accessed using len global function:

bet x is "hello" ahh
bet y is [1, 2, 3] ahh
bet z is { "key": "value" } ahh

len(x) // 5
len(y) // 3
len(z) // 1

Comments

Comments are created using //:

// This is a comment

Or using /* */:

/* This is a
   multiline comment */

Functions

Function are created using rizz keyword:

rizz sayHello() {
  bet x is "hello" ahh
  yap(x)
}

sayHello() // "hello"

We, at RizzScript, believe that return is too mainstream. Instead, our supreme functions return the last value emitted.

rizz bruh(a, b) {
  a gain b // will do nothing
  a lose b // is returned
}

Functions can be ran after a specified timespan using lag:

lag(rizz() {
  yap("a few seconds later...")
}, 1500)

Functions can also be ran continously using yappachino:

yappachino(rizz() {
  yap("spams every second...")
}, 1000)

If Statements

Design of the if statements in RizzScript is very human.:

sus (5 fr 5) {
  yap("5 is 5")
} goon sus (5 nah 2) {
  yap("5 is not 2")
} goon sus (1 fr 3 maybe 1 fr 1) {
  yap("1 is 3 or 1")
} goon sus (1 fr 3 btw 1 fr 1) {
  yap("1 is 1 and 3. i think something is wrong xd")
} goon {
  yap("no way you reached here")
}

Loops

Loops in RizzScript are very simple:

grind (bet x is 0 ahh x smol 10 ahh x up) {
  yap(x)
}

We believe you should be responsible for your own loops. Therefore, we don't provide break or continue keyword functionality to loops.

Try Catch

Try catch blocks are also very human:

fuck_around {
  yap(npc gain skibidi)
} find_out {
  yap(error)
}
πŸ’€ Cannot resolve skibidi as it does not exist.

Note: find_out doesn't return anything, as "error" is a global variable.

Extras

Math

Utilize math by using nerd keyword:

yap(nerd.random(0, 100)) // integer from 0-100
yap(nerd.sqrt(144)) // 12
yap(nerd.pi) // 3.141592653589793
yap(nerd.e) // 2.718281828459045

We also added helper functions for your anxiety:

yap(nerd.ceil(3.4)) // 4
yap(nerd.round(3.9)) // 4
yap(nerd.abs(-2)) // 2

You can also simplify your math equations:

x stack 5 // +=
y london 6 // -=
z ratio 2 // /=
i up // ++
i down // --

Importing

You can lock_in data from another RizzScript file:

bet bro is lock_in("./bro.rizz") ahh

The last value emitted in a file will be the exported data:

rizz brosYapping1() {
    yap("RizzScript is bussin")
}
rizz brosYapping2() {
    yap("on god xd")
}

{
    brosYapping1,
    brosYapping2
}

If imported, the result will be an object, from which you can use obj.brosYapping1 and obj.brosYapping2

HTTP Requests

Use hit_up to make HTTP requests:

hit_up("https://example.rizz/")(rizz(data) {
  yap(data)
})

You can also set the method, body and content type:

hit_up(
  "https://example.rizz/", 
  { method: "POST", 
  body: "{\"rizzscript\":\"on_god\"}", 
  content_type: "application/json" })
  (rizz(data) {
    yap(data)
  }
)

Regex

Use regex to match a string with a regular expression pattern:

bet str is "hello world" ahh

bet matches is regex.match(str, "hello") ahh

yap(matches) // ["hello"]

Or replace a string with a regex pattern:

bet str is "hello world" ahh

yap(regex.replace(str, "world", "everybody")) // "hello everybody"

RZON

Rizz Object Notation πŸ—£οΈπŸ’―πŸ”₯ can be used with the rzon object:

rzon.parse("{\"rizzscript\": \"on_god\"}") // { rizzscript: "on_god" }
rzon.parse("[1, 2, 3]") // [1, 2, 3]
rzon.stringify({ rizzscript: "on_god" }) // '{"rizzscript": "on_god"}'
rzon.stringify([1, 2, 3]) // "[1, 2, 3]"

Ternary Operator

RizzScript supports ternary operator using then keyword:

bet x is 10 ahh
bet y is x thicc 15 then "thicc" maybe "smol" ahh

Exit

Exit the program using exit():

exit()
// πŸ”₯ srsly bruh...

Credits

Created with love by incandesc3nce πŸ’œ