replace `Option` with a custom `Action` type in `Visitor::visit`
add an `Ascend` action
allow the return value of `Visitor::end_children` to control the parser