6

有谁知道可以将 Wiki 格式的文本作为输入并生成实体树的解析器,就像 XML 解析器生成实体树一样?为了澄清,我正在寻找一些可以接受如下文字的东西:

 -Intro-
 Textual stuff in ''italics''
 --Subhead--
 Yet more text

并生成一棵以 Intro 为根的树,其中包含三个子节点,其中一个 (Subhead) 本身有一个子节点。我正在寻找可以理解http://meta.wikimedia.org/wiki/Help:Wikitext中描述的“简单”wiki 格式的东西。

我知道 Wiki 文本有几个词法分析器,但没有树解析器。我正在寻找开源并用 C 或 C++ 编写的东西。

4

5 回答 5

2

我会做的是

  1. 为该 wiki 语言编写 BNF 语法。因为它很简单,所以 BNF 也很简单。
  2. 使用Spirit Framework为其创建解析器。它真的很简单(对于那些简单的事情),BNF 语法如此自然地翻译成 C++。
于 2009-02-15T08:28:52.620 回答
2

我编写了一个解析器,它在 Java 内部创建了这样一棵树: Java Wikipedia API

也许您可以为您的 C 或 C++ 实现获得一些想法?

HTMLConverter 类采用内部节点树将其转换为 HTML 标记。

于 2009-02-15T08:45:59.117 回答
2

您不能直接从 wiki 格式的页面执行此操作,因为 wiki 格式没有完整的信息。相反,wiki 格式的文本基本上由一堆正则表达式规则翻译,并插入到 HTML 或 XHTML 的预定义页面框架中。

做你想做的最简单的方法是为一些轻量级文本格式(如纺织品或克里奥尔语)找到合适的格式化程序,将其传递给生成 XHTML,然后使用任何常规解析器解析 XHTML。

于 2009-02-15T03:44:33.813 回答
2

您可能想看看Mylyn WikiText,它是一个使用 Builder 设计模式将 wiki 标记转换为各种 XML 格式的解析器。它附带了用于 HTML、Eclipse 帮助、DITA 和 DocBook 的构建器。您可以使用自己的构建器来自定义输出。

解析器可以处理 Textile、MediaWiki、TracWiki、TWiki 和 Confluence 标记。它是可扩展的,因此您可以根据需要添加新语言。

库是Java

于 2009-02-22T03:13:45.020 回答
1

你可能会从这个 Perl 模块中得到一些想法:

http://search.cpan.org/dist/HTML-WikiConverter-MediaWiki/

我知道您正在寻找 C/C++,但是,嘿,您可能会得到一些好处。

于 2009-02-15T04:59:20.840 回答