我写了一个treetop语法文件,大部分都有效。对于像[b]
这样的标签,我想将它们传递给一个函数,该函数具有为该论坛配置的BBCode的哈希值。如果允许粗体,它将返回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编写所有规则,因为这是一个动态系统,论坛管理员打开/关闭某些标签。
答案 0 :(得分:2)
我会说你的解析器不应该与你的业务逻辑有任何关系;如果论坛管理员可以打开或关闭应该在您遍历AST时处理的标记,而不是在解析器中。
您的解析器应该只负责在完全了解其语法的基础上构建最佳语法树。考虑到这一点,我建议为每个有效的BBCode标记创建一个规则,并在解析阶段后处理排除的标记。
我也想知道当你的解析器识别出[z]invalid[/z]
之类的无效BBCode时你会怎么做?