Você não deveria estar chamando de análise ao ver callSomething()
(presumo que você quis dizer callSomething
antes doSomething
). A diferença entre a
e callSomething
é que um é uma definição de método enquanto o outro é uma chamada de método.
Quando você vir uma nova definição, deseje fazer verificações relacionadas à garantia de poder adicionar essa definição, portanto:
- Verifique se a função ainda não existe com a mesma assinatura
- Assegure-se de que a declaração do método esteja sendo executada no escopo apropriado (ou seja, os métodos podem ser declarados dentro de outras declarações de método?)
Supondo que essas verificações passem, você pode adicioná-lo ao seu mapa e começar a verificar o conteúdo desse método.
Ao encontrar uma chamada de método como callSomething()
, você deve executar as seguintes verificações:
- Existe
callSomething
no seu mapa?
- Está sendo chamado corretamente (o número de argumentos corresponde à assinatura que você encontrou)?
- Os argumentos são válidos (se nomes de variáveis são usados, eles são declarados? Eles podem ser acessados nesse escopo?)?
- O callSomething pode ser chamado de onde você está (é privado, público, protegido?)?
Se você achar que callSomething()
está tudo bem, então, neste momento, o que você gostaria de fazer realmente depende de como deseja abordá-lo. A rigor, quando você souber que essa chamada está correta nesse momento, você poderá salvar apenas o nome do método e os argumentos sem entrar em mais detalhes. Ao executar seu programa, você invocará o método com os argumentos que você deve ter no tempo de execução.
Se você quiser ir além, poderá salvar não apenas a string, mas um link para o método real. Isso seria mais eficiente, mas se você precisar gerenciar a memória, pode ficar confuso. Eu recomendaria que você simplesmente segurasse a corda primeiro. Mais tarde, você pode tentar otimizar.
Observe que tudo isso pressupõe que você tenha lexxado seu programa, o que significa que você reconheceu todos os tokens em seu programa e sabe o que são . Isso não quer dizer que você saiba se eles ainda fazem sentido juntos, que é a fase de análise. Se você ainda não sabe quais são os tokens, sugiro que você se concentre em obter essas informações primeiro.
Espero que ajude! Bem-vindo ao programadores SE!