add walker

use debug_walker to replace debug in ast node
change dynamic_cast to virtual function,