Подтвердить что ты не робот

Развернуть собственный алгоритм анализа парсера XML/XML?

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

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

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

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

4b9b3361

Ответ 1

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

Ответ 2

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

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

Ответ 3

VTD-XML, вероятно, самый простой способ синтаксического анализа...

Ответ 4

http://expat.sourceforge.net/

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