7 releases
0.3.0 | Jun 21, 2020 |
---|---|
0.2.3 | Jun 3, 2020 |
0.2.2 | May 30, 2020 |
0.1.1 | May 23, 2020 |
#21 in #toy
54KB
1K
SLoC
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 anint
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);
- 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)
main
function entry point
- Example
- See
examples/
- Run by first generating the object file of
equals_ten.yot
withyotc equals_ten.yot -f object-file
- Compile and link
io.cpp
withg++ io.cc equals_ten.o
to generate an executable
- See
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
Dependencies
~3–12MB
~119K SLoC