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 は、フォーラム管理者が特定のタグをオン/オフする動的システムであるため、BBCode の種類ごとにすべてのルールを書き出す必要はありません。

4

1 に答える 1

2

パーサーは、ビジネス ロジックとは何の関係もないはずです。フォーラム管理者がタグをオンまたはオフにできる場合、パーサーではなく、AST をトラバースするときに処理する必要があります。

パーサーは、与えられた文法の完全な知識を使用して、可能な限り最良の構文ツリーを構築することだけを担当する必要があります。それを念頭に置いて、有効な BBCode タグごとにルールを作成し、解析フェーズの後に除外されたタグを処理することをお勧めします。

また、パーサーが無効な BBCode を認識した場合、どうすればよいのでしょう[z]invalid[/z]か?

于 2013-01-22T15:53:33.797 に答える