use a more sophisticated AST implementation which is more consistent between attributes and childs and also now captures the parsing position