An open API service indexing awesome lists of open source software.

https://github.com/aykhm/yot-lang

LLVM frontend for Yot - a toy language
https://github.com/aykhm/yot-lang

llvm rust

Last synced: 10 days ago
JSON representation

LLVM frontend for Yot - a toy language

Awesome Lists containing this project

README

          

# Yotc
LLVM frontend for yot - a toy language.

*Loosely based off of LLVM Kaleidoscope*

# Running
* Install LLVM 9.0
* Install yotc with `cargo install yotc`
* For automatic linking (a.k.a. default output format "executable"), `gcc` needs to be in PATH
* Usage: `yotc (path to file)`
* Run `yotc --help` for more options

# Yot Syntax
* Note: every variable is a 32-bit `int` and functions must return an `int` as well. Comparison operators return 1 or 0
* Functions:
* Regular syntax
```
@sum[a, b] {
-> a + b // -> is the return keyword
}
```
* Short-hand notation for just return statement
```
@sum[a, b] -> a + b;
```
* External functions
```
@!print[_, _];
```
* Calling a function
```
sum(a, b);
```
* Variables:
* Declaration with value
```
@a = 5;
```
* Declaration without value (will be assigned to trash value)
```
@a;
```
* Referencing a variable
```
@b = a + 5;
```
* Operations
* Available operations `=`, `+`, `-`, `*`, `/`, `==`, `!=`, `<`, `>`, `<=`, `>=`.
```
@a = (-b + 5) - 10 / -(5 - -2);
```
* Comments
* Comments start with `//` and tokens are ignored until the end of the line
* Programs
* A program consists of just top-level functions (no global variables yet)
* `main` function entry point
* Example
* See `examples/`
* Run by first generating the object file of `equals_ten.yot` with `yotc equals_ten.yot -f object-file`
* Compile and link `io.cpp` with `g++ io.cc equals_ten.o` to generate an executable

# Todo
* If, for, while statements
* LLVM IR optimization
* Support printing string literals
* Better compiler errors
* Current errors are either vague or plain wrong and dont have any information about line number
* Most errors are caught by LLVM, meaning more ugly and vague error messages
* More data types (float, bool, char)
* Testing