A parse tree is a structured representation produced by parsing source code. It records how expressions are grouped so later phases can analyze or transform them without repeatedly processing raw text. section 9.4
A pretty printer can be organized into three phases: parse source into a tree, transform the tree into a document describing grouping and indentation, then render that document as a string. An immutable expression hierarchy can represent identifiers, parentheses, addition, multiplication, member access, and calls. section 9.4
Keeping formatting rules outside the tree avoids coupling the parse representation to one operation or one team. The same tree can support pretty-printing, syntax coloring, linting, constant folding, type checking, optimization, and code generation. section 9.4
A nested expression
The expression Foo.Bar((x + y.z) * q, A.B.C) can be represented by nested Member, Paren, Add, Mult, and Call nodes rather than treated as an undifferentiated string.

