【发布时间】:2010-09-14 04:36:27
【问题描述】:
我正在尝试使用 Parsec 解析如下内容:
property :: CharParser SomeObject
property = do
name
parameters
value
return SomeObjectInstance { fill in records here }
我正在实现 iCalendar 规范,并且在每一个 like 上都有一个 name:parameters:value 三元组,非常类似于 XML 有一个 name:attributes:content 三元组的方式。事实上you could very easily convert an iCalendar into XML format(以为我真的看不到优势)。
我的意思是,参数根本不必按任何顺序排列,每个参数可能有不同的类型。一个参数可能是一个字符串,而另一个是另一个元素的数字 id。它们可能还没有相似之处,最后,我想将它们正确放置在我希望解析器返回的任何“SomeObjectInstance”的正确记录字段中。我该怎么做这种事情(或者你能给我举一个例子,说明有人必须解析这样的数据)?
谢谢,我知道我的问题可能有点混乱,但这反映了我对自己需要做什么的理解程度。
编辑:我试图避免给出预期的输出(因为它很大,而不是因为它是隐藏的)但这里是一个输入文件的示例(来自维基百科):
开始:VCALENDAR
版本:2.0
产品:-//hacksw/handcal//NONSGML v1.0//EN
开始:事件
UID:uid1@example.com
DTSTAMP:19970714T170000Z
组织者;CN=John Doe:MAILTO:john.doe@example.com
DTSTART:19970714T170000Z
DTEND:19970715T035959Z
摘要:巴士底日派对
结束:VEVENT
END:VCALENDAR
如您所见,它在 VCalendar 中包含一个 VEvent,我创建了 data structures that represent them here。
我正在尝试编写一个解析器,将这种类型的文件解析到我的数据结构中,但我被困在需要处理任何类型的任何顺序的属性的位上;日期、时间、整数、字符串、uid 等。我希望在不重复整个 iCalendar 规范的情况下更有意义。
【问题讨论】:
-
我不确定你在问什么。你能举一个可能的输入和预期输出的例子吗?
-
我提供了更多信息,我希望它现在更有意义,您已经期望输入和我试图用解析器填充的数据结构。现在我只是想弄清楚如何用 parsec 做到这一点。
标签: haskell properties icalendar parser-generator parsec