Como escrever padrão de visitante para uma árvore de sintaxe abstrata em c #?

Eu tenho que escrever um padrão de visitante para navegar na AST. Alguém pode me dizer mais como eu iria começar a escrever isso? Tanto quanto eu entendo, cada nó em AST teria o método visit () (?) Que de alguma forma seria chamado (de onde?). Isso conclui meu entendimento. Para simplificar tudo, suponha que eu tenha os nós Raiz, Expressão, Número, Op e a árvore se pareça com isto:

      Root
        |
       Op(+)
      /   \
     /     \
 Number(5)  \
             Op(*)
             /   \
            /     \
           /       \
       Number(2)   Number(444)

questionAnswers(1)

yourAnswerToTheQuestion