me gusta el foro no sabia donde poner este tema, tonces decidí ponerlo aqui
http://www.delegacion-fic.udc.es/?q=node/45#comment-553 de este sitio te puedes bajar la documentación el siguiente programa se trata de un automata finito no determinista(AFN), este código determina si entrado un número real es este un real (realmente!) o no. este es un ejemplo de un AFN que es una herramientas especializada que ayuda a automatizar la construcción de analizadores léxicos y analizadores sintácticos que estos a su vez forman parte de la construcción de un compilador
Código PHP:
<?php
class AFN_real
{
var $actual;//POSICION del arreglo que se esta utilizando
function mover($s,$c)
{
if($s==1)
{
if(($c=="-")or($c=="+"))
$s=2;
elseif((48<=ord($c))and(ord($c)<=57))
$s=3;
else
$s=6;
}
elseif($s==2)
{
if((49<=ord($c))and(ord($c)<=57))
$s=3;
elseif($c=="0")
$s=2;
else
$s=6;
}
elseif($s==3)
{
if($c==".")
$s=4;
elseif((48<=ord($c))and(ord($c)<=57))
$s=3;
else
$s=6;
}
elseif($s==4)
{
if((48<=ord($c))and(ord($c)<=57))
$s=5;
else
$s=6;
}
elseif($s==5)
{
if((48<=ord($c))and(ord($c)<=57))
$s=5;
else
$s=6;
}
return $s;
}
function verificar($numero)
{
$lon=strlen($numero);
$s=1; //inicializo el estado s en el primer estado que es 1
$c=$numero[0]; //saca el primer elemento del número
$this->actual=0;
$co="";
while (($co<>$numero)and($s<>6))
{
$co=$co.$c;
$s=$this->mover($s,$c);
$this->actual++;
if ($this->actual<$lon)
{
$c=$numero[$this->actual];
}
}
if($s==5)
return true;
else
return false;
}
}// fin de clase
$numero=$_POST["edNumero"];
$afn=new AFN_real;
if($afn->verificar($numero))
echo "si es";
else
echo "no es";
?>
interfaz
Código HTML:
<form name='form1' method='post' action='AFN_real.php'>
<p align="center"><span class="Estilo1">Ingrese Número real a verificar</span><span class="Estilo5"> :</span><br>
<br><input type='text' name='edNumero'>
<br><br><input type="submit" name="Submit" value="Enviar"> </p>
</form>