This applies to nodes which are reassigned with a `GrammarToken`. I verified that the implementation of `GrammarAST` uses the input token stream for the underlying token, so when you assign a `GrammarToken` to the tree node and assign the new start/stop indexes as tokens in the original token stream, operations like `toTokenString` will work properly. The way to distinguish between tokens that were created by the artificial rule and those that were part of the original grammar is by checking whether the token field of a node is a a CommonToken or  a GrammarAST.