Вы бы внедрили облегченный парсер XML с <regex>? - PullRequest
4 голосов
/ 08 ноября 2010

Если бы вам пришлось реализовать облегченный синтаксический анализатор XML, вы бы выбрали регулярное выражение?

Синтаксический анализ XML в моем случае будет максимально упрощен: только теги и текстовое содержимое. Нет пространств имен, нет атрибутов, нет поддержки схемы (в начале, конечно, но, может быть ...).

Думаю, для меня было бы неплохо изучить новую библиотеку C ++ 0x . Однако мне было интересно, не будет ли разбор XML выше приличных ограничений регулярных выражений.

Ответы [ 4 ]

11 голосов
/ 08 ноября 2010

Одним словом: нет.XML не является обычным языком.

ОБНОВЛЕНИЕ (Расширить, основываясь на обсуждении в комментариях ниже)

XML не является регулярным,поэтому вы не можете надеяться использовать регулярные выражения для выполнения какой-либо операции синтаксического анализа / разбиения одним нажатием для всего файла / строки.

Хотя вы можете написать синтаксический анализатор на основе конечного автомата, который использует регулярные выражения для выполнения лексирования/ tokenisation, ИМХО, это было бы менее эффективно и более подвержено ошибкам, чем использование инструмента, предназначенного для работы.Как уже говорили другие, Flex / Bison - один из вариантов.

4 голосов
/ 08 ноября 2010

Если бы мне пришлось это сделать, я бы использовал настоящий генератор лексеров / парсеров, такой как flex / yacc.Да, для начала требуется больше работы, но как только вы оплатите эту стоимость установки, добавить поддержку дополнительных функций будет намного проще.Кроме того, flex и yacc были оптимизированы на протяжении десятилетий, поэтому они будут генерировать гораздо более быстрый код, чем все, что вы пишете вручную.

1 голос
/ 08 ноября 2010

Если вам действительно нужно проанализировать XML: не надо, найдите настоящий анализатор XML.

Если вы просто хотите получить опыт работы с новой библиотекой регулярных выражений C ++ 0x: попробуйте найти лучший и более полезный проект. Для начала вам нужно что-то, что может быть использовано позже (см. Выше о реальном парсере XML). Тем не менее, есть худшие способы изучения библиотеки регулярных выражений. :)

1 голос
/ 08 ноября 2010

Я написал облегченный парсер XML и не использовал регулярные выражения. Это очень легко сделать, если вы используете только подмножество XML. Просто прочитайте XML символ за символом и обновите статус с помощью нескольких логических значений (например, in_a_tag). Это быстрее, чем все, что вы бы сделали с регулярным выражением, и вам не нужно заниматься проблемой строк или памяти (попробуйте сопоставить строку? Весь документ? на 2 строчки?)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...