A simple example:

```
(grammar):

stat: ID '=' expr NEWLINE -> ^('=' ID expr)

expr: atom '+' atom -> ^(+ atom atom)

atom: INT | ID

...

(input text): a = 3 + 5

```

The corresponding CommonTree for '3 + 5' contains a '+' token and two children (3, 5). 

At this point, what is the best way to recover the original input text that parsed into this tree ('3 + 5')? 

I've got the text, position and the line number of individual tokens in the `CommonTree` object, so theoretically it's possible to make sure only white space tokens are discarded and piece them together using this information, but it looks error prone.

Is there a better way to do this?