Home > front end >  When using a Raku grammar, can one limit parsing time?
When using a Raku grammar, can one limit parsing time?

Time:09-09


The following Raku program defines a grammar Parser then attempts to use it to parse the string baa. However, program execution takes too long. Is there a way to limit the amount of execution time devoted to parsing so that parsing can be deemed to have exceeded the desired limit and timed out ?


grammar Parser
  {
  token  TOP  { <S> }
  token S { '' | <S> <S> | 'a' <S> 'b' | <S> 'a' | 'b' <S> 'b' }
  }

sub MAIN()
  {
  say Parser.parse( 'baa' ).Bool ; # Would like True, False, or Timeout
  } # end sub MAIN

Also, might there be plans to have Raku implement the Adaptive LL(*) parsing of ANTLR? Version 4.11.1 of ANTLR has code generation targets including Java, Python, and others, but not Raku.


CodePudding user response:

There is currently no way to stop parsing other, other than by exiting the process. If that is ok with your situation, then you could do something like:

start {
    sleep 10;   # however much time you want it to give
    note "Sorry, it took to long";
    exit 1;
}

If that is not an option, there are several variations on the above theme, with e.g. putting the grammar parsing into a start block and wait for the promise to be kept, or broken.

  • Related