How to see abstract syntax tree of Wolfram Language expression

I mean, suppose I have this expression:

2 + 2

I want to get something like this:

Plus[2, 2]

as an output. I've tried FullForm, but this just evaluates 2+2 and returns 4. Is this even possible?

-
Try 2+2//Hold//FullForm –  Pickett Aug 27 '14 at 21:44
Have a look at HoldForm –  mfvonh Aug 27 '14 at 21:44
You can try prepending a Hold. Hold[2+2] // FullForm. You might also like TreeForm for this purpose. –  evanb Aug 27 '14 at 21:45
Generally, what you are seeking is to prevent kernel evaluation. Hold and its ilk (Defer, Unevaluated, Inactive, etc.) are the mechanisms for this, depending on precisely what you want. Look at this page for more information. –  mfvonh Aug 27 '14 at 21:49
Thanks, Hold works. –  Ezo Aug 27 '14 at 21:55

tree = Function[x, Defer @ FullForm @ x, HoldAll];


Now:

2 + 2 // tree

Plus[2, 2]


I used Defer to allow the output to be evaluated. If you do not prefer this replace it with HoldForm.

For some explanation of the mechanics of this code see: Why doesn't "Defer" work with "TableForm"?