Escribir un intérprete de sintaxis personalizado en Java?

Estoy a punto de comenzar a codificar un programa de demostración para una conferencia que estoy a punto de dar. Quiero permitir que cada alumno de la clase descargue esta aplicación y luego pueda crear instancias de objetos (y sus representaciones gráficas) de forma interactiva a través de una línea de comandos. Decidí escribir en Java, no porque sea el lenguaje con el que estoy más familiarizado, sino porque tiene clases de gráficos fáciles y puedo estar bastante seguro de que el jar se ejecutará en sus computadoras.

Intro terminado. Ahora la pregunta:

¿Cuál es una buena manera de implementar alguna sintaxis de línea de comandos personalizada para este programa? Quiero usar una sintaxis simple y arbitraria como:

CREATE Monster Bob;    
Bob.jump();   
LS Bob //to list Bob's methods or something.   
LS CREATE //to list all the classes    

Primero voy a decir lo que se me ocurrió por primera vez cuando pensé en este problema.

Me imagino que podría tener un conjunto de mapas en un enlace de tipo árbol. Podría analizar cada palabra clave como la clave para el siguiente mapa. Entonces "CREATE Monster Bob" podría evaluarse como

1) Busque en el mapa de palabras clave la clave "CREAR". Devuelve el valor, que es una referencia al mapa de clases. 2) Busca en el mapa de clases la clave "Monstruo". Devuelve el valor, que es una clase de fábrica que implementa alguna interfaz Leaf que me permite saber que es un valor de hoja (lo comprobaré usando instanceof).
3) Tal vez la interfaz de Leaf contendrá un método llamado execute () que hará lo que quiera. En este caso, crearía un objeto de Monster, agregando este objeto a un mapa llamado Objetos con el nombre Bob. (Este negocio de Leaf suena feo pero podría limpiarse).

Frio. Pero esta declaración es un poco más difícil para mí: Bob.jump ();

1) Busque en algún mapa de objetos "Bob". Devuelva algún objeto implementando una interfaz con un método como "evalúe (String s)" y pásele la cadena "jump ()"
2) Bob busca en algún mapa interno de métodos "jump ()", entonces ...? En c ++, la clave sería un puntero a la función miembro Monster.jump () que se ejecutaría. Pero no hay tal cosa como un puntero de función en Java que no creo. He leído que puedes usar una clase anónima para lograr esto, aunque no lo he intentado. Parece que funcionaría.

Entonces, esto funcionará, pero ¿hay una manera más elegante de hacerlo? Nunca he escrito ningún tipo de intérprete antes. Me gustaría hacerlo de una manera agradable y aprender algo en el proceso si alguien tiene algunos consejos. Esto parece una forma de hacer cosas potencialmente propensa a errores si no estoy muy estructurado, especialmente cuando Bob y cualquier otro objeto comienzan a analizar sus propias instrucciones y a usar funciones anónimas. Además, parece que cada clase necesitará una interfaz lista para el tiempo de ejecución además de su código normal.

También no conozco Java tan bien, así que si hay algunos lugares donde podría golpear una pared de ladrillos, me gustaría saber también.

Gracias por la ayuda por adelantado

Respuestas a la pregunta(3)

Su respuesta a la pregunta