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!