2016-02-16 3 views
0
ческих

Я пытаюсь разобрать ческий входной файл в соответствии с RFC 5545. В частности: -Property имени -Дополнительных параметры, каждый из которых, начиная с точкой с запятой «;» и, возможно наличие нескольких разделенных запятыми значения (значения параметров могут быть в двойных кавычках, в этом случае они могут содержать двоеточие, точку с запятой, и запятые) -Colon «:» -Property значениеСоветов для разбора файла

Пример линии:

> ORGANIZER;CN=Obi-WanKenobi;SENTBY="mailto:[email protected]":mailto:[email protected] 

В этом случае строка будет считываться в буфер и анализироваться (с использованием strtok в настоящее время) следующим образом: Организатор - это имя свойства; CN = Obi-WanKenobi и SENTBY = "mailto: [email protected]" являются параметрами; mailto: [email protected] - это стоимость имущества.

Я понятия не имею, с чего начать. Различные входные случаи почти бесконечны, и я не смог найти эффективный алгоритм для покрытия всех указанных случаев. Это strtok путь? или есть другая библиотека C, которая имеет более интеллектуальный парсер? Нужно, чтобы кто-то поставил меня на правильный путь.

+0

Вам нужно написать свой собственный т okenizer. 'strtok' не будет работать хорошо, потому что он заменяет разделитель символом NUL и не сообщает вам, какой разделитель он нашел, например. если строка разделителя равна '";: "', нет способа узнать, нашел ли 'strtok' двоеточие или полуточку. – user3386109

+0

Плюс, что разделитель может отображаться в двойных кавычках. Вы считали, что просто смотрите на libical https://github.com/libical/libical – Evert

ответ

0

Я предлагаю вам начать с глядя на существующей реализации C:

Над ответами адресации сразу возникает вопрос, кроме вас может затронуть другие проблемы, поскольку вы продвигаетесь по стандарту RFC5545 и смотрите на то, что сделали другие, может быть полезно

0

Вы можете использовать flex (клон GNU lex) для написания лексического анализатора, который соответствует вашей задаче. Ragel - еще один хороший инструмент для решения этой проблемы.

Смежные вопросы