2009-12-16 3 views
21

Итак, как забавный проект, я решил написать свой собственный синтаксический анализатор XML. Нет, не анализировать конкретный документ и нет, не используя библиотеку XML-анализатора. Я имею в виду написание кода для анализа любого XML-документа в пригодную для использования структуру данных. Просто потому, что мне нравится вызов. :-)Создайте собственный XML-синтаксический анализатор/алгоритм XML-анализа?

С учетом сказанного, до сих пор это оказалось ... интересным. Это не так легко разобрать (особенно, когда вы начинаете принимать во внимание специальные символы, CDATA, пустые теги, комментарии и т. Д.), Поскольку они изначально выглядели.

Есть ли хорошо документированные алгоритмы синтаксического анализа XML или объяснения в любом месте, о котором кто-либо знает? Кажется, что есть хорошо документированные операции Queue, Stack и BTree и т. Д. И т. Д. И т. Д. И т. Д. И т. Д., Но я не уверен, что когда-либо видел простой, хорошо документированный алгоритм XML-анализатора ...

Повторяю: Я не ищет сборную парсерную библиотеку! Я ищу информацию о как создать собственную собственную сборную библиотеку анализатора! Не говорите мне «использовать expat» или «использовать SAX» или что-то еще. Это не то, о чем я прошу.

ответ

17

Antlr предлагает tutorial при разборе XML. Он разбивает процесс на фазы: лексирование, синтаксический анализ, разбор дерева и т. Д. Выглядит довольно интересно.

+0

+1 за предложение генератора синтаксического анализа – kdgregory

-9

http://expat.sourceforge.net/

Expat является XML-парсер библиотека написана на C. Это потоковый анализатор, в котором приложение регистрирует обработчики для вещей анализатор может найти в документе XML (например, начать теги). Вводная статья об использовании Expat доступна на xml.com.

+5

Пожалуйста, прочтите вопрос. Это именно то, чего я * не хочу. Я хочу написать что-то вроде expat *, а не просто * использовать expat *. –

1

Я не знаю, будет ли это «обманывать» в вашей книге, но вы можете попробовать разобрать свой XML с готовым универсальным парсером языка, таким как ANTLR. Результатом будет список токенов (если вы просто используете lexer) или дерево синтаксического анализа (если вы включаете парсер), и тогда вы можете перестроить дерево разбора почти 1: 1 в структуру XML.

Возможно. Я не думал о том, как XML может отличаться от «нормального» корма ANTLR, такого как языки программирования, и сможете ли вы определить подходящую грамматику.

-6

VTD-XML, возможно, самый простой способ анализа ...

+1

Прочтите вопрос, я не ищу встроенную библиотеку, я ищу алгоритмы или учебные пособия о том, как * создать свою собственную библиотеку *. –

+0

Я думаю, что я имею в виду виртуальный дескриптор токена, который является тем, что vtd-xml реализует –

+0

Спам, опять? Разве вы не учитесь? –

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