gpt4 book ai didi

Haskell 秒差距和无序属性

转载 作者:行者123 更新时间:2023-12-02 20:47:45 25 4
gpt4 key购买 nike

我正在尝试使用 Parsec 来解析这样的内容:

property :: CharParser SomeObject
property = do
name
parameters
value
return SomeObjectInstance { fill in records here }

我正在实现 iCalendar 规范,并且每个类似都有一个名称:参数:值三元组,非常类似于 XML 具有名称:属性:内容三元组的方式。事实上you could very easily convert an iCalendar into XML format (以为我真的看不出优点)。

我的观点是,参数根本不必按任何顺序出现,并且每个参数可以有不同的类型。一个参数可以是字符串,而另一个参数可以是另一元素的数字 ID。它们可能还没有相似之处,最后,我想将它们正确地放置在我希望解析器返回的任何“SomeObjectInstance”的正确记录字段中。我该如何去做这种事情(或者你能给我举一个例子,说明有人必须解析这样的数据)?

谢谢,我知道我的问题可能有点困惑,但这反射(reflect)了我对我需要做什么的理解程度。

编辑:我试图避免给出预期的输出(因为它很大,而不是因为它被隐藏),但这里是一个输入文件的示例(来自维基百科):

BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//hacksw/handcal//NONSGML v1.0//EN
BEGIN:VEVENT
UID:uid1@example.com
DTSTAMP:19970714T170000Z
ORGANIZER;CN=John Doe:MAILTO:john.doe@example.com
DTSTART:19970714T170000Z
DTEND:19970715T035959Z
SUMMARY:Bastille Day Party
END:VEVENT
END:VCALENDAR

正如你所看到的,它在 VCalendar 中包含一个 VEvent,我已经制作了 data structures that represent them here .

我正在尝试编写一个解析器,将该类型的文件解析为我的数据结构,但我陷入了需要处理以任何顺序、任何类型的属性的困境;日期、时间、整数、字符串、uid 等。我希望这在不重复整个 iCalendar 规范的情况下更有意义。

最佳答案

Parsec 具有 Parsec.Perm 模块,可以精确地解析无序但线性(即在语法树中的同一级别)元素,例如 XML 文件中的属性标签。

不幸的是,Perm 模块大多没有文档记录。最好的引用是 Haddock 文档页面引用的 Parsing Permutation Phrases 论文,但即便如此,这很大程度上也是对该技术的描述,而不是如何使用它。

关于Haskell 秒差距和无序属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3706172/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com