使用 Raku 语法时,可以限制解析时间吗?

use*_*725 4 grammar parsing raku


\n

以下 Raku 程序定义了一个语法Parser,然后尝试使用它来解析字符串baa。然而,程序执行时间太长。有没有办法限制用于解析的执行时间量,以便解析可以被视为已超出所需的限制并超时\xe2\x80\xaf?

\n
\n
grammar Parser\n  {\n  token  TOP  { <S> }\n  token S { \'\' | <S> <S> | \'a\' <S> \'b\' | <S> \'a\' | \'b\' <S> \'b\' }\n  }\n\nsub MAIN()\n  {\n  say Parser.parse( \'baa\' ).Bool ; # Would like True, False, or Timeout\n  } # end sub MAIN\n
Run Code Online (Sandbox Code Playgroud)\n
\n

另外,是否有计划让Raku实现ANTLR自适应 LL(*)解析?ANTLR 4.11.1 版本的代码生成目标包括 Java、Python 等,但不包括 Raku。

\n
\n

Eli*_*sen 7

目前除了退出进程之外,没有其他方法可以停止解析其他进程。如果您的情况没问题,那么您可以执行以下操作:

start {
    sleep 10;   # however much time you want it to give
    note "Sorry, it took to long";
    exit 1;
}
Run Code Online (Sandbox Code Playgroud)

如果这不是一个选项,则上述主题有几种变体,例如将语法解析放入块中start并等待承诺被遵守或打破。