Quando cada função de análise deseja chamar recursivamente outra função de análise, buildTree () será chamada primeiro.
Isso torna a função de análise mais clara e mais legÃvel.
Exemplo:
void parse_PS() {
if(lookahead == NT) {
buildTree(&parse_P, "P");
buildTree(&parse_PS, "PS");
} else if(lookahead == EOF) {
} else {
syntaxError();
}
}
void buildTree(void (*parseFunc)(), char *id) {
addChild(id);
// Simulate a tree
enterTree();
(*parseFunc)();
leaveTree();
}
Fonte: https://github.com/xsoameix/LL-1-table-builder/blob/develop/app/Parser.c