Я немного не силён в мат части задач такого рода, возможно у таких задач есть определённое название и готовые методики решения, поэтому решил спросить у сообщества. Не смог правильно подобрать запрос к гуглу.
Ситуация:
1) Есть код, написанный в парадигме ООП с кучей классов, объектов, методов и т.д. и т.п.
2) Нужно создать человеко-понятный описательный язык со своим синтаксисом (или использовать один из существующих, например xml) так, чтобы исполняемый код из пункта 1 автоматически создавал экземпляры классов, запускал методы и т.д. и т.п на основе скормленного ему файла с описанием.
Другими словами: структуру и синтаксис описательного языка нужно как-то заложить в исполняемый код, т.е. создать что-то вроде парсера, только он будет после парсинга полученных данных не выводить их на экран и не записывать в базу, что обычно требуется от парсера, а исполнять инструкции на основе того, какое описание содержат полученные данные.
Конечно, действия с полученными данными и исполняемую логику можно покрыть if, else и тд и тп, но на самом деле встроенных средств языков программирования не хватает, т.к. описательная часть вариативна, а значит и количество логики в потенциально создаваемых объектах также вариативно. Например:
Имеется класс "Колобок". У него есть метод (некая внутренняя логика), который должен принимать решение при появлении на горизонте субъекта(ов): лиса, волк, заяц, медведь, а также их комбинаций, количество которых конечно. При создании объекта Колобок мы должны задать ему своего рода характер (используя описательный язык), от которого и будут зависеть дальнейшиие действия с другими субъектами игры и их комбинаций. Задача состоит в том, чтобы у каждого колобка был уникальный характер, но в то же время у каждого из них зашиты одинаковые методы (идти, смотреть, говорить, обходить, убегать). Примеры вариативности:
- Описательная часть у одного колобка может выглядеть коротко так: при появлении на горизонте лисы - убегать, при появлении зайца - поговорить. У его брата (другой объект) похожий характер, но слегка шальной - при встрече любого героя, отличного от зайца или лисы запускается рандомный метод.
- У второго колобка, наоборот, при появлении на горизонте лисы - поговорить с ней (но в случае атаки - убегать), при появлении зайца - обходить стороной, если заяц движется в его сторону - перейти на бег.
- У третьего колобка другой характер - говорить только в том случае, когда все остальные герои находятся рядом, в остальных случаях - убегать.
И вот эта внутренняя логика у каждого колобка должна быть уникальна и зависеть от параметров-инструкций (характера), переданных при создании объекта "Колобок".
Для такого рода задач вроде как используют
eval, именно в данный метод можно передать строки с условиями, как мне известно. Но eval опасен, хотя в нём и содержится как раз суть того, о чём я спрашиваю: при создании объектов у каждого из них будет своя, и если того требуется - уникальная логика (характер). Т.е. нужно создать своего рода безопасную альтернативу eval, так скажем.
Из описания
eval MDN:
if(eval(string)){
//do something
}
string. Строка, представленная JavaScript выражением, оператором или последовательностью операторов. Выражение может содержать переменные и свойства существующих объектов.
Кстати, если я правильно понимаю, подобная магия происходит в браузере, когда он считывает html/css и рендерит их, слушает события, такие как ховер, onclick, производит на экране css анимации и т.д и т.п. и всё это происходит на основе описательных языков (html/css), не являющихся исполняемым кодом. У меня задача конечно похожая, поэтому и смотрю в сторону xml, чтобы не городить велосипед, но вот как-то надо сделать связку xml с исполняемым кодом.