¿Cómo implementar una llamada de función con Antlr para que se pueda llamar incluso antes de que se defina?

Una vez que se construye el AST, ¿cuál es la mejor manera de implementar el andador para que las funciones se puedan definir y llamar en cualquier orden?

Por ejemplo, esto es válido en PHP:

<?php
f(); // function called before it’s defined
function f() {
  print 3;
}
?>

Supongo que de alguna manera debe haber un segundo pase o una transformación de árbol, pero no puedo encontrar nada interesante sobre este tema. El problema probablemente no sea específico de Antlr, pero si pudiera señalarme un ejemplo de Antlr de cómo se hace esto, ¡aún mejor!

Respuestas a la pregunta(1)

Su respuesta a la pregunta