質問

これは、しばらくの間、私を悩まれて何かされています。どのようにしてANTLRを使用して、以下のHTMLに次のテキストを解析するのでしょうか?私は、このすべてのまわりで私の頭を包むように見えることはできません。

任意のアイデア?

値下げます:

> first line
> second line
> > nested quote

出力HTMLます:

<blockquote>
  <p>first line
  second line</p>
  <blockquote>
    <p>nested quote</p>
  </blockquote>
</blockquote>
役に立ちましたか?

解決

私は先週だけで、この問題に取り組むたのでことを言及

おかしいです。 JMD、値下げや構文解析の簡単な概要を参照してくださいコンパイラはを。私は真のMarkdownパーサに取り組んでいると私はANTLRでそれを試してみました。

あなたがこの問題に対処することができますいくつかの方法があります。

まず、あなただけの解析ができます:

BLOCK_QUOTE : '>' (' ' | '\t')? ;

、おそらく書き換え規則として、解析ステップでそれをうまく。

事は、彼らはので、ここで行の先頭に表示されたときに、これらは唯一の重要な別のアプローチです。

@members {
  int quoteDepth = 0;
}

BLOCK_QUOTE : '\n' (q+='>' (' ' | '\t')?)+
  { if ($q.size() > quoteDepth) /* emit one or more START_QUOTE tokens */
    else if ($q.size() < quoteDepth /* emit one or more END_QUOTE tokens */
    quoteDepth = $q.size(); }

は、上記パーサルールではなく、あまりにも語彙規則する必要があるかもしれません。私は忘れています。

しかし、それは一種のあなたが他の部分で欲しいものは本当にないラインのシーケンスとしてマークダウン源を処理するためにあなたを強制するためにも、これは不満足である。

あなたが複数のトークンを放出可能にするために私をエスケープ別のクラスを上書きする必要がありますので、

また、通常、それぞれの字句規則は、唯一のトークンになります。この例は、(優れたほぼ必須)である決定的ANTLR参考:建物ドメイン固有言語は

最終的に私は、このための選択のツールとしてANTLRを放棄しました。私自身の手でコード化されたソリューションは、うまくいけば、来週または2に登場する必要があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top