Skip to content

A tiny compiler for a simple synthetic language featuring LL(2) grammar, written in pure C, with Lexer, Parser, ASM-like code generator and Virtual machine implemented

License

Notifications You must be signed in to change notification settings

nandesu/tiny-compiler

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

43 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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

The compiler consist of typical parts, known as:

The compiler is implemented for educational purposes. Some parts are simplified for the sake of better understanding

Build

$ gcc main.c -o compiler

Usage

$ ./compiler 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) ;

About

A tiny compiler for a simple synthetic language featuring LL(2) grammar, written in pure C, with Lexer, Parser, ASM-like code generator and Virtual machine implemented

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • C 66.2%
  • C++ 33.1%
  • Objective-C 0.7%