Свернуть свой собственный синтаксический анализатор XML / алгоритм синтаксического анализа XML? - PullRequest
21 голосов
/ 16 декабря 2009

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

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

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

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

Ответы [ 4 ]

17 голосов
/ 16 декабря 2009

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

2 голосов
/ 16 декабря 2009

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

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

0 голосов
/ 17 декабря 2009

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

0 голосов
/ 16 декабря 2009

http://expat.sourceforge.net/

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

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