Here is a problem too, this as_string has a different semantic as the as_string() of token. But in the code it usually does the right thing. Do we need a different name?