1

我写了一个最有效的树顶语法文件。对于像我这样的标签,[b]我想将它们传递到一个函数中,该函数具有为该论坛配置的 BBCodes 的哈希值。如果允许粗体,它将返回 HTML,否则它将忽略 BB 代码。

rule tag
  tag:('[' [a-zA-Z]+ ']')
  inner_tag:(
    !('[/' [a-zA-Z]+ ']')
    (tag <ForumBB::TagNode> / .)
  )+
  '[/' [a-zA-Z]+ ']'
end

这不适用于嵌套标签。例如,[b][i]Bold and italics[/i][/b]将无法正确处理,因为它们与 . 的第一个结束标记匹配[/i]

我怎样才能做到这一点,当它找到一个标签时,它会在负头中寻找结束标签?

我宁愿不必为每种 BBCode 写出所有规则,因为这是一个动态系统,论坛管理员可以在其中打开/关闭某些标签。

4

1 回答 1

2

我会说你的解析器不应该与你的业务逻辑有任何关系。如果论坛管理员可以打开或关闭应该在您遍历 AST 时而不是在解析器中处理的标签。

您的解析器应该只负责构建最好的语法树,并充分了解它给出的语法。考虑到这一点,我建议为每个有效的 BBCode 标签创建一个规则,并在解析阶段之后处理排除的标签。

我也想知道当你的解析器识别出无效的 BBCode 时你会怎么做[z]invalid[/z]

于 2013-01-22T15:53:33.797 回答