语法对文件进行subparse

Håk*_*and 5 grammar perl6 raku

假设您只想使用Perl 6语法解析大文件的开头.为了避免将整个文件读入一个字符串,然后调用subparse该字符串.阅读文件时是否可以进行子搜索?

subparsefile()Grammar课堂上找不到任何方法,所以我觉得这很难实现.但理论上应该是可能的,例如,如何在不将整个文件读入内存的情况下搜索文件中的多行模式?

Eli*_*sen 7

目前你不能.此刻解析任何内容都需要整个字符串存在于内存中.

话虽如此,如果您知道模式可能扩展的最大行数,您可以执行以下操作:

my $max = 3; # maximum number of lines
for "textfile".IO.lines(:!chomp).rotor( $max => -$max + 1 ) -> @lines {
    @lines.join.subparse( $grammar)
    # and whatever you would like to do
}
Run Code Online (Sandbox Code Playgroud)

它不是最快的方式,但它不必读取内存中的整个文件.

  • 或者,如果你知道你的模式最多可以有多少个字符,你可能想要尝试一个`"textfile".IO.comb(halfmaxsize).rotor(2 => - 1) - > @chunks {@ chunks.join. subparse($ grammar)}` (2认同)