refact ast
refact ast