hcc

C


HaskellC
Haskell
Rytl

9cctiger


haskell
$ docker build -t hcc .
$ docker run -v "$PWD"/.:/home --rm -ti hcc
$ stack build
$ stack exec hcc-exe "(3 + 4) - 3 * 5 / 4;" > tmp.s
# gcc -g main.c tmp.s -o tmp
# ./tmp
# echo $?
gdb使
# gcc -g main.c tmp.s -o tmp
# gdb ./tmp gdb
gdb使
HaskellAST
src ghci :l Parser.hs
run program "1+2" AST
:r
parser
$ stack test
$ stack build
$ cd test/tests
$ ./test.sh
$ ./test.sh


DockerHaskell
test.sh
test.sh $ runhaskell main.hs 42 > tmp.s

HaskellLLVMJIT



Parsec使
Haskell
ASTAsm
BNF
*


todo
parser
chainl1
Either Monad
gen
Except使
Parsectmp.s
assign
README
features
local var
description
C Compiler in Haskell with Parsec
gen..
'3;'
NG
codeGen
codeGenforNop, 0, 1

Monad


CPU
s
mov dst, [src]
src
dst
ex
rax0x8000
s
mov rdi, [rax]
rax0x8000rdi
s
mov [dst], src
dstsrc
pushpop
s
// 2
pop rax
mov rax, [rsp]
add rsp, 8
s
// 2
push rax
sub rsp, 8
mov [rsp], rax



13:
14:
15:
16: &*
17: int
18:
19:
20: sizeof
21:
22:
23:
24:
25:
26:
27:
28: C
29
C
C
1x86-64
2Git
Git使
Git