Siento revivir esto, pero... tengo la solución: (hecho por mi desde cero)
<?
// $nil - Lenguaje creado con PHP
/*
- Reglas:
* $[algo] se reemplaza con "nil"
* Sin expresiones regulares
* Los comentarios empiezan con # y pueden estar al principio o al final (o en medio) de una línea
- NOTA:
* Hay un bug - no te acepta la variable si es el primer caracter del código...
*/
class Nil{
private $code; // code to parse
private $vars = array(); // code variables
var $anv = false; // true para aceptar $123, false para no aceptarlo
// definir codigo
function __construct($code){
if(!$code){ return false; }
$this->code = $code;
}
// devolver codigo; al ser protected no se puede acceder públicamente
function getCode(){ return $this->code; }
// procesar otro codigo
function setCode($code){ $this->code = $code; }
// borrar comentarios
function removeComments(){
$e = explode("\n", $this->code);
for($i=0,$c=count($e);$i<$c;$i++){
if($e[$i][0] == '#'){
unset($e[$i]);
}elseif(($s = strpos($e[$i], '#')) !== false){
$e[$i] = substr($e[$i], 0, $s);
}
}
$this->code = implode("\n", $e);
}
// reemplazar variables
function parseVars(){
if(strpos($this->code, '$') === false){ return; }
$v = 0;
while(($v = strpos($this->code, '$', $v + 1)) !== false){
$i = $v + 1;
if(!$this->anv && ctype_digit($this->code[$i])) continue;
while(ctype_alpha($this->code[$i]) || ctype_digit($this->code[$i]) || $this->code[$i] == '_') $i++;
$var = substr($this->code, $v, $i);
$this->code = substr($this->code, 0, $v).'nil'.substr($this->code, $i);
}
}
// devolver resultado final
function process(){
$this->removeComments();
$this->parseVars();
return $this->code;
}
}
echo '<pre>';
// variables normales
$nil = new Nil('Test de variables: $var'); // output: "Test de variables: $var"
echo $nil->process();
echo "\n\n\n";
echo "variables que empiezan por numeros - no permitidas:\n";
$nil->setCode('myVar: $123var'); // output: "myVar: $123var"
echo $nil->process();
echo "\n\n\n";
echo "variables que empiezan por numeros - permitidas:\n";
$nil->anv = true;
$nil->setCode('myVar: $123var'); // output: "myVar: nil"
echo $nil->process();
echo "\n\n\n";
echo "comentarios:\n";
$nil->setCode('#soy un comentario de una linea'); // output: ""
echo $nil->process();
echo "\n\n\n";
echo "comentarios en medio de la linea:\n";
$nil->setCode('hi bitches#comentario alone'); // output: "hi bitches"
echo $nil->process();
echo '</pre>';
?>