working compiler, still need to be debuged