yotc

Crates.ioyotc
lib.rsyotc
version0.3.0
sourcesrc
created_at2020-05-21 02:41:16.57067
updated_at2020-06-21 23:29:41.294149
descriptionLLVM frontend for yot - a toy language.
homepagehttps://github.com/akmin04/yot-lang
repositoryhttps://github.com/akmin04/yot-lang
max_upload_size
id243995
size66,883
Andrew (Andy) Min (akmin04)

documentation

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
Commit count: 7

cargo fmt