// Контекстно-свободная грамматика шаблонизатора // Подразумевается, что лексический анализатор зависим от работы синтаксического, // знает о его состоянии и соответственно выдаёт либо лексемы "внутри" блоков кода, // либо литералы "вне" оных // Олдстайл BEGIN .. END ликвидирован // TODO foreach ... as key => value %token literal %token name %left ".." %left "||" "OR" "XOR" %left "&&" "AND" %nonassoc "==" "!=" "<" ">" "<=" ">=" %left "+" "-" %left "&" %left "*" "/" "%" %% chunks: | chunks chunk chunk: error | literal | "" | "{" exp "}" code_chunk: c_if | c_set | c_fn | c_for | exp c_if: "IF" exp "-->" chunks "" chunks "" chunks "" chunks c_elseifs chunks "" chunks c_elseifs chunks "" chunks "" | c_elseifs chunks "" c_set: "SET" varref "=" exp | "SET" varref "-->" chunks "" chunks "" chunks "