Skip to content

Am3ra/C-Interpreter

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

85 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Rust

Cyclone

Writing and Improvising a C-Clone interpreter

The language tokens being considered are:

TOKEN EXAMPLE
LBRACE ' { '
RBRACE ' } '
LPAREN ' ( '
RPAREN ' ) '
ASSIGN ' = '
COMMA ' , '
DIGIT 123
FLOAT 3.14
ADDOP ' + ' , ' - '
MULOP ' * ' , ' / ', ' % '
LT ' < '
GT ' > '
EQ ' =='
LE ' <='
GE ' >= '
TYPE ' int '
IDENT ' i ' , ' tree '

The production rules to evaluating code:

Note, the terms in capitals imply the token should be consumed when parsing

name definition
program MAIN block
block LBRACE statement_list RBRACE
statement_list [statement *(SEMI statement) [SEMI]]
statement (expr SEMI | declaration | block)
expr addop *(ASSIGN expr)
addop term *((PLUS/MINUS) expr)
mulop atom ((MUL/DIV) expr)
atom (PLUS/MINUS) atom | INTEGER | LPAREN expr RPAREN | IDENTIFIER
declaration type IDENTIFIER [ASSIGN expr] SEMI
type INT,FLOAT //TODO: IMPLEMENT FLOAT

Pay attention to the definition of statement list, here I'm saying that it is possible to have an empty statement list, as well as that the last statement doesn't necesarily need a closing SEMI. This is because I'm using rust syntax, in which if the last statement doesn't use a closing semi, it is considered a return value.

Proposed Grammar for future versions:

name definition
function TYPE IDENTIFIER argument_list block
argument_list LPAREN argument *(COMMA argument) RPAREN
argument TYPE IDENT

About

Writing and improving a C interpreter from the book "Born to Code in C"

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published