У меня в мыслях только такое:
1. Загружаем шаблон с метками ( {{username}}, {% var1 == var2 %} и т.д)
2. Регулярками берем метки и меняем на функции(
метку {{username}} - изменим на <?=$username?>, и т.д
3. Компилируем шаблон.
Потом при повторном вызове шаблона, проверяем есть ли он скомпилированный, если нет то ^ снова, если есть то загружаем готовый
Если вы там видите кучу незнакомых слов вроде Lexer, Parser, AST - можно закрывать страничку и задаться вопросом, зачем вам понимать как работает шаблонизатор
В общем да, можно и так. Или сразу подтставлять значения этих переменых.
Но в большинстве шаблонизаторов кроме этого куча дополнительных фишек. Посмотрите описание twig, smarty и т.п..