OK ... I have a long answer for you ... check out
https://gist.github.com/NigelThorne/96c6a833f4e856a5f500

It's too long for this mailing group.

In short you have something matching:
"keyword_end.absent? > root"
which is like
"keyword_end.absent? > (a|b|c|d|).repeat(0)"

absent? and repeat(0) both have a "consume nothing" options.. so can match
forever.





---
"No man is an island... except Philip"


On Tue, Jun 3, 2014 at 4:59 PM, Torsten Ruger <[email protected]> wrote:

> So,
>
> I am adding features to my parser at an amazing rate, 250+ tests
> already. It's so easy that i catch myself thinking i am cheating.
> The other day i added qualified function calls in like 10 minutes or so.
> _Great_
>
> But now i have hit this "hanging" issue and am not sure how to even
> debug. Generally speaking, sometimes when i make a small typing mistake,
> instead of getting an error from parslet i get silence. No matter how
> long i let it run, when i interrupt, it's always about the same
> stack-trace (below):
>
> I put a test case for this up :
>
> https://github.com/ruby-in-ruby/crystal/blob/master/test/parser/test_fails.rb
> If you look, it defines a function in a class, and generally speaking
> that works.
> But the case has no brackets on the function, as is legal in ruby. But I
> haven't implemented that, so in my parser it's not legal.
> Iif i add () after the function it works.
>
> The function is defined here:
> https://github.com/ruby-in-ruby/crystal/blob/master/lib/parser/call_site.rb
> but i that alone can't be the problem, because outside a class
> definition i do get the error, not the hang.
>
> So, as i said, any clues to how i can debug that kind of thing ?
>
> Torsten
>
>
>
>
> /Users/raisa/.rbenv/versions/2.0.0-p353/lib/ruby/gems/2.0.0/gems/parslet-1.6.1/lib/parslet/source.rb:84:in
> `bytepos=': Interrupt
>      from
>
> /Users/raisa/.rbenv/versions/2.0.0-p353/lib/ruby/gems/2.0.0/gems/parslet-1.6.1/lib/parslet/atoms/context.rb:46:in
> `try_with_cache'
>      from
>
> /Users/raisa/.rbenv/versions/2.0.0-p353/lib/ruby/gems/2.0.0/gems/parslet-1.6.1/lib/parslet/atoms/base.rb:83:in
> `apply'
>      from
>
> /Users/raisa/.rbenv/versions/2.0.0-p353/lib/ruby/gems/2.0.0/gems/parslet-1.6.1/lib/parslet/atoms/repetition.rb:35:in
> `block in try'
>      from
>
> /Users/raisa/.rbenv/versions/2.0.0-p353/lib/ruby/gems/2.0.0/gems/parslet-1.6.1/lib/parslet/atoms/repetition.rb:34:in
> `loop'
>      from
>
> /Users/raisa/.rbenv/versions/2.0.0-p353/lib/ruby/gems/2.0.0/gems/parslet-1.6.1/lib/parslet/atoms/repetition.rb:34:in
> `try'
>      from
>
> /Users/raisa/.rbenv/versions/2.0.0-p353/lib/ruby/gems/2.0.0/gems/parslet-1.6.1/lib/parslet/atoms/context.rb:31:in
> `try_with_cache'
>      from
>
> /Users/raisa/.rbenv/versions/2.0.0-p353/lib/ruby/gems/2.0.0/gems/parslet-1.6.1/lib/parslet/atoms/base.rb:83:in
> `apply'
>      from
>
> /Users/raisa/.rbenv/versions/2.0.0-p353/lib/ruby/gems/2.0.0/gems/parslet-1.6.1/lib/parslet/atoms/named.rb:17:in
> `apply'
>      from
>
> /Users/raisa/.rbenv/versions/2.0.0-p353/lib/ruby/gems/2.0.0/gems/parslet-1.6.1/lib/parslet/atoms/sequence.rb:29:in
> `block in try'
>      from
>
> /Users/raisa/.rbenv/versions/2.0.0-p353/lib/ruby/gems/2.0.0/gems/parslet-1.6.1/lib/parslet/atoms/sequence.rb:27:in
> `each'
>      from
>
> /Users/raisa/.rbenv/versions/2.0.0-p353/lib/ruby/gems/2.0.0/gems/parslet-1.6.1/lib/parslet/atoms/sequence.rb:27:in
> `each_with_index'
>      from
>
> /Users/raisa/.rbenv/versions/2.0.0-p353/lib/ruby/gems/2.0.0/gems/parslet-1.6.1/lib/parslet/atoms/sequence.rb:27:in
> `try'
>      from
>
> /Users/raisa/.rbenv/versions/2.0.0-p353/lib/ruby/gems/2.0.0/gems/parslet-1.6.1/lib/parslet/atoms/context.rb:31:in
> `try_with_cache'
>      from
>
> /Users/raisa/.rbenv/versions/2.0.0-p353/lib/ruby/gems/2.0.0/gems/parslet-1.6.1/lib/parslet/atoms/base.rb:83:in
> `apply'
>      from
>
> /Users/raisa/.rbenv/versions/2.0.0-p353/lib/ruby/gems/2.0.0/gems/parslet-1.6.1/lib/parslet/atoms/entity.rb:21:in
> `try'
>      from
>
> /Users/raisa/.rbenv/versions/2.0.0-p353/lib/ruby/gems/2.0.0/gems/parslet-1.6.1/lib/parslet/atoms/context.rb:31:in
> `try_with_cache'
>      from
>
> /Users/raisa/.rbenv/versions/2.0.0-p353/lib/ruby/gems/2.0.0/gems/parslet-1.6.1/lib/parslet/atoms/base.rb:83:in
> `apply'
>      from
>
> /Users/raisa/.rbenv/versions/2.0.0-p353/lib/ruby/gems/2.0.0/gems/parslet-1.6.1/lib/parslet/atoms/alternative.rb:35:in
> `block in try'
>      from
>
> /Users/raisa/.rbenv/versions/2.0.0-p353/lib/ruby/gems/2.0.0/gems/parslet-1.6.1/lib/parslet/atoms/alternative.rb:34:in
> `map'
>      from
>
> /Users/raisa/.rbenv/versions/2.0.0-p353/lib/ruby/gems/2.0.0/gems/parslet-1.6.1/lib/parslet/atoms/alternative.rb:34:in
> `try'
>      from
>
> /Users/raisa/.rbenv/versions/2.0.0-p353/lib/ruby/gems/2.0.0/gems/parslet-1.6.1/lib/parslet/atoms/context.rb:31:in
> `try_with_cache'
>      from
>
> /Users/raisa/.rbenv/versions/2.0.0-p353/lib/ruby/gems/2.0.0/gems/parslet-1.6.1/lib/parslet/atoms/base.rb:83:in
> `apply'
>      from
>
> /Users/raisa/.rbenv/versions/2.0.0-p353/lib/ruby/gems/2.0.0/gems/parslet-1.6.1/lib/parslet/atoms/repetition.rb:35:in
> `block in try'
>      from
>
> /Users/raisa/.rbenv/versions/2.0.0-p353/lib/ruby/gems/2.0.0/gems/parslet-1.6.1/lib/parslet/atoms/repetition.rb:34:in
> `loop'
>      from
>
> /Users/raisa/.rbenv/versions/2.0.0-p353/lib/ruby/gems/2.0.0/gems/parslet-1.6.1/lib/parslet/atoms/repetition.rb:34:in
> `try'
>      from
>
> /Users/raisa/.rbenv/versions/2.0.0-p353/lib/ruby/gems/2.0.0/gems/parslet-1.6.1/lib/parslet/atoms/context.rb:31:in
> `try_with_cache'
>      from
>
> /Users/raisa/.rbenv/versions/2.0.0-p353/lib/ruby/gems/2.0.0/gems/parslet-1.6.1/lib/parslet/atoms/base.rb:83:in
> `apply'
>      from
>
> /Users/raisa/.rbenv/versions/2.0.0-p353/lib/ruby/gems/2.0.0/gems/parslet-1.6.1/lib/parslet/atoms/entity.rb:21:in
> `try'
>      from
>
> /Users/raisa/.rbenv/versions/2.0.0-p353/lib/ruby/gems/2.0.0/gems/parslet-1.6.1/lib/parslet/atoms/context.rb:31:in
> `try_with_cache'
>      from
>
> /Users/raisa/.rbenv/versions/2.0.0-p353/lib/ruby/gems/2.0.0/gems/parslet-1.6.1/lib/parslet/atoms/base.rb:83:in
> `apply'
>      from
>
> /Users/raisa/.rbenv/versions/2.0.0-p353/lib/ruby/gems/2.0.0/gems/parslet-1.6.1/lib/parslet/atoms/base.rb:70:in
> `setup_and_apply'
>      from
>
> /Users/raisa/.rbenv/versions/2.0.0-p353/lib/ruby/gems/2.0.0/gems/parslet-1.6.1/lib/parslet/atoms/base.rb:30:in
> `parse'
>
>

Reply via email to