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> rule integer_litera=
l</div><div> (hex_integer_literal / octal_integer_liter=
al / binary_integer_literal / decimal_integer_literal / zero_integer_litera=
l) <IntegerLiteral></div><div> end</div><div><div><br></=
div><div>Try it and post some feedback, as an treetop apprentice, I'd like =
to share experiences. </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> rule literal</div><div> =
integer_literal / nil_literal <Literal></div><div>  =
; end</div><div><br></div><div> rule integer_literal</div><div=
> hex_integer_literal / octal_integer_literal / binary_=
integer_literal / decimal_integer_literal / zero_integer_literal <Intege=
rLiteral></div><div> end</div><div><br></div><div> &n=
bsp; rule nil_literal</div><div> "nil" <NilLiteral&g=
t;</div><div> end</div><div><br></div><div> rule =
zero_integer_literal</div><div> '-'? '0'</div><div>&nbs=
p; end</div><div><br></div><div> rule decimal_integer_l=
iteral</div><div> '-'? [1-9] [0-9]*</div><div> &n=
bsp; end</div><div><br></div><div> rule binary_integer_literal=
</div><div> '-'? '0b' [0-1]+</div><div> en=
d</div><div><br></div><div> rule octal_integer_literal</div><d=
iv> '-'? '0o' [0-7]+</div><div> end</div><=
div><br></div><div> rule hex_integer_literal</div><div> =
'-'? '0x' [0-9a-fA-F]+</div><div> 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> 1.9.3-p0 :001 > Crimson=
::Parser.parse('0')</div><div> TypeError: wrong argument type =
Class (expected Module)</div><div> <span style=3D"white-space:=
pre">=09</span>from (eval):72:in `extend'</div><div> <span sty=
le=3D"white-space:pre">=09</span>from (eval):72:in `_nt_integer_literal'</d=
iv><div> <span style=3D"white-space:pre">=09</span>from (eval)=
:24:in `_nt_literal'</div><div> <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> <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> <span style=3D"white-space:pre">=09</span=
>from (irb):1</div><div> <span style=3D"white-space:pre">=09</=
span>from /Users/jnh/.rvm/rubies/ruby-1.<wbr>9.3-p0/bin/irb:16:in `<main=
>'</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 _nt_zero_integer_literal. I'm not sure w=
hy that's happening. Is this a bug?</div></div><div><br></div>
<div><div><br></div>-- <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--