<?php

// Como achar uma string baseando-se em um grupo de expressões regulares
//  https://pt.stackoverflow.com/q/207089/53463

function analisar( $string ) {
	$regex = '/
	        		(?P<var>       {{\s*\$(.*?)\s*}}                      )
	        	|
					(?P<loop>      @for\((.*?)\)\s*{{((?:[^{}]|(?R))*)}}  )
				|
					(?P<statement> @if\((.*?)\)\s*{{((?:[^{}]|(?R))*)}}   )
				/x';
	
	$resultado = preg_replace_callback(
	                 $regex,
	                 function ($matches) {
	            	/*
	            		//debug
	                 		echo "\n\nSubst: $matches[0]\n\$matches = ";
	                 		var_export($matches);
	                 	*/
	                     if ($matches['var']) {
	                         return getVar($matches[2]);
	
	                     } else if ($matches['loop']) {
	                         return loop($matches[4], $matches[5]);
	
	                     } else if ($matches['statement']) {
	                         return getStatementResult($matches[7], $matches[8]);
	                     }
	                 },
	                 $string
	             );

	return $resultado;
}

function getVar($nomeDaVariavel){
	return 'VAR('
		. analisar($nomeDaVariavel)
		. ')';
}
function loop($nomeDoArray, $codigo){
	return "LOOP\nLOOP-COND("
		. analisar($nomeDoArray)
		. ")\nLOOP-CODIGO("
		. analisar($codigo)
		. ')';
}
function getStatementResult($expressãoBooleana, $codigo){
	return "IF\nIF-COND("
		. analisar($expressãoBooleana)
		. ")\nIF-CODIGO("
		. analisar($codigo)
		. ')';
}


// -----
// TESTE
// -----

$string = '
<span>{{ $nomeCompleto }}</span>

@for($nomes as $nome)
{{
  @if($nome == \'Eleandro\')
  {{
    <p>{{ $nome }}</p>
  }}
}} 
';
             
echo analisar($string);