bugfix and refactor grammar
support do while statement