语法对文件进行subparse

时间:2017-12-14 16:53:56

标签: grammar perl6

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

我在subparsefile()类中找不到任何Grammar方法,所以我想这很难实现。但理论上应该是可能的,例如参见How do I search a file for a multiline pattern without reading the whole file into memory?

1 个答案:

答案 0 :(得分: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
}

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