https://github.com/1datr/micron/tree/master/modules/treep .
Короче может существовать код в с произвольным синтаксисом открывающих и закрывающих конструкций, с произвольным форматом комментариев и экранирующих последовательностей. Например,
/# {#rz
#/
{@
{#reef #}
@}
xxx
{#if c=\"xx\" (x==0)
{#then
x=x+1;
#}
{#else
x=x+2;
#}
// #}
#}
xxx
{#foreach(arr_x as idx => x)
#}
ddd
/# #/ - комментарии
{#([[:alnum:]]+)
#} - формат элемента
{@ @} - экраниирующая последовательность.
Код
$root = $treep->compile([
'code'=>$_code,
'nstart'=>'/\{\#([[:alnum:]]+)/',
'nend'=>'/\#\}/',
'comments'=>['#\/\*.*\*\/#s','#\/\/.*$#m'],
'shields'=>[['{@','@}']])
выдаст дерево объектов. Которое потом можно обойти кодом типа
$tree->walk(function($item)
{
if(is_string($item))
echo $item;
else
{
print_r($item->_START_TAG_REGEXP_RESULT);
print_r($item->_END_TAG_REGEXP_RESULT);
}
});
И на такой основе можно создать любой парсер любого существующего или несуществующего языка разметки (xml, допустим) либо даже программирования.