Код парсера с открытым исходным кодом для разметки Mediawiki [закрыто]
-
11-07-2019 - |
Вопрос
Меня интересует выборочный анализ XML-разметки Mediawiki для создания настраиваемой HTML-страницы, которая представляет собой некое подмножество HTML, созданное реальным механизмом рендеринга PHP Mediawiki.
Я хочу его для BzReader, автономной программы чтения сжатых дампов Mediawiki, написанной на C#.Таким образом, синтаксический анализатор C# был бы идеален, но может помочь любой хороший код.
Конечно, если никто не сделал этого раньше, я думаю, пришло время начать проект по поддержке бесплатного и отдельного парсера Mediawiki, основанного на собственном парсере Mediawiki, но менее тесно интегрированного с самим Mediawiki.
Итак, знает ли кто-нибудь какую-нибудь базу, с которой я мог бы начать, которая была бы лучше, чем взлом PHP-кода Mediawiki?
Решение
Список анализаторов можно найти в http://www.mediawiki.org/wiki/A альтернативной_парсерам, но парсер ac # там не включен ...
Другие советы
Обновлять
Имейте в виду, что Screwturn не придерживается синтаксиса Mediawiki, а использует свой собственный вариант, который немного отличается.
Синтаксис Mediawiki не подходит для парсера LALR (или даже LL*), поскольку в его определении много двусмысленностей, а также поддерживается HTML.Есть обсуждение по этому поводу в этом вопросе, вы, по сути, вынуждены писать свой собственный парсер и токенизатор, а не просто писать для него BNF-файл, а затем использовать ANTLR/Gold/Irony.
Roadkill вики использует Креольский парсер для анализа Mediawiki, но с ограниченной поддержкой.
Screwturn выпускается под лицензией GPL и имеет парсер C#:
- Лицензия на отвертку
- Загрузка исходного кода (к сожалению, нет веб-SVN)
Вам нужен класс Core.Formatter, который имеет множество регулярных выражений для выполнения своей работы:
public static class Formatter {
}
Это не самый красивый код, «но он работает».
Я хотел сказать несколько слов о шаблонах Mediawiki здесь а>. Интересно, что сейчас есть список альтернативных парсеров, мне придется это исследовать.