LLVM frontend for yot - a toy language.
Loosely based off of LLVM Kaleidoscope
- Install LLVM 9.0
- Install yotc with
cargo install yotc - For automatic linking (a.k.a. default output format "executable"),
gccneeds to be in PATH - Usage:
yotc (path to file) - Run
yotc --helpfor more options
- Note: every variable is a 32-bit
intand functions must return anintas 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);
- Regular syntax
- Variables:
- Declaration with value
@a = 5; - Declaration without value (will be assigned to trash value)
@a; - Referencing a variable
@b = a + 5;
- Declaration with value
- Operations
- Available operations
=,+,-,*,/,==,!=,<,>,<=,>=.@a = (-b + 5) - 10 / -(5 - -2);
- Available operations
- Comments
- Comments start with
//and tokens are ignored until the end of the line
- Comments start with
- Programs
- A program consists of just top-level functions (no global variables yet)
mainfunction entry point
- Example
- See
examples/ - Run by first generating the object file of
equals_ten.yotwithyotc equals_ten.yot -f object-file - Compile and link
io.cppwithg++ io.cc equals_ten.oto generate an executable
- See
- 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