do not use local function because Boost.Test asserts get line at the point of error

and update Guardfile to execute test continuously
add print_ast() member function

to get the ability to show AST
more comprehensive tests