Recursive parser