如何为Markup编写解析器?

时间:2011-06-29 07:19:44

标签: html parsing markup

我想使用像Python或Perl这样的高级语言为一个类似于BBCode,Markdown,Wikisyntax等的Markup语言编写解析器。它应该包括切片,代码突出显示,自动链接创建,嵌入图像,但允许HTML进行更复杂的格式化。

有没有人做过类似的事情或者与这些系统密切合作,并且可以概括地说明如何有效地完成这项工作? 虽然效率并不是这么小的系统所关心的,但它通常是有利的。 特别是我想知道是否有比使用正则表达式更有效的方法。

1 个答案:

答案 0 :(得分:0)

供您进行一般性讨论......

您应该从以下蓝图开始:

  • 您需要对整个数据进行迭代迭代
  • 您需要根据其上下文标识每个字符,因为它可能是标记打开('<','['etc)或只是char。这可以通过一个由escape-char触发的转义标志来完成(就像某些语言中的反斜杠一样)。如果你使用这种方法,你还需要检查逃脱的擒纵机构。
  • 您可能还需要一些标志,告诉您在评论或特殊数据部分内,可能有不同的擒纵规则。
  • 您需要为嵌套标记构建树状结构或至少一些堆栈。这就是为什么正则表达式是一个坏主意:它们不仅需要花费很多开销,如果你想在下面的snipped中获得第二个x(x =任何标记)的正确结束标记,它们也没用。{ {1}}