parsera are passed by value instead of by reference, ast now uses shared pointers, it shall make memory management more clear and automated