以下に対応できるようにする
foo = 1;
bar = 2 + 3;
return foo + bar;
typedef struct LVar Lvar;
// local variable
struct LVar {
    LVar *next; // next variable or null
    char *name; // variable name
    int len; // name length
    int offset; // RBP offset
};
LVar *locals;
### if, while, for
アセンブラではcmpを使って、jumpしてend or biginに行くか処理をするか判定している
program = stmt *
stmt = expr ";"
	| "if" "(" expr ")" stmt ("else" stmt)?
	| "while" "(" expr ")" stmt
	| "for" "(" expr? ";" expr? ";" expr? ")" stmt
if
Aをコンパイルしたコード // スタックトップに結果が入っているはず pop rax cmp rax, 0 je .LendXXX Bをコンパイルしたコード .LendXXX:
if else
Aをコンパイルしたコード // スタックトップに結果が入っているはず pop rax cmp rax, 0 je .LelseXXX Bをコンパイルしたコード jmp .LendXXX .LelseXXX Cをコンパイルしたコード .LendXXX
while
.LbeginXXX: Aをコンパイルしたコード pop rax cmp rax, 0 je .LendXXX Bをコンパイルしたコード jmp .LbeginXXX .LendXXX:
for
Aをコンパイルしたコード .LbeginXXX: Bをコンパイルしたコード pop rax cmp rax, 0 je .LendXXX Dをコンパイルしたコード Cをコンパイルしたコード jmp .LbeginXXX .LendXXX:
 
					 
