Я пытаюсь использовать Parsec для разбора чего-то вроде этого:
property :: CharParser SomeObject
property = do
name
parameters
value
return SomeObjectInstance { fill in records here }
Я реализую спецификацию iCalendar и на каждом подобном есть имя: параметры: значение триплет, очень похоже на способ, которымXML имеет имя: атрибуты: триплет содержимого.На самом деле вы можете очень легко конвертировать iCalendar в формат XML (хотя я не вижу преимуществ).
Моя точка зрения заключается в том, что параметры не должны располагаться в любом порядке привсе и каждый параматер может иметь различный тип.Один параметр может быть строкой, а другой - числовым идентификатором другого элемента.Они могут не иметь общего сходства, в конце концов, я хочу правильно разместить их в нужных полях записи для любого «SomeObjectInstance», которое я хотел, чтобы парсер возвратил.Как мне поступить таким образом (или вы можете указать мне на пример, где кто-то должен был анализировать данные, подобные этим)?
Спасибо, я знаю, что мой вопрос, возможно, немного запутан, но это отражает мой уровень понимания того, что мне нужно делать.
Редактировать : Я пыталсяизбегайте выдачи ожидаемого результата (потому что он большой, а не потому, что он скрыт), но вот пример входного файла (из википедии):
НАЧАЛО: VCALENDAR
ВЕРСИЯ: 2.0
PRODID: - // hacksw / handcal // NONSGML v1.0 // EN
НАЧАТЬ: VEVENT
UID: uid1@example.com
DTSTAMP: 19970714T170000Z
ОРГАНИЗАТОР; CN = Джон Доу: MAILTO: john.doe@example.com
DTSTART: 19970714T170000Z
DTEND: 19970715T035959Z
РЕЗЮМЕ: Празднование Дня взятия Бастилии
КОНЕЦ: VEVENT
КОНЕЦ: VCALENDAR
Как вы видите, он содержит один VEvent внутри VCalendar, я создал структур данных, которые представляют их здесь .
Я пытаюсь написать парсер, который анализирует этот тип файла в моемструктуры данных, и я застрял на бит, где мне нужно обрабатывать приходящие свойствав любом порядке с любым типом;дата, время, int, строка, uid, т. д.Я надеюсь, что это имеет смысл без повторения всей спецификации iCalendar.