Как реализовать вызов функции с помощью Antlr, чтобы ее можно было вызывать еще до того, как она была определена?

Как только AST построен, каков наилучший способ реализовать обходчик дерева, чтобы функции могли быть определены и вызваны в любом порядке?

Например, это действительно в PHP:

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

Я предполагаю, что каким-то образом должен быть второй проход или преобразование дерева, но я не могу найти ничего интересного по этому вопросу. Вероятно, проблема не в Antlr-специфичной проблеме, но, если бы вы могли указать мне пример Antlr того, как это делается, еще лучше!

Ответы на вопрос(1)

Ваш ответ на вопрос