Git Product home page Git Product logo

tiger.cc's Introduction

tiger.cc

A tiger compiler in modern C++. Both frontend and backend are written without automatic tools. The official grammer reference manual(https://www.lrde.epita.fr/~tiger/tiger.html) has provied all infomation about The Tiger Programming Langugae. However, the EBNF in that manual isn't LL(k), so we can't implement parser by this EBNF in a recursive decline way. Therefore, I transform it to LL(1) grammer(detail).

TODO

  • lexer
  • parser
  • type checker
  • ir generation
  • backend

build & test

git clone https://github.com/xiebei1108/tiger.cc
cd tiger.cc
mkdir build && cd build
cmake .. && make

detail

AST

For example:

/* define a recursive function */
let
/* calculate n! */
function nfactor(n: int): int =
	if  n = 0
	then 1
	else n * nfactor(n-1)
in
	nfactor(10)
end

it's AST is:

LetExpr(
 Decs(
  FnDec(
   Id(
    nfactor
   )
   TypeFields(
    Id(
     n
    )
    TypeId(
     int
    )
   )
   IfExpr(
    BinaryExpr(
     Op(
      =
     )
     Lvar(
      Elem(
       Id(
        n
       )
      )
     )
     IntExpr(
      0
     )
    )
    IntExpr(
     1
    )
    BinaryExpr(
     Op(
      *
     )
     Lvar(
      Elem(
       Id(
        n
       )
      )
     )
     FnCall(
      Id(
       nfactor
      )
      BinaryExpr(
       Op(
        -
       )
       Lvar(
        Elem(
         Id(
          n
         )
        )
       )
       IntExpr(
        1
       )
      )
     )
    )
   )
  )
 )
 Exprs(
  FnCall(
   Id(
    nfactor
   )
   IntExpr(
    10
   )
  )
 )
)

target

tiger.cc's People

Contributors

dashahe avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar

Watchers

 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.