¿Cómo puedo modificar el texto de los tokens en un CommonTokenStream con ANTLR?

Estoy tratando de aprender ANTLR y al mismo tiempo usarlo para un proyecto actual.

He llegado al punto en el que puedo ejecutar el lexer en un fragmento de código y enviarlo a un CommonTokenStream. Esto funciona bien, y he verificado que el texto de origen se está dividiendo en los tokens apropiados.

Ahora, me gustaría poder modificar el texto de ciertos tokens en esta secuencia y mostrar el código fuente ahora modificado.

Por ejemplo, he intentado:

import org.antlr.runtime.*;
import java.util.*;

public class LexerTest
{
    public static final int IDENTIFIER_TYPE = 4;

    public static void main(String[] args)
    {
    String input = "public static void main(String[] args) { int myVar = 0; }";
    CharStream cs = new ANTLRStringStream(input);


        JavaLexer lexer = new JavaLexer(cs);
        CommonTokenStream tokens = new CommonTokenStream();
        tokens.setTokenSource(lexer);

        int size = tokens.size();
        for(int i = 0; i < size; i++)
        {
            Token token = (Token) tokens.get(i);
            if(token.getType() == IDENTIFIER_TYPE)
            {
                token.setText("V");
            }
        }
        System.out.println(tokens.toString());
    }  
}

Estoy tratando de establecer todo el texto del token de identificación en la cadena literal "V".

¿Por qué mis cambios en el texto del token no se reflejan cuando llamo tokens.toString ()?

¿Cómo se supone que conozco los diversos ID de tipo de token? Caminé con mi depurador y vi que la identificación de los tokens IDENTIFICADOR era "4" (de ahí mi constante en la parte superior). Pero, ¿cómo habría sabido eso de otra manera? ¿Hay alguna otra forma de asignar identificadores de tipo de token al nombre del token?

EDITAR:

Una cosa que es importante para mí es que deseo que los tokens tengan sus posiciones originales de inicio y fin de personaje. Es decir, no quiero que reflejen sus nuevas posiciones con los nombres de las variables cambiados a "V". Esto es para saber dónde estaban los tokens en el texto original.

Respuestas a la pregunta(3)

Su respuesta a la pregunta