improve lexer

1. support keywords and literals in grammar
2. remove tokens defined in Grammar, every token should be user-defined
3. add `curpos` attribute into Token
4. modify Calc as an example to show some best practices