Skip to content
/ XSharp Public

A toy OOP language with lexer, parser, codegen and runtime

License

Notifications You must be signed in to change notification settings

XChy/XSharp

Repository files navigation

XSharp

A toy OOP language with lexer, parser, compiler and runtime

Not completed yet, and your contributions are highly appreciated

Background

Having learned about the theory of compiler, a dull coder try to develop something to have fun.

XSharp is compiled into the byte codes,and then run in a XSharp runtime environment.

Also it provide a way to generate native binary with LLVM

Install

This project can be built with CMake

Input the command below in to build XSharp Compiler in your computer(Only support Linux now)

# Install LLVM dependencies for XSharp
sudo apt install llvm-15

# Install toolchain for compiling XSharp
sudo apt install build-essential

git clone [email protected]:XChy/XSharp.git where/xsharp/lies/in

cd where/xsharp/lies/in
./buildRelease.sh

Usage

#default compile into a binary executable
bin/xsharpc xxx.xsharp

#compile into bytecode, not supported yet
bin/xsharpc -vm xxx.xsharp # compile into bytecode which can be executed by XSharp's VM
bin/xsharp xxx.xe          # execute the bytecode

Third-Party

  • LLVM (optional)

    XSharp can compile XSharp code into LLVM IR, which XSharp apply LLVM15(or above) to compile and optimize to generate binary.

  • FMT

    For format printing.

  • CLI11

    For CLI argument parser.

  • Boehm GC (Temporary GC, I may develop a unique one for XSharp later)

    For garbage collection.

TODOs

  • simple OOP
  • basic types
  • complete type conversion rules
  • module
  • match pattern

Syntax

  • Variable Declaration

i32 a = 2333;
  • Function Declaration

i32 abs(i32 a)
{
    if(a >= 0)
        return a
    else
        return -a;
}
  • Class Declaration

class foo
{
    i32 getAge()
    {
        return self.age;
    }

    void setAge(i32 age)
    {
        self.age = age;
    }

    i32 age;
}
  • HelloWorld

void main(){
    print("Hello,World!");
}
  • Hierarchy of Source

--XSharp
 |
 |- XSharp      # Main code of XSharp (Lexer, Parser)
 |- XSharpRuntime # Runtime for X#
 |- XSharpCLI   # Command-line Interface (xsharpc)
 |-
 |- LLVMIR      # Impliment AOT for xsharpc
 |- test        # Test driver

Releases

No releases published

Packages

No packages published

Languages