Zakirullin Tiny Compiler Save

A tiny compiler for a language featuring LL(2) with Lexer, Parser, ASM-like codegen and VM. Complex enough to give you a flavour of how the "real" thing works whilst not being a mere toy example

Project README

A tiny compiler for a simple synthetic language featuring LL(2) grammar, written in pure C

The compiler consist of typical parts, known as:

It is by no means a complete industry standard implementation. Some parts are simplified for the sake of better understanding

Build

$ cmake -S . -B 'build' && cmake --build 'build'

Usage

$ ./build/tinycompiler <source>

An example program for Pythagorean theorem:

cath1 = 3;
cath2 = 4;
hypsquare = cath1 * cath1 + cath2 * cath2;

Execution result:

hypsquare = 25

Generated ASM:

PUSH 3
WRITE cath1
PUSH 4
WRITE cath2
READ cath1
READ cath1
MUL POP, POP
READ cath2
READ cath2
MUL POP, POP
ADD POP, POP
WRITE hypsquare

The language description in EBNF:

program = expr, ";", { program } ;
expr = id, "=", expr | term, { ("+"|"-"), term } ;
term = factor, { ("*"|"/"), factor } ;
factor = "id" | "num" | "(", expr, ")" ;
Open Source Agenda is not affiliated with "Zakirullin Tiny Compiler" Project. README Source: zakirullin/tiny-compiler
Stars
537
Open Issues
1
Last Commit
1 year ago
License
MIT

Open Source Agenda Badge

Open Source Agenda Rating