Coder Social home page Coder Social logo

acrylicshrimp / testlang-rust Goto Github PK

View Code? Open in Web Editor NEW
8.0 2.0 0.0 665 KB

A rust implemented compiler front-end project includes CLR parser generator that uses LLVM as back-end.

Rust 100.00%
parser parser-generator compiler compiler-frontend llvm llvm-frontend

testlang-rust's Introduction

testlang-rust

A powerful and minimal language.

Concept

The main concepts of this language are set to be a simple, high performance, human-friendly and less-verbose.

  • No inheritance
  • No method overloading
  • No main function
  • Consistent reusable syntax
  • Minimal keywords

Hello, world!

println('Hello, world!');

Compiler

The reference compiler is written in Rust and uses LLVM and backend.

Structure

  • src/rule: Parses a rule file and generates a CLR parsing table.
  • src/parser.rs: Parses tokens from a lexer and generates an AST. This parser is driven by a parsing table.
  • src/lexer.rs: Supplies tokens to a parser by reading given input.
  • src/codegen: Generates LLVM IR codes.

Rule file

The rule crate requires a valid rule file to generate a parsing table. This rule file is similar to the BNF notation except for that it is not supports alternations(| symbol).

Basic form

It is super easy to define a new non-terminal. Don't forget to add an @ sign as a first letter for each non-terminal.

non-terminal-name: terminal @non-terminal terminal @non-terminal ... ;

If you want to use alternations, define it multiple times.

statement: @if-statement;
statement: @for-statement;
statement: @while-statement;
statement: @var-declare-statement semicolon;
...

Every terminals should be defined in lexer.ts too.

Root non-terminal

Any valid rule files must define a root non-terminal __root(double underscore). This root non-terminal cannot be defined multiple times. After successful parsing, the parser may return an AST named S for below rules.

__root = @S;

S: ...

testlang-rust's People

Contributors

acrylicshrimp avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.