【问题标题】:It is possible to use Perl6 grammar on raster data ? (Use Case : Cloud Optimized GeoTIFF Validation)可以在栅格数据上使用 Perl6 语法吗? (用例:云优化的 GeoTIFF 验证)
【发布时间】:2019-02-07 07:56:38
【问题描述】:

关于 perl6 语法和光栅(一般是二进制)数据的几个问题让人很头疼。据我了解,文本方法是在字素级别通过语法工作,我们可以这样处理栅格数据吗?我们可以自定义字素定义来处理栅格数据或二进制数据的基本单元,以便使用语法来解析它们吗?

看到 perl6 是由 perl6 语法定义的,我们是否可以将类似的语法定义为一种“验证”测试,其基本情况是语法是否可以解析数据,数据是否格式正确并且经过结构验证?将这种方法用于文本数据,语法作为基本单元是面向文本的,但我们可以自定义那些后端定义(例如,可以覆盖 :sigspace 以使 rules 和 @ 987654331@ parse with a another separator for grapheme) 以在二进制数据领域启用语法的力量?

谢谢!

对于背景部分:

在过去的几周里,我开始出于个人兴趣学习 Perl6。在seeing this talk at FOSDEM 2019 之后,我开始问自己(和我周围的人)关于使用语法检查/解析二进制数据的问题。例如,我的用例将在不支持 GDAL 绑定的情况下复制 Cloud Optimized Geotiff validator(我在 perl6 中还没有看到)。这对我来说显然是一个学习项目。

The Spec for Cloud Optimized Geotiff

目前,基本思路是在可能的情况下借助 perl6 语法解析二进制结构作为第一步,希望能够将检查数据和元数据作为主要目标。

注意:不是母语,如果某些部分需要重写/精度,请随时指出。

【问题讨论】:

  • “例如到 ... 没有 ... 绑定的支持(我在 perl6 中还没有看到)。”。 cf stackoverflow.com/questions/54465122/…stackoverflow.com/questions/54487122/… 以及附近的 cmets。
  • 不久前,这篇文章发表在使用 Perl 6 语法处理 GFX3 文件blogs.perl.org/users/sylvain_colinet/2019/01/…,我理解为二进制格式。所以我知道它是可以做到的,虽然你当然必须把 GeoTIFF 放在语法形式来解析它。
  • @jjmerelo 没有找到那个链接,谢谢,我会挖掘它。但据我了解,perl6.c 实际上并没有原生管理二进制数据。例如,在链接的博客文章中:“由于语法并不真正支持纯二进制数据,因此您必须将最初存储在 buf 中的数据作为 latin1 编码字符串传递。”文章中的逻辑是我正在寻找的,谢谢!
  • @notagoodidea 这是对“perl6 对字形的定义是什么?”的答案; perl6 遵循 unicode 的字素集群规则算法;这是简洁显示的算法的链接:unicode.org/reports/tr29/#Grapheme_Cluster_Boundary_Rules - 我希望这能让事情变得清晰! perl6 中没有机制可以改变字素对字符串的工作方式,至少据我所知

标签: raku geotiff


【解决方案1】:

作为唯一发布的 cmets,我将在这里总结我从 cmets 获得的所有答案、我的进一步研究和 #perl6 IRC 聊天室。


关于对 X 库的绑定支持(在测试用例中,它是 GDAL),perl6 社区内部的策略是利用:


关于二进制数据的解析,我将主题分为两部分:

  1. 一般来说;
  2. 利用语法;

1。一般来说

利用P5pack 模块或使用Inline::Perl5 来使用unpack/pack 实际上(使用perl6.c)是解析二进制数据结构的最佳方式(前者似乎受到青睐,因为它是本机模块)。 查看@raiph 对 SO anwser 的第一条评论,其中显示了基本用例。

2。利用语法

使用 perl6.c,语法只能解析文本。 然而,关于解析二进制数据的问题似乎比较热门(基于在#perl6 irc 频道上看到的反馈),一些需要记录但尚未实​​现的问题似乎为希望看到它在未来发生铺平了道路(近还是远?)。

the @raiph's anwser 的最后一部分列出了很多针对这个方向的资源。此外,在Synopses 05 - Regexes and Rules : line 432 中调用了一个 :bytes 修饰符。我们将不得不看看这些修饰符将在什么时候实现,以及将它们带到语言中的缺失。 在#perl6 irc 频道上,MasterDuke said « also, i think the nqp binary reading/writing ops that jnthn recently specced and nine implemented were a prerequisite for anything further »。我仍然需要调查他到底在说什么,但它似乎朝着好的方向发展。

IMO 的重点之一是与基于 UTF-8 的字形定义相关。如果我们能够将字素定义覆盖为自定义的特殊语法,因为我们现在可以覆盖 :sigspace 修饰符以影响rulestokens的分隔符,我们将获得一种新的操作方式数据结构和语法。目前,字素是在字符串级别而不是语法级别或元中定义的。请参阅 @timotimo cmets 链接到描述 Grapheme Cluster Boundary Rules 的 UTF-8 文档。

@jjmererlo 链接了一种改变规则的方法:Parsing GFX3 format with perl6 grammars

【讨论】:

    猜你喜欢
    • 2016-11-17
    • 2022-10-15
    • 2023-03-20
    • 2014-09-02
    • 2021-10-26
    • 2021-09-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多