2017-02-12 9 views
0

Я хотел бы сохранить компьютерную программу в базе данных, а не количество текстовых файлов. Он должен содержать структуру и все объекты, методы, зависимости и т. Д. Программы. Я не хочу хранить определенный язык в базе данных, а какой-то «мета» язык программирования. На втором этапе я хотел бы преобразовать/экспортировать эту структуру в базу данных в исходный код классического языка (C#, Java и т. Д.) Или скомпилировать его непосредственно для CLR/JVM.Как сохранить исходный код «meta» в базе данных

Я думаю, что я не первый человек с этой идеей. Я искал в Интернете, и я думаю, что то, что я ищу, называется «исходный код в базе данных (SCID)» - к сожалению, я не смог найти реализацию этой идеи.

Так мои вопросы это:

Есть ли программа, которая хранит «мета» программный код внутри базы данных и позволяет вам генерировать традиционный исходный текст кода из него, которые могут быть скомпилированы/выполняется?

Короткие замечания:
- Это также может быть база данных NoSQL
- я в настоящее время не все равно, как импортируется программа/внесена в базу данных

+0

Neo4j подскакивает, что может быть способом моделирования абстрактного синтаксического дерева в базе данных графиков. – ldz

ответ

0

Это звучит, как вы ищете какой-то общего языка разметки, который адекватно описывает общую семантику каждого целевого языка - например объекты, функции, входы, возвращаемые значения и т. д.

Речь идет не о хранении в базе данных, а о создании единой (я полагаю, подобной XML) структуры, которая впоследствии может быть проанализирована и оценена целевой язык для создания собственного источника/байт-кода. Если бы это было так, то хранить его в базе данных было бы тривиально - это не сложная часть. Даже база данных ключ/значение может справиться с этим.

Жесткая часть найдет то, что может абстрагироваться от нюансов нескольких языков и попытаться описать их в общем формате.

Similar questions уже задан, без удовлетворения решений.

Возможно, вам не нужен полный источник, но вместо этого просто описание данных времени исполнения, таких как XML и JSON, предназначено именно для этой цели и обеспечивает упрощенное описание объектов, которые могут быть проанализированы и сопоставляются с родными эквивалентами, с исходным кодом, построенным вокруг динамического анализа этих данных.

Это may можно продолжить дальше на определенных языках. Например, если ваш язык выбора сначала преобразуется в байт-код, вы можете технически иметь возможность хранить двоичный байт-код в BLOB, а затем запускать его напрямую. Языки, которые предлагают отражение и динамическую оценку, возможно, справятся с этим - тогда ваша БД - это просто оболочка для хранения этих данных при компиляции и получения ее до ее запуска. Это будет зависеть от вашего целевого языка и того, как обрабатывается компиляция.

Конечно, если вы работаете только с интерпретируемыми языками, вы можете просто сохранить полный источник и eval его (каким бы способом он ни был выбран целевым языком).

Если вы дадите больше информации о предполагаемом прецеденте, я уверен, что вы получите некоторые достойные предложения о том, как обращаться с ним, не придумывая исходный код Babelfish.

+0

Спасибо за ваш ответ!Я думаю, вы правы, что хранение в базе данных не является проблемой, если есть способ сохранить структуру в формате xml или так. Я понимаю, что каждый язык имеет свой собственный особый способ решения проблемы, которая может быть сложной для соответствия со структурой, которая также действительна для других языков. Во-первых, я хотел бы хранить комменские концепции, так как большинство языков имеют общий характер. Моя основная идея - создать визуальный язык, такой как LabView. Но я просто хочу оценить, какая работа и какие части уже доступны. –

+0

Много, я думаю. Даже если вы создадите AST для одного языка, перенос понятий в другой будет затруднен - ​​как вы эффективно переносите императивный код на функциональный язык, например? Если вы хотите предложить графический интерфейс, который позволяет пользователям перетаскивать концепции кода и запускать их, вам может потребоваться выбрать один язык, а затем создать структуру данных JSON/агностик, которая использует метки и данные для вызова готовых подпрограмм , Или встройте движок времени выполнения поверх языка и выполните некоторую генерацию кода. Зависит от того, какой рынок вы обслуживаете и насколько он сложный. –