elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Arreglado, de nuevo, el registro del warzone (wargame) de EHN


+  Foro de elhacker.net
|-+  Programación
| |-+  Desarrollo Web
| | |-+  PHP (Moderador: #!drvy)
| | | |-+  Ayuda con Analizador Lexico en php
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: Ayuda con Analizador Lexico en php  (Leído 8,623 veces)
include ();

Desconectado Desconectado

Mensajes: 36


No seas envidioso, comparte lo que sabes... ;)


Ver Perfil
Ayuda con Analizador Lexico en php
« en: 4 Junio 2012, 21:35 pm »

Hola amigos de elhacker.net necesito una ayuda para lograr hacer mi analizador lexico de xml en php, lo que llevo es, cargo la tabla de simbolos a mi base de datos y luego tengo que leer el archivo xml, lo que quiero hacer es, leer linea por linea el xml y que cuando encuentre "<" sume caracter por caracter hasta encontrar ">" y guardalo en una variable e ir a comparar contra mi base de datos, pero no se que funciones usar para hacer lo que tengo pensado y no se asi esta bien o hay una manera mas facil.

esto es lo que llevo del archivo donde quiero leer el xml como un txt.

Código:
<?php
echo "Se ha Cargado el Archivo Exitosamente<br><br>";
$tope='>';
$archivo=fopen('archivos/ejemplo.xml','r')
or die("Problemas al abrir el archivo");
 
while(!feof($archivo))
{
$letra=fgets($archivo);
$saltos=n12br($letra);
echo $saltos;
$palabra=$palabra+$letra;
}
fclose($archivo);
?>

Muchas Gracias de antemano
________________
Grandeza no es solo saber, Grandeza tambien es ayudar y compartir!!!


En línea

Grandeza no es solo saber, Grandeza es ayudar y compartir!!!
engel lex
Moderador Global
***
Desconectado Desconectado

Mensajes: 15.498



Ver Perfil
Re: Ayuda con Analizador Lexico en php
« Respuesta #1 en: 4 Junio 2012, 21:42 pm »

usa strpos para buscar el"<"
http://www.php.net/manual/es/function.strpos.php

algo asi

Código
  1. $inicio = strpos("<", $letra);
  2. $fin = strpos(">", $letra, $inicio);//para que empiece a buscar en donde consiguió el primer "<"
  3.  
  4.  
  5.  

ahí inicio tiene el numero de caracter donde está "<" y fin el de ">"


En línea

El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.
include ();

Desconectado Desconectado

Mensajes: 36


No seas envidioso, comparte lo que sabes... ;)


Ver Perfil
Re: Ayuda con Analizador Lexico en php
« Respuesta #2 en: 4 Junio 2012, 22:04 pm »

usa strpos para buscar el"<"
http://www.php.net/manual/es/function.strpos.php

algo asi

Código
  1. $inicio = strpos("<", $letra);
  2. $fin = strpos(">", $letra, $inicio);//para que empiece a buscar en donde consiguió el primer "<"
  3.  
  4.  

ahí inicio tiene el numero de caracter donde está "<" y fin el de ">"


soy nuevo en php  :-( y no se como hacer eso que me dices  :o :S disculpa tanta molestia...

« Última modificación: 4 Junio 2012, 22:15 pm por GuateGio » En línea

Grandeza no es solo saber, Grandeza es ayudar y compartir!!!
engel lex
Moderador Global
***
Desconectado Desconectado

Mensajes: 15.498



Ver Perfil
Re: Ayuda con Analizador Lexico en php
« Respuesta #3 en: 4 Junio 2012, 22:17 pm »

XD es simple XD

Código
  1.  
  2. <?php
  3. echo "Se ha Cargado el Archivo Exitosamente<br><br>";
  4. $tope='>';
  5. $archivo=fopen('archivos/ejemplo.xml','r')
  6. or die("Problemas al abrir el archivo");
  7.  
  8. while(!feof($archivo))
  9. {
  10. $letra=fgets($archivo);// aquí se supone que está guardada una etiqueta
  11.  
  12.        $inicio = strpos("<", $letra);
  13.        $fin = strpos(">", $letra, $inicio);
  14.  
  15.        $etiqueta = substr($letra, $inicio, $fin-$inicio);
  16.  
  17. $saltos=n12br($letra);
  18. echo $saltos;
  19. $palabra=$palabra+$letra;
  20. }
  21. fclose($archivo);
  22. ?>
  23.  
  24.  
  25.  

ahí $etiqueta contiene a lo que hay entre < y >, y substr aqui su uso

http://php.net/manual/es/function.substr.php
En línea

El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.
include ();

Desconectado Desconectado

Mensajes: 36


No seas envidioso, comparte lo que sabes... ;)


Ver Perfil
Re: Ayuda con Analizador Lexico en php
« Respuesta #4 en: 4 Junio 2012, 23:32 pm »

XD es simple XD

Código
  1.  
  2. <?php
  3. echo "Se ha Cargado el Archivo Exitosamente<br><br>";
  4. $tope='>';
  5. $archivo=fopen('archivos/ejemplo.xml','r')
  6. or die("Problemas al abrir el archivo");
  7.  
  8. while(!feof($archivo))
  9. {
  10. $letra=fgets($archivo);// aquí se supone que está guardada una etiqueta
  11.  
  12.        $inicio = strpos("<", $letra);
  13.        $fin = strpos(">", $letra, $inicio);
  14.  
  15.        $etiqueta = substr($letra, $inicio, $fin-$inicio);
  16.  
  17. $saltos=n12br($letra);
  18. echo $saltos;
  19. $palabra=$palabra+$letra;
  20. }
  21. fclose($archivo);
  22. ?>
  23.  
  24.  
  25.  

ahí $etiqueta contiene a lo que hay entre < y >, y substr aqui su uso

http://php.net/manual/es/function.substr.php


No me muestra las etiquetas, y mire las funcion  substr pero no se si esa solo funciones metiendo de una vez las posiciones y lo que quiero es que lea char, es decir cuando encuentre < empiece a "concatenar" las letras hasta que encuentre >, pero como ¿?  :huh:
En línea

Grandeza no es solo saber, Grandeza es ayudar y compartir!!!
include ();

Desconectado Desconectado

Mensajes: 36


No seas envidioso, comparte lo que sabes... ;)


Ver Perfil
Re: Ayuda con Analizador Lexico en php
« Respuesta #5 en: 4 Junio 2012, 23:51 pm »


No me muestra las etiquetas, y mire las funcion  substr pero no se si esa solo funciones metiendo de una vez las posiciones y lo que quiero es que lea char, es decir cuando encuentre < empiece a "concatenar" las letras hasta que encuentre >, pero como ¿?  :huh:


Mira estoy probando con este codigo:

Código:
<?php
echo "Se ha Cargado el Archivo Exitosamente<br><br>";
$archivo=fopen('archivos/ejemplo.xml','r')
or die("Problemas al abrir el archivo");
while(!feof($archivo))
{
$letra=fgets($archivo);
$inicio="<";
$fin=">";       
$etiqueta=stream_get_line($letra, $inicio, $fin);
$saltos=nl2br($letra);
echo $saltos;
echo $etiqueta;
}
fclose($archivo);
?>

pero me da este error:

Warning: stream_get_line() expects parameter 1 to be resource, string given in C:\xampplite\htdocs\Archivos\parsearxml.php on line 25


Warning: stream_get_line() expects parameter 1 to be resource, string given in C:\xampplite\htdocs\Archivos\parsearxml.php on line 25
David Herrera

Warning: stream_get_line() expects parameter 1 to be resource, string given in C:\xampplite\htdocs\Archivos\parsearxml.php on line 25
452368

Warning: stream_get_line() expects parameter 1 to be resource, string given in C:\xampplite\htdocs\Archivos\parsearxml.php on line 25

el xml de ejemplo que estoy usando es este:

Código:
<contacto>
<nombre>David Herrera</nombre>
<telefono>452368</telefono>
</contato>


Gracias por ayudarme  ;D
En línea

Grandeza no es solo saber, Grandeza es ayudar y compartir!!!
engel lex
Moderador Global
***
Desconectado Desconectado

Mensajes: 15.498



Ver Perfil
Re: Ayuda con Analizador Lexico en php
« Respuesta #6 en: 4 Junio 2012, 23:56 pm »

ups sorry XD la función strpos la puse al revez XD primero el la cadena, luego lo que se va a buscar XD

Código
  1. $inicio = strpos($letra, "<")+1;// le agrego +1 para quitar el primer <
  2. $fin = strpos($letra,">", $inicio);
  3. $etiqueta = substr($letra, $inicio, $fin-$inicio);
  4.  

el substr lo que hace es tomar un texto, desde la posición indicada, con un largo indicado (por eso resto las posiciones)
En línea

El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.
engel lex
Moderador Global
***
Desconectado Desconectado

Mensajes: 15.498



Ver Perfil
Re: Ayuda con Analizador Lexico en php
« Respuesta #7 en: 5 Junio 2012, 00:00 am »

atream_get_line no funciona igual que substr XD

stream_get_line funciona casi igual a fgets, por pequeñas diferencias :P

http://www.php.net/manual/es/function.stream-get-line.php
En línea

El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.
include ();

Desconectado Desconectado

Mensajes: 36


No seas envidioso, comparte lo que sabes... ;)


Ver Perfil
Re: Ayuda con Analizador Lexico en php
« Respuesta #8 en: 5 Junio 2012, 00:17 am »

ups sorry XD la función strpos la puse al revez XD primero el la cadena, luego lo que se va a buscar XD

Código
  1. $inicio = strpos($letra, "<")+1;// le agrego +1 para quitar el primer <
  2. $fin = strpos($letra,">", $inicio);
  3. $etiqueta = substr($letra, $inicio, $fin-$inicio);
  4.  

el substr lo que hace es tomar un texto, desde la posición indicada, con un largo indicado (por eso resto las posiciones)


Si estaba al reves la funcion  :P ya corregi el codigo quedo asi:

Código:
<?php
echo "Se ha Cargado el Archivo Exitosamente<br><br>";
$archivo=fopen('archivos/ejemplo.xml','r')
or die("Problemas al abrir el archivo");
while(!feof($archivo))
{
$letra=fgets($archivo);// aquí se supone que está guardada una etiqueta         
$inicio = strpos($letra, "<")+1;// le agrego +1 para quitar el primer <
$fin = strpos($letra,">", $inicio);
$etiqueta = substr($letra, $inicio, $fin-$inicio);
$saltos=n12br($letra);
echo $saltos;
echo $etiqueta;
}
fclose($archivo);
?>

y me muestra asi:

contactoDavid Herrera
nombre452368
telefono/contato

como hacer para que me muestre asi:

<contacto>
<nombre>
David Herrera
</nombre>
<telefono>
452368
</telefono>
</contato>


porque despues de eso agarrare cada una de las plabras y las ire a comparar con la tabla de simbolos:

mi tabla de simbolos es esta:

Código:
[b]Variables       Tipo     Expresion [/b]
<contacto>    PR   
<nombre>     PR   
</nombre>    PR   
nombre          ID        /^[A-Z][a-z]*s[A-Z][a-z]*$/
<telefono>    PR   
</telefono>   PR   
telefono         ID        /^(2|3)[0-9]{7}$/
</contacto>  PR   

como ves en mi tabla de simbolos si comparo la etiqueta nombre sin los < > me mostrara error o lo tomara como un ID

Muchas gracias por tomarte el tiempo de ayudarme.... ;-) :rolleyes:
En línea

Grandeza no es solo saber, Grandeza es ayudar y compartir!!!
engel lex
Moderador Global
***
Desconectado Desconectado

Mensajes: 15.498



Ver Perfil
Re: Ayuda con Analizador Lexico en php
« Respuesta #9 en: 5 Junio 2012, 01:47 am »

si no te importan los saltos de linea extras puedes hacer un str_replace
http://www.php.net/manual/es/function.substr-replace.php

Código
  1. $letra = str_replace(">",">\n",$letra);
  2.  

esto va a colocar un salto de linea luego de cada ">"
(en caso de dudas \n significa salto de linea)
En línea

El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.
Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
[Ayuda-C] Programación de un analizador léxico-sintáctico
Programación C/C++
Miky Gonzalez 2 5,515 Último mensaje 6 Agosto 2013, 23:16 pm
por Alien-Z
Analizador lexico/sintactico
Scripting
roadd 4 2,348 Último mensaje 5 Mayo 2015, 22:00 pm
por roadd
ayuda , analizador de paquetes de red i seguridad
Hacking Wireless
algoritmoXY 1 1,185 Último mensaje 12 Agosto 2015, 15:48 pm
por engel lex
Analisador Lexico
Programación C/C++
AGuevara 3 814 Último mensaje 25 Marzo 2019, 15:47 pm
por simorg
analizador lexico / sintactico python
Programación General
javidarks 7 4,366 Último mensaje 1 Agosto 2021, 10:12 am
por fzp
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines