Como implementar uma chamada de função com o Antlr para que possa ser chamada mesmo antes de ser definida?

Depois que o AST é construído, qual é a melhor maneira de implementar o caminhante de árvores para que as funções possam ser definidas e chamadas em qualquer ordem?

Por exemplo, isso é válido no PHP:

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

Acho que, de alguma forma, deve haver uma segunda passagem ou uma transformação em árvore, mas não consigo encontrar nada de interessante sobre esse assunto. O problema provavelmente não é específico do Antlr, mas se você puder me indicar um exemplo do Antlr de como isso é feito, melhor ainda!

questionAnswers(1)

yourAnswerToTheQuestion