#oneLineTemplate
Ранее в работе Шэнь Юйюй часто возникали небольшие требования по изменению выходных файлов. Раньше он просто жёстко закодировал изменения прямо в коде. Однако однажды Юйюй осознал, что это слишком примитивно, поэтому решил внедрить скриптовый язык, такой как Tcl, Lua или Python.
Однако включение открытого исходного кода в коммерческий продукт было сложной задачей, а также ему требовалась лишь базовая функциональность "шаблона". Таким образом, был создан шаблон, который можно записывать в конфигурационный файл; программа читает этот шаблон из файла конфигурации, раскрывает его, и таким образом нет необходимости каждый раз перезаписывать код при изменении выходных данных.
Конфигурация шаблона выглядит следующим образом:
abcd{VAR1}dfdadf{VAR2}
Переменные заключаются в фигурные скобки, а константы записываются напрямую. Это похоже на синтаксис SHELL, но без $
, так как наличие лишнего $
усложняет парсинг, а также это не обязательно.Этот шаблон анализируется (алгоритмы анализа см. в xls) и преобразуется в односвязный список, где каждый узел либо является константой, либо переменной. Переменная хранится как индекс в таблице символов, и при раскрытии шаблона значение берется из таблицы символов по этому индексу. Таблица символов представляет собой массив пар "имя переменной" - "значение переменной", и при анализе каждое имя константы ищется в этом массиве для получения индекса в таблице символов.В коде значения в таблице символов могут быть изменены напрямую, чтобы контролировать содержание после раскрытия шаблона.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )