Я собираюсь начать писать демонстрационную программу для лекции, которую я собираюсь прочитать.Я хочу позволить каждому ученику в классе загрузить это приложение, а затем иметь возможность создавать экземпляры объектов (и их графические представления) в интерактивном режиме с помощью командной строки.Я решил писать на java не потому, что это язык, с которым я больше всего знаком, а потому, что у него простые графические классы, и я могу быть уверен, что jar будет работать на их компьютерах.
Введение закончено.Теперь вопрос:
Каков хороший способ реализовать какой-либо собственный синтаксис командной строки для этой программы?Я хочу использовать простой, произвольный синтаксис, такой как:
CREATE Monster Bob;
Bob.jump();
LS Bob //to list Bob's methods or something.
LS CREATE //to list all the classes
Сначала я расскажу о том, что впервые пришло в голову, когда я подумал об этой проблеме.
Я могу себе представить, что у меня может быть набор карт в древовидной связи.Я мог бы разобрать каждое ключевое слово как ключ к следующей карте.Таким образом, «CREATE Monster Bob» можно оценить как
1) Поиск карты ключевых слов для ключа «CREATE».Вернуть значение, являющееся ссылкой на карту классов.2) Поиск карты классов по ключу "Монстр".Вернуть значение, которое является классом фабрики, реализующим некоторый интерфейс Leaf, который позволяет мне знать, что это значение листа (я проверю, используя instanceof).
3) Возможно, интерфейс Leaf будет содержать метод с именем execute (), который будетделай что хочешь.В этом случае он создал бы объект Monster, добавив этот объект на карту под названием Objects с именем Bob.(Это дело Листа звучит некрасиво, но его можно убрать.)
Круто.Но это утверждение немного сложнее для меня: Bob.jump ();
1) Поиск какой-либо карты объектов для «Боба».Вернуть некоторый объект, реализующий интерфейс с методом, подобным «define (String s)», и передать ему строку «jump ()»
2) Боб ищет некоторую внутреннюю карту методов для «jump ()», затем ...?В c ++ ключом должен быть указатель на функцию-член Monster.jump (), которая будет выполняться.Но я не верю, что в Java нет такой вещи, как указатель на функцию.Я читал, что вы можете использовать анонимный класс для достижения этой цели, хотя я не пробовал.Похоже, это будет работать.
Итак, это будет работать, но есть ли более элегантный способ сделать это?Я никогда раньше не писал никаких интерпретаторов.Я хотел бы сделать это хорошим способом и узнать что-то в процессе, если у кого-то есть какие-то советы.Это выглядит как потенциально подверженный ошибкам способ сделать что-то, если я не очень структурирован, особенно когда Боб и любой другой объект начинают анализировать свои собственные инструкции и использовать анонимные функции.Кроме того, похоже, что каждому классу потребуется интерфейс, готовый к выполнению, кроме обычного кода.
Я также не очень хорошо знаю Java, поэтому, если есть некоторые места, где я могу столкнуться с кирпичной стеной, тогда я тоже хотел бы знать.
Спасибо за помощь заранее.