You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
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"