詳しくは、付録3:Dockerを使った開発環境の作成。
docker build -t compilerbook https://www.sigbus.info/compilerbook/Dockerfile
docker run --rm compilerbook {コマンド}
--rm
: コマンド実行後コンテナを削除
docker run --rm -v {ホストのディレクトリ}:{コンテナ内のディレクトリ} -w {コンテナ内のディレクトリ} compilerbook make test
-v
: ホストのディレクトリをコンテナにマウントする-w
: コマンドを実行するディレクトリを指定する
program = funcdef*
funcdef = typ ident "(" (typ ident)? ("," typ ident)* ")" "{" stmt* "}"
typ = "*"* "int"
stmt = typ ident;
| expr ";"
| "{" stmt* "}"
| "if" "(" expr ")" stmt ("else" stmt)?
| "while" "(" expr ")" stmt
| "for" "(" expr? ";" expr? ";" expr? ")" stmt
| "return" expr ";"
expr = assign
assign = equality ("=" assign)?
equality = relational ("==" relational | "!=" relational)*
relational = add ("<" add | "<=" add | ">" add | ">=" add)*
add = mul ("+" mul | "-" mul)*
mul = unary ("*" unary | "/" unary)*
unary = "sizeof" unary
| ("+" | "-")? primary
| ("*" | "&") unary
primary = num
| ident ("(" expr? "," expr* ")")?
| "(" expr ")"