<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
		>
<channel>
	<title>Comentarios en: MiniLisp (un ejemplo de ply)</title>
	<atom:link href="http://www.juanjoconti.com.ar/2007/11/02/minilisp-un-ejemplo-de-ply/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.juanjoconti.com.ar/2007/11/02/minilisp-un-ejemplo-de-ply/</link>
	<description>el blog de Juanjo Conti - abstracto, lúdico y digital</description>
	<lastBuildDate>Thu, 09 Sep 2010 04:54:57 +0000</lastBuildDate>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=abc</generator>
	<item>
		<title>Por: Juanjo</title>
		<link>http://www.juanjoconti.com.ar/2007/11/02/minilisp-un-ejemplo-de-ply/comment-page-1/#comment-78000</link>
		<dc:creator>Juanjo</dc:creator>
		<pubDate>Sat, 11 Apr 2009 14:01:16 +0000</pubDate>
		<guid isPermaLink="false">http://www.juanjoconti.com.ar/2007/11/02/minilisp-un-ejemplo-de-ply/#comment-78000</guid>
		<description>Elisenda, te recomiendo leer sobre &lt;a href=&quot;http://en.wikipedia.org/wiki/LL_parser&quot; rel=&quot;nofollow&quot;&gt;parsers LL(1)&lt;/a&gt; antes de avanzar.</description>
		<content:encoded><![CDATA[<p>Elisenda, te recomiendo leer sobre <a href="http://en.wikipedia.org/wiki/LL_parser" rel="nofollow">parsers LL(1)</a> antes de avanzar.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Por: ELISENDA</title>
		<link>http://www.juanjoconti.com.ar/2007/11/02/minilisp-un-ejemplo-de-ply/comment-page-1/#comment-77994</link>
		<dc:creator>ELISENDA</dc:creator>
		<pubDate>Sat, 11 Apr 2009 11:10:12 +0000</pubDate>
		<guid isPermaLink="false">http://www.juanjoconti.com.ar/2007/11/02/minilisp-un-ejemplo-de-ply/#comment-77994</guid>
		<description>Gracias juanjo .. se entiende! 

Ya tengo montado mi analizador sintactico, ahora tengo el siguiente problema, no consigo hacer que analice mas de una sentencia a la vez. 

La idea es leer codigo de un archivo pero me da &quot;errores sintacticos&quot; justo despues de reconocer la primera sentencia valida, cuando lee el primer token de la siguiente, da ese error .. no se si tendrías alguna idea al respecto? 
Muchas Gracias</description>
		<content:encoded><![CDATA[<p>Gracias juanjo .. se entiende! </p>
<p>Ya tengo montado mi analizador sintactico, ahora tengo el siguiente problema, no consigo hacer que analice mas de una sentencia a la vez. </p>
<p>La idea es leer codigo de un archivo pero me da &#8220;errores sintacticos&#8221; justo despues de reconocer la primera sentencia valida, cuando lee el primer token de la siguiente, da ese error .. no se si tendrías alguna idea al respecto?<br />
Muchas Gracias</p>
]]></content:encoded>
	</item>
	<item>
		<title>Por: Juanjo</title>
		<link>http://www.juanjoconti.com.ar/2007/11/02/minilisp-un-ejemplo-de-ply/comment-page-1/#comment-77146</link>
		<dc:creator>Juanjo</dc:creator>
		<pubDate>Mon, 30 Mar 2009 19:15:23 +0000</pubDate>
		<guid isPermaLink="false">http://www.juanjoconti.com.ar/2007/11/02/minilisp-un-ejemplo-de-ply/#comment-77146</guid>
		<description>Gracias Elisenda por el apoyo.

Te contesto,

1) PLY hace uso del docstring de las funciones definidas. Esta introspección le permite conocer como deben encadenarse las distintas reglas.

2) En p[1] está el contenido de item, mientras en que p[2] el contenido de items. El primero es un elemento, mientras que el segundo una secuencia de elementos (así lo mandan las reglas definidas). Para que el resultado sea una secuencia con item como primer elemento (cabeza) e items como el resto de la secuencia (cola), escribo:

p[0] = [p[1]] + p[2]

lo que se lee: guardar en p[0] la concatenación de una lista de un único elemento p[1] y la lista p[2].

Espero se haya entendido.</description>
		<content:encoded><![CDATA[<p>Gracias Elisenda por el apoyo.</p>
<p>Te contesto,</p>
<p>1) PLY hace uso del docstring de las funciones definidas. Esta introspección le permite conocer como deben encadenarse las distintas reglas.</p>
<p>2) En p[1] está el contenido de item, mientras en que p[2] el contenido de items. El primero es un elemento, mientras que el segundo una secuencia de elementos (así lo mandan las reglas definidas). Para que el resultado sea una secuencia con item como primer elemento (cabeza) e items como el resto de la secuencia (cola), escribo:</p>
<p>p[0] = [p[1]] + p[2]</p>
<p>lo que se lee: guardar en p[0] la concatenación de una lista de un único elemento p[1] y la lista p[2].</p>
<p>Espero se haya entendido.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Por: Elisenda</title>
		<link>http://www.juanjoconti.com.ar/2007/11/02/minilisp-un-ejemplo-de-ply/comment-page-1/#comment-77086</link>
		<dc:creator>Elisenda</dc:creator>
		<pubDate>Sun, 29 Mar 2009 23:56:19 +0000</pubDate>
		<guid isPermaLink="false">http://www.juanjoconti.com.ar/2007/11/02/minilisp-un-ejemplo-de-ply/#comment-77086</guid>
		<description>Hola! 

Primero, Gracias por la valiosa informacion que ofreces en en este post. 

Segundo, Estoy realizando un trabajo en la universidad que consiste en realizar un compilador para java (bueno java reducido). He estado mirando tu codigo y me surgen un par de dudas (sobre Yacc): 

Entiendo que estamos definiendo una funcion por cada regla de la gramatica, pero no veo como se interrelacionan estas funciones entre sí tal y como lo hacen sus respectivas reglas de la gramatica. si por ejemplo tenemos:

EXP ::= itemPrimero EXP2
EXP2 ::= item EXP2

de la primera regla a la segunda vamos mediante EXP2 pero en codigo parecen independientes, como si no hubiera un nexo entre ellas.

Por otra parte, tiene definida la siguiente funcion

def p_items(p):
    &#039;items : item items&#039;
    p[0] = [p[1]] + p[2]

¿porque [p[1]]? no deberia de ser en todo caso [p[2]] ya que es la parte recursiva?

Gracias de antemano y un saludo!</description>
		<content:encoded><![CDATA[<p>Hola! </p>
<p>Primero, Gracias por la valiosa informacion que ofreces en en este post. </p>
<p>Segundo, Estoy realizando un trabajo en la universidad que consiste en realizar un compilador para java (bueno java reducido). He estado mirando tu codigo y me surgen un par de dudas (sobre Yacc): </p>
<p>Entiendo que estamos definiendo una funcion por cada regla de la gramatica, pero no veo como se interrelacionan estas funciones entre sí tal y como lo hacen sus respectivas reglas de la gramatica. si por ejemplo tenemos:</p>
<p>EXP ::= itemPrimero EXP2<br />
EXP2 ::= item EXP2</p>
<p>de la primera regla a la segunda vamos mediante EXP2 pero en codigo parecen independientes, como si no hubiera un nexo entre ellas.</p>
<p>Por otra parte, tiene definida la siguiente funcion</p>
<p>def p_items(p):<br />
    &#8216;items : item items&#8217;<br />
    p[0] = [p[1]] + p[2]</p>
<p>¿porque [p[1]]? no deberia de ser en todo caso [p[2]] ya que es la parte recursiva?</p>
<p>Gracias de antemano y un saludo!</p>
]]></content:encoded>
	</item>
	<item>
		<title>Por: Voy a empezar a revisionar mini-lisp &#124; Vientos de Libertad</title>
		<link>http://www.juanjoconti.com.ar/2007/11/02/minilisp-un-ejemplo-de-ply/comment-page-1/#comment-48719</link>
		<dc:creator>Voy a empezar a revisionar mini-lisp &#124; Vientos de Libertad</dc:creator>
		<pubDate>Tue, 14 Oct 2008 03:05:02 +0000</pubDate>
		<guid isPermaLink="false">http://www.juanjoconti.com.ar/2007/11/02/minilisp-un-ejemplo-de-ply/#comment-48719</guid>
		<description>[...] una implementación pediátrica de Lisp que hice para practicar ply tiene a partir de ahora su código revisionado en: [...]</description>
		<content:encoded><![CDATA[<p>[...] una implementación pediátrica de Lisp que hice para practicar ply tiene a partir de ahora su código revisionado en: [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>Por: Alfredo</title>
		<link>http://www.juanjoconti.com.ar/2007/11/02/minilisp-un-ejemplo-de-ply/comment-page-1/#comment-10216</link>
		<dc:creator>Alfredo</dc:creator>
		<pubDate>Thu, 27 Mar 2008 11:58:28 +0000</pubDate>
		<guid isPermaLink="false">http://www.juanjoconti.com.ar/2007/11/02/minilisp-un-ejemplo-de-ply/#comment-10216</guid>
		<description>Pues muchísimas gracias por la ayuda y por el ejemplo del C.La verdad es que andaba preocupado por temor a que fuese más complejo y justo ha sido todo lo contrario.

De nuevo muchas gracias.

Alfredo</description>
		<content:encoded><![CDATA[<p>Pues muchísimas gracias por la ayuda y por el ejemplo del C.La verdad es que andaba preocupado por temor a que fuese más complejo y justo ha sido todo lo contrario.</p>
<p>De nuevo muchas gracias.</p>
<p>Alfredo</p>
]]></content:encoded>
	</item>
	<item>
		<title>Por: Juanjo</title>
		<link>http://www.juanjoconti.com.ar/2007/11/02/minilisp-un-ejemplo-de-ply/comment-page-1/#comment-10199</link>
		<dc:creator>Juanjo</dc:creator>
		<pubDate>Thu, 27 Mar 2008 01:08:15 +0000</pubDate>
		<guid isPermaLink="false">http://www.juanjoconti.com.ar/2007/11/02/minilisp-un-ejemplo-de-ply/#comment-10199</guid>
		<description>Mmm no. El primer ejemplo va a tirar un error de Python ya que &lt;code&gt;p[1] p[2] p[3]&lt;/code&gt; no puede ser nunca una expresión sintacticamente válida. No se en tu ejemplo en particular que querías hacer con V, D y P, pero por ejemplo SI sería una expresión válida:
&lt;code&gt;
p[0] = p[1] + p[2] + p[3]
&lt;/code&gt;

Por otro lado, si están haciendo un compilador de C en Python, no dejen de mirar: &lt;a href=&quot;http://www.juanjoconti.com.ar/files/python/ply-examples/ansic/&quot; rel=&quot;nofollow&quot;&gt;ANSI C en PLY&lt;/a&gt;.</description>
		<content:encoded><![CDATA[<p>Mmm no. El primer ejemplo va a tirar un error de Python ya que <code>p[1] p[2] p[3]</code> no puede ser nunca una expresión sintacticamente válida. No se en tu ejemplo en particular que querías hacer con V, D y P, pero por ejemplo SI sería una expresión válida:<br />
<code><br />
p[0] = p[1] + p[2] + p[3]<br />
</code></p>
<p>Por otro lado, si están haciendo un compilador de C en Python, no dejen de mirar: <a href="http://www.juanjoconti.com.ar/files/python/ply-examples/ansic/" rel="nofollow">ANSI C en PLY</a>.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Por: Alfredo</title>
		<link>http://www.juanjoconti.com.ar/2007/11/02/minilisp-un-ejemplo-de-ply/comment-page-1/#comment-10193</link>
		<dc:creator>Alfredo</dc:creator>
		<pubDate>Wed, 26 Mar 2008 23:17:19 +0000</pubDate>
		<guid isPermaLink="false">http://www.juanjoconti.com.ar/2007/11/02/minilisp-un-ejemplo-de-ply/#comment-10193</guid>
		<description>Hola, ante todo agradecerte por haberme hecho conocer estas dos maravillosas herramientas, ya que nos ha simplificado mucho las cosas, al menos en la parte del analizador léxico. (es un compilador de c hecho en python)
Me gustaría hacerte una consulta :
 Verás en la gramática sintáctica que estamos haciendo una de las reglas es :

 1.	S	-&gt; V D P

¿Esto en el código de BNF sería :

def p_s(p):
    &#039;S : V D P&#039;
    p[0] = p[1] p[2] p[3]
?
¿Y en el caso
V	-&gt; T L ; V
?</description>
		<content:encoded><![CDATA[<p>Hola, ante todo agradecerte por haberme hecho conocer estas dos maravillosas herramientas, ya que nos ha simplificado mucho las cosas, al menos en la parte del analizador léxico. (es un compilador de c hecho en python)<br />
Me gustaría hacerte una consulta :<br />
 Verás en la gramática sintáctica que estamos haciendo una de las reglas es :</p>
<p> 1.	S	-&gt; V D P</p>
<p>¿Esto en el código de BNF sería :</p>
<p>def p_s(p):<br />
    &#8216;S : V D P&#8217;<br />
    p[0] = p[1] p[2] p[3]<br />
?<br />
¿Y en el caso<br />
V	-&gt; T L ; V<br />
?</p>
]]></content:encoded>
	</item>
	<item>
		<title>Por: Juanjo</title>
		<link>http://www.juanjoconti.com.ar/2007/11/02/minilisp-un-ejemplo-de-ply/comment-page-1/#comment-4383</link>
		<dc:creator>Juanjo</dc:creator>
		<pubDate>Fri, 09 Nov 2007 18:04:24 +0000</pubDate>
		<guid isPermaLink="false">http://www.juanjoconti.com.ar/2007/11/02/minilisp-un-ejemplo-de-ply/#comment-4383</guid>
		<description>Gracias Facu!

Supongamos que la expresión que se analizará sintácticamente (ya pasó por el analizador léxico, es decir que consiste de tokens válidos) es: &lt;code&gt;(= (+ 1 1) 2)&lt;/code&gt;.

En base a las reglas BNF definidas, esta expresión puede verse como el siguiente árbol:

&lt;center&gt;
&lt;img src=&quot;http://www.juanjoconti.com.ar/wp-content/uploads/2007/11/mlexpr2.png&quot;/&gt;
&lt;/center&gt;

La expresión se va resolviendo de abajo hacia arriba en el árbol (o lo que es lo mismo de adentro hacia afuera en la expresión) mediante la aplicación de las funciones definidas.</description>
		<content:encoded><![CDATA[<p>Gracias Facu!</p>
<p>Supongamos que la expresión que se analizará sintácticamente (ya pasó por el analizador léxico, es decir que consiste de tokens válidos) es: <code>(= (+ 1 1) 2)</code>.</p>
<p>En base a las reglas BNF definidas, esta expresión puede verse como el siguiente árbol:</p>
<p><center><br />
<img src="http://www.juanjoconti.com.ar/wp-content/uploads/2007/11/mlexpr2.png"/><br />
</center></p>
<p>La expresión se va resolviendo de abajo hacia arriba en el árbol (o lo que es lo mismo de adentro hacia afuera en la expresión) mediante la aplicación de las funciones definidas.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Por: Facundo Batista</title>
		<link>http://www.juanjoconti.com.ar/2007/11/02/minilisp-un-ejemplo-de-ply/comment-page-1/#comment-4377</link>
		<dc:creator>Facundo Batista</dc:creator>
		<pubDate>Fri, 09 Nov 2007 12:15:21 +0000</pubDate>
		<guid isPermaLink="false">http://www.juanjoconti.com.ar/2007/11/02/minilisp-un-ejemplo-de-ply/#comment-4377</guid>
		<description>Muy buen post! Se entiende bastante, incluso como para repetir la experiencia, :)

El único detalle que tendrías que explicar mejor es por qué en las funciones de YACC vas &quot;reduciendo&quot; a su primer elemento ese &quot;p&quot; que recibís.

Saludos!</description>
		<content:encoded><![CDATA[<p>Muy buen post! Se entiende bastante, incluso como para repetir la experiencia, <img src='http://www.juanjoconti.com.ar/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>El único detalle que tendrías que explicar mejor es por qué en las funciones de YACC vas &#8220;reduciendo&#8221; a su primer elemento ese &#8220;p&#8221; que recibís.</p>
<p>Saludos!</p>
]]></content:encoded>
	</item>
</channel>
</rss>
