1. ホーム
  2. parsing

[解決済み] Markdownのパースはどのように行うのですか?[クローズド]

2022-07-16 03:08:27

質問

編集部:最近、CommonMarkというプロジェクトについて知りました。 このプロジェクトは、元のMarkdown仕様の曖昧さを正しく識別し、対処します。 Markdownの仕様にある曖昧さを正しく識別し、対処しています。 http://commonmark.org/ これは素晴らしいC#ライブラリ のサポートがあります。

構文がわかります はこちら .

ダウンロードで続くソースは、以下のように書かれています。 パール で書かれており、私はこれを尊重するつもりはありません。正規表現が多用されており、そのために MD5 ハッシュを利用して特定の文字をエスケープしています。何かが間違っているのです!

のパーサをハードコードするところです。 マークダウン . これについての経験は何ですか?

あなたがMarkdownの実際のパージングについて言う意味のあることを何も持っていない場合、私に時間を割いてください。(これは厳しく聞こえるかもしれませんが、そうです、私は洞察力を探しているのであって、ソリューション、つまりサードパーティライブラリを探しているのではありません。).

答えのために少し手助けをすると、正規表現は以下のことを意味します。 パターンを識別する ! 文法全体を解析するためのものではありません。人々がそうすることを考慮することはfoobarです。

  • Markdownについて考えるなら、それは基本的に段落の概念に基づくものです。
  • そのため、合理的なアプローチは入力を段落に分割することかもしれません。
  • 段落には多くの種類があり、例えば、見出し、テキスト、リスト、ブロッククオート、コードなどがあります。
  • したがって、課題はこれらの段落を識別し、どのような文脈で発生するのかを特定することです。

共有する価値があるとわかったら、解決策をまた提示します。

どのように解決するのですか?

私が知っている唯一のマークダウンの実装で、実際のパーサーを使用しているのは Jon MacFarleane 's ペグマークダウン . そのパーサー パース式文法 というパーサ生成器です。 ペグ .


EDITです。 マウリシオ フェルナンデス は、最近 シンプルなマークアップ Markdown パーサ の一部として書いた OcsiBlog Weblog Engine の一部として書かれたものです.パーサは OCaml で書かれているので、それは は極めて はシンプルで短く(268 SLOCで パーサー には 43 SLOC。 HTML エミッター ) に比べて、まだ 爛々として 速い (よりも20%速い)。 割引 (手作業で最適化された C 言語で書かれています) と sixhundred よりも 6 倍速く ブルークロス ( ルビー )) で、まだパフォーマンスの最適化もされていないにもかかわらず、です。これは、Mauricio自身が自分のウェブログのために内部的に使用することだけを目的としているため、いくつかの逸脱があります。 公式のMarkdown仕様 からの逸脱がありますが、Mauricioが作成した ブランチを作成し、その変更のほとんどを戻しました。 .