No deberías llamar a parse al ver callSomething()
(supongo que quisiste decir en callSomething
lugar de doSomething
). La diferencia entre a
y callSomething
es que uno es una definición de método mientras que el otro es una llamada a método.
Cuando vea una nueva definición, querrá hacer verificaciones relacionadas para asegurarse de que puede agregar esa definición, por lo tanto:
- Compruebe si la función ya no existe con la misma firma
- Asegúrese de que la declaración del método se realice en el ámbito adecuado (es decir, ¿se pueden declarar los métodos dentro de otras declaraciones de métodos?)
Suponiendo que estas verificaciones pasan, puede agregarlo a su mapa y comenzar a verificar el contenido de ese método.
Cuando encuentre una llamada de método como callSomething()
, debe realizar las siguientes comprobaciones:
- ¿Existe
callSomething
en su mapa?
- ¿Se llama correctamente (el número de argumentos coincide con la firma que ha encontrado)?
- ¿Son válidos los argumentos (si se usan nombres de variables, ¿se declaran? ¿Se puede acceder a ellos en este ámbito?)?
- ¿Se puede llamar a SomeSomething desde donde estás (es privado, público, protegido?)?
Si encuentra que callSomething()
está bien, entonces, en este punto, lo que desearía hacer realmente depende de cómo desee abordarlo. Estrictamente hablando, una vez que sepa que tal llamada está bien en este momento, solo puede guardar el nombre del método y los argumentos sin entrar en más detalles. Cuando ejecute su programa, invocará el método con los argumentos que debería tener en tiempo de ejecución.
Si desea ir más allá, puede guardar no solo la cadena sino también un enlace al método real. Esto sería más eficiente, pero si tiene que administrar la memoria, puede ser confuso. Te recomendaría que simplemente te aferres a la cuerda al principio. Más tarde puedes intentar optimizar.
Tenga en cuenta que todo esto supone que ha eliminado su programa, lo que significa que ha reconocido todos los tokens en su programa y sabe cuáles son . Eso no quiere decir que sepa si tienen sentido juntos todavía, que es la fase de análisis. Si aún no sabe cuáles son los tokens, le sugiero que primero se concentre en obtener esa información primero.
¡Espero que eso ayude! ¡Bienvenido a Programmers SE!