Tema: Compiladores
Ver Mensaje Individual
  #1 (permalink)  
Antiguo 01/06/2005, 00:22
Avatar de Jorgemen
Jorgemen
 
Fecha de Ingreso: mayo-2005
Ubicación: Perú
Mensajes: 322
Antigüedad: 19 años, 10 meses
Puntos: 1
Compiladores

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&uacute;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>