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
- Host: GitHub
- URL: https://github.com/aykhm/yot-lang
- Owner: aykhm
- License: mit
- Created: 2020-05-21T02:39:35.000Z (almost 6 years ago)
- Default Branch: master
- Last Pushed: 2020-06-21T23:29:07.000Z (almost 6 years ago)
- Last Synced: 2025-10-25T23:55:11.511Z (5 months ago)
- Topics: llvm, rust
- Language: Rust
- Homepage: https://crates.io/crates/yotc
- Size: 45.9 KB
- Stars: 28
- Watchers: 1
- Forks: 2
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
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