refactor structure, add generic lr parser

it's hard to say whether it's a good design, since we need use
parser/grammar/* to instantiate actual parser, which could be a burden
add parser node

still try to figure out how to generate ast