In a shell pipeline of 'a | b | c | d', I can see the dataflow clearly. 'c' never sees the output of 'a' directly; it must be mediated by 'b'. But for a stack, 'a b c d', I have no idea if c uses the value a or not, unless I know the definition of b and how many items c consumes.
When reading stack code, I find myself mentally inserting parentheses to see how far back each operation reaches; for higher-level operators, I find myself wanting to insert comments describing the shape of the code being implicitly constructed. I need to see the "tree" (though frequently a dag) shape.
This isn't different in complex infix expressions. There too, parentheses are often needed for clarity - and good programmers use them even when not necessary - and for very complicated expressions, I'll spread them out across multiple lines, with indentation to make the tree explicit, where performance or similar concerns prevents writing out the expression in a more long-hand fashion.