Хм, я не понимаю, почему что-то в коде шаблонов django было бы трудно реализовать в C. Синтаксис шаблона выглядит немного питоническим, но на самом деле это не python; они реализовали свой собственный парсер для этого. Поэтому первое, на что стоит обратить внимание, это реализация шаблона django в python . Это действительно не так много кода, и его достаточно легко понять.
Конечно, C будет гораздо более многословным. То, что вы пишете, является компилятором: он читает некоторый код (шаблоны django) и записывает некоторый код на другом языке (html). Поэтому вся документация, которую вы можете найти о написании компиляторов на C (т. Е. Токенизаторы + парсеры + генераторы кода), актуальна.
Сначала вы, вероятно, захотите создать синтаксическое дерево. Синтаксис шаблонов django очень регулярный ... каждый блок {% whatever %}
имеет соответствующий блок {% endwhatever %}
, поэтому ваш анализатор может генерировать дерево, даже не зная, какими могут быть все ключевые слова whatever
.
Затем вы идете по дереву, выполняя фазу «code gen» для каждого блока. Например, вы должны кодировать {% if %}
, проверяя значение параметра if и печатая его содержимое или ничего, в зависимости от того, является ли условие if истинным или ложным. И так далее с циклами while, фильтрами, блоками и т. Д.
Имейте в виду, все это большая работа ... Вы не задумывались над тем, чтобы просто встроить интерпретатор python в свою C-программу? (Серьезно! Это не так сложно сделать, поскольку интерпретатор python является открытым исходным кодом.)