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

MIT license

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 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

Dependencies

~3–12MB
~119K SLoC