Skip to content

dekokun/9cc

Repository files navigation

9cc

Build Status

C言語のコンパイラです。 低レイヤを知りたい人のための Cコンパイラ作成入門 を参考に作成しています

EBNF

program    = function*
function   = ident "(" ")" "{" stmt "}"
stmt       = expr ";"
           | "return" expr ";"
           | "if" "(" expr ")" stmt ("else" stmt)?
           | "while" "(" expr ")" stmt
           | "for" "(" expr? ";" expr? ";" expr? ")" stmt
           | "{" stmt* "}"
expr       = assign
assign     = equality ("=" assign)?
equality   = relational ("==" relational | "!=" relational)*
relational = add ("<" add | "<=" add | ">" add | ">=" add)*
add        = mul ("+" mul | "-" mul)*
mul        = unary ("*" unary | "/" unary)*
unary      = ("+" | "-")? term
term       = num
           | ident
           | ident("(" arguments ")")?
           | "(" expr ")"
arguments  = ε | non_empty_arguments
non_empty_arguments = term | non_empty_arguments