Add parser

fix bugs

add unit tests