Entierly use AST