Pregunta

Actualmente estoy usando AntLR para analizar algunos archivos con un lenguaje propietario. Tengo la necesidad de resaltar secciones en un editor (piense en resaltar un método en una clase de Java, por ejemplo).

¿Alguien tiene una pista sobre cómo obtenerlos? Digamos que tengo este código:

function test(param1, param2) {
}

como function es una palabra clave, la primera posición que obtengo en el analizador es la del identificador " test " ;. ¿Cómo puedo obtener las posiciones desde allí hasta la llave final? La lista de parámetros es dinámica, como cabría esperar, por lo que no sabe de antemano su longitud.

¡Gracias!

¿Fue útil?

Solución

Si entiendo tu pregunta, creo que puedes usar el atributo 'pos' en cada token

func: FUNCTION ID '(' ID (',' ID)* ')' {
        System.out.println("Position = " + $FUNCTION.pos);
}

que se refiere a la posición del carácter dentro de la línea que cuenta desde cero.

Otros consejos

No entiendo por qué la primera posición que está obteniendo es la posición de prueba. Debería poder obtener fácilmente el desplazamiento de caracteres de la " función " token si diseñó la especificación del patrón correctamente. ¿Puedes enumerar las partes relevantes de la especificación?

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top