Account Options

  1. Sign in
The old Google Groups will be going away soon, but your browser is incompatible with the new version.
Google Groups Home
« Groups Home
Message from discussion Parser trying to extend with a SyntaxNode subclass weirdness.

Received: by 10.224.186.204 with SMTP id ct12mr340713qab.0.1330493801395;
        Tue, 28 Feb 2012 21:36:41 -0800 (PST)
X-BeenThere: treetop-dev@googlegroups.com
Received: by 10.224.53.12 with SMTP id k12ls256003qag.5.gmail; Tue, 28 Feb
 2012 21:36:40 -0800 (PST)
Received: by 10.224.180.13 with SMTP id bs13mr320827qab.6.1330493800134;
        Tue, 28 Feb 2012 21:36:40 -0800 (PST)
Received: by 10.224.205.74 with SMTP id fp10msqab;
        Tue, 28 Feb 2012 20:37:20 -0800 (PST)
Received: by 10.52.93.116 with SMTP id ct20mr2679215vdb.20.1330490239962;
        Tue, 28 Feb 2012 20:37:19 -0800 (PST)
Date: Tue, 28 Feb 2012 20:37:19 -0800 (PST)
From: Douglas Camata <d.cam...@gmail.com>
To: treetop-dev@googlegroups.com
Message-ID: <13275188.5892.1330490239658.JavaMail.geo-discussion-forums@vbbed8>
In-Reply-To: <5F8EED2E77A9475D99E84455E51402C2@gmail.com>
References: <5F8EED2E77A9475D99E84455E51402C2@gmail.com>
Subject: Re: Parser trying to extend with a SyntaxNode subclass weirdness.
MIME-Version: 1.0
Content-Type: multipart/mixed; 
	boundary="----=_Part_5890_31705336.1330490239657"

------=_Part_5890_31705336.1330490239657
Content-Type: multipart/alternative; 
	boundary="----=_Part_5891_27212481.1330490239657"

------=_Part_5891_27212481.1330490239657
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 7bit

One thing I've learned in my little experience with treetop (maybe I'm 
doing it the wrong way, but it worked for me), when you define a rule 
that's just an aggregation of other two, like some kind of inheritance, you 
must use a parenthesis to define the class for it. For example, let's fix 
your rule integer_literal:

    rule integer_literal
      (hex_integer_literal / octal_integer_literal / binary_integer_literal 
/ decimal_integer_literal / zero_integer_literal) <IntegerLiteral>
    end

Try it and post some feedback, as an treetop apprentice, I'd like to share 
experiences. 

On Tuesday, February 28, 2012 10:46:03 PM UTC-3, James Harton wrote:
>
> Hi.
>
> I'm throwing together a toy language at 
> https://github.com/jamesotron/CrimsonScript - so far it has only a simple 
> description of nil and integer literals:
>
>     rule literal
>        integer_literal / nil_literal <Literal>
>     end
>
>     rule integer_literal
>       hex_integer_literal / octal_integer_literal / binary_integer_literal 
> / decimal_integer_literal / zero_integer_literal <IntegerLiteral>
>     end
>
>     rule nil_literal
>       "nil" <NilLiteral>
>     end
>
>     rule zero_integer_literal
>       '-'? '0'
>     end
>
>     rule decimal_integer_literal
>       '-'? [1-9] [0-9]*
>     end
>
>     rule binary_integer_literal
>       '-'? '0b' [0-1]+
>     end
>
>     rule octal_integer_literal
>       '-'? '0o' [0-7]+
>     end
>
>     rule hex_integer_literal
>       '-'? '0x' [0-9a-fA-F]+
>     end
>
>
> However when I try and parse `0` I get:
>
>
>     1.9.3-p0 :001 > Crimson::Parser.parse('0')
>     TypeError: wrong argument type Class (expected Module)
>     from (eval):72:in `extend'
>     from (eval):72:in `_nt_integer_literal'
>     from (eval):24:in `_nt_literal'
>     from 
> /Users/jnh/.rvm/gems/ruby-1.9.3-p0@crimsonscript/gems/treetop-1.4.10/lib/treetop/runtime/compiled_parser.rb:18:in 
> `parse'
>     from /Users/jnh/Dev/Toys/CrimsonScript/lib/crimson/parser.rb:11:in 
> `parse'
>     from (irb):1
>     from /Users/jnh/.rvm/rubies/ruby-1.9.3-p0/bin/irb:16:in `<main>'
>
>
> I'm not sure what I'm doing wrong, but when I compile the grammar to ruby 
> I can see that it's calling #extend on the result of 
>  _nt_zero_integer_literal.  I'm not sure why that's happening.  Is this a 
> bug?
>
>
> -- 
> James Harton
> sociable.co.nz
> @jamesotron
> +64226803869
>
>
------=_Part_5891_27212481.1330490239657
Content-Type: text/html; charset=utf-8
Content-Transfer-Encoding: quoted-printable

One thing I've learned in my little experience with treetop (maybe I'm doin=
g it the wrong way, but it worked for me), when you define a rule that's ju=
st an aggregation of other two, like some kind of inheritance, you must use=
 a parenthesis to define the class for it. For example, let's fix your rule=
 integer_literal:<div><br></div><div><div>&nbsp; &nbsp; rule integer_litera=
l</div><div>&nbsp; &nbsp; &nbsp; (hex_integer_literal / octal_integer_liter=
al / binary_integer_literal / decimal_integer_literal / zero_integer_litera=
l) &lt;IntegerLiteral&gt;</div><div>&nbsp; &nbsp; end</div><div><div><br></=
div><div>Try it and post some feedback, as an treetop apprentice, I'd like =
to share experiences.&nbsp;</div><div><br>On Tuesday, February 28, 2012 10:=
46:03 PM UTC-3, James Harton wrote:<blockquote class=3D"gmail_quote" style=
=3D"margin: 0;margin-left: 0.8ex;border-left: 1px #ccc solid;padding-left: =
1ex;">
                <div>Hi.</div><div><div><br></div><div>I'm throwing togethe=
r a toy language at <a href=3D"https://github.com/jamesotron/CrimsonScript"=
 target=3D"_blank">https://github.com/jamesotron/<wbr>CrimsonScript</a> - s=
o far it has only a simple description of nil and integer literals:</div><d=
iv><br></div><div>&nbsp; &nbsp; rule literal</div><div>&nbsp; &nbsp; &nbsp;=
 &nbsp;integer_literal / nil_literal &lt;Literal&gt;</div><div>&nbsp; &nbsp=
; end</div><div><br></div><div>&nbsp; &nbsp; rule integer_literal</div><div=
>&nbsp; &nbsp; &nbsp; hex_integer_literal / octal_integer_literal / binary_=
integer_literal / decimal_integer_literal / zero_integer_literal &lt;Intege=
rLiteral&gt;</div><div>&nbsp; &nbsp; end</div><div><br></div><div>&nbsp; &n=
bsp; rule nil_literal</div><div>&nbsp; &nbsp; &nbsp; "nil" &lt;NilLiteral&g=
t;</div><div>&nbsp; &nbsp; end</div><div><br></div><div>&nbsp; &nbsp; rule =
zero_integer_literal</div><div>&nbsp; &nbsp; &nbsp; '-'? '0'</div><div>&nbs=
p; &nbsp; end</div><div><br></div><div>&nbsp; &nbsp; rule decimal_integer_l=
iteral</div><div>&nbsp; &nbsp; &nbsp; '-'? [1-9] [0-9]*</div><div>&nbsp; &n=
bsp; end</div><div><br></div><div>&nbsp; &nbsp; rule binary_integer_literal=
</div><div>&nbsp; &nbsp; &nbsp; '-'? '0b' [0-1]+</div><div>&nbsp; &nbsp; en=
d</div><div><br></div><div>&nbsp; &nbsp; rule octal_integer_literal</div><d=
iv>&nbsp; &nbsp; &nbsp; '-'? '0o' [0-7]+</div><div>&nbsp; &nbsp; end</div><=
div><br></div><div>&nbsp; &nbsp; rule hex_integer_literal</div><div>&nbsp; =
&nbsp; &nbsp; '-'? '0x' [0-9a-fA-F]+</div><div>&nbsp; &nbsp; end</div><div>=
<br></div><div><br></div><div>However when I try and parse `0` I get:</div>=
<div><br></div><div><br></div><div>&nbsp; &nbsp; 1.9.3-p0 :001 &gt; Crimson=
::Parser.parse('0')</div><div>&nbsp; &nbsp; TypeError: wrong argument type =
Class (expected Module)</div><div>&nbsp; &nbsp; <span style=3D"white-space:=
pre">=09</span>from (eval):72:in `extend'</div><div>&nbsp; &nbsp; <span sty=
le=3D"white-space:pre">=09</span>from (eval):72:in `_nt_integer_literal'</d=
iv><div>&nbsp; &nbsp; <span style=3D"white-space:pre">=09</span>from (eval)=
:24:in `_nt_literal'</div><div>&nbsp; &nbsp; <span style=3D"white-space:pre=
">=09</span>from /Users/jnh/.rvm/gems/ruby-1.9.<wbr>3-p0@crimsonscript/gems=
/<wbr>treetop-1.4.10/lib/treetop/<wbr>runtime/compiled_parser.rb:18:<wbr>in=
 `parse'</div><div>&nbsp; &nbsp; <span style=3D"white-space:pre">=09</span>=
from /Users/jnh/Dev/Toys/<wbr>CrimsonScript/lib/crimson/<wbr>parser.rb:11:i=
n `parse'</div><div>&nbsp; &nbsp; <span style=3D"white-space:pre">=09</span=
>from (irb):1</div><div>&nbsp; &nbsp; <span style=3D"white-space:pre">=09</=
span>from /Users/jnh/.rvm/rubies/ruby-1.<wbr>9.3-p0/bin/irb:16:in `&lt;main=
&gt;'</div><div><br></div><div><br></div><div>I'm not sure what I'm doing w=
rong, but when I compile the grammar to ruby I can see that it's calling #e=
xtend on the result of &nbsp;_nt_zero_integer_literal. &nbsp;I'm not sure w=
hy that's happening. &nbsp;Is this a bug?</div></div><div><br></div>
                <div><div><br></div>--&nbsp;<br>James Harton<div><a href=3D=
"http://sociable.co.nz" target=3D"_blank">sociable.co.nz</a></div><div>@jam=
esotron<br>+64226803869</div><div><br></div></div>
</blockquote></div></div></div>
------=_Part_5891_27212481.1330490239657--

------=_Part_5890_31705336.1330490239657--