Lolang is a simple, fun to use, register based programming language.
Its name derives itself from the expression "lol", as well as a short term for low-level-language. In Lolang, every command should refer to a common english slang word, what ensures, that programming in Lolang is always modern and a lot of fun.
Memory is abstracted as a continuous space of registers (in fancy words, a register number is a virtual address for a memory location).
Lolang is held simple, so that new programmers (noobs) will find it easy to write their first programs. Therefore a single reference to the operational register is maintained.
Command | Description
--- | ---
trololol... | Increases operational register by number of 'ol's minus 1 (initializes with 0)
lololol... | Decreases operational register by number of 'ol's minus 1
rofl | If operational register is equal to 0, go to the command after the next
copter, otherwise continue
copter | Go to most previous
moolah | Increase operational register reference by one
yolo | Decrease operational register reference by one
dope | Set operational register reference to the value of the operational register
bra<number> | Set operational register reference to the specified number
fuuu... | Copy the value of the operational register to the register with the index of the number of 'u's minus 1 and set the operational register reference to that
<whitespace> | Sequence operator: execute the command before if one exists, and then execute the command after
A few more things
- Lolang source files should have the file extension .lol
- Because Lolang is such a simplistic language, comments should not be necessary and are therefore not included (though they might be included in future releases)
This package provides an implementation of Lolang: lolc. lolc is a compiler for Lolang, written in Swift, which compiles to LLVM IR and therefore acts as a frontend to LLVM.
lolc <source> [options] where options are:
option | description
--- | ---
-o <path> | specify destination file
-l | output LLVM IR
-a | output assembly file
-b | output object file
-O<char> | optimization level [
-l -a -b are greedy in this order, meaning if
-l is specified, the other two are ignored and if
-a is specified,
-b is ignored
- lolc uses a custom memory management with multi-level page tables.
- pages are allocated when accessed
- a page holds 2048 bytes, or 256 registers
- a register is 64 bit and a register index 40 bit wide
- a page table has the size of a page
lolc requires LLVM 5 and a C standard library, if you don't have them now, install them.
ld should also be in your
PATH, if they are not, make sure this is the case.
lolc is written in Swift. So to build it it is necessary to have Swift 4 installed.
- clone this repository
ldare in your
PATH. They can normally be found in the
bindirectory of your LLVM installation directory.
- Create a pkg-config file for your LLVM installation. A utility is provided for this in the
- Build with
swift build -c release
- Fetch the executable at the specified location, normally at
.build/release/lolcand place it where you want.
Thanks a lot to the authors of the above projects.
This project is released under the MIT license