2010-11-23 6 views
0

パーサを手動で書く必要があります。 LL(*)とLRのどちらかを選ぶことはできません(おそらくEarleyを試してみてください)。 LLの文法はむしろ難しいので、ボトムアップ解析を使うべきですか?マニュアルパーサーを書く

+2

大部分は、解析しようとしている言語の種類によって異なります。あなたのアプリケーションに関する情報がなければ、どんな種類の合理的な提案もすることは不可能です。 「関連する」質問を見ることもできます(下にスクロールし、右に見てください)。ここでは、構文解析について多くの質問があり、良い議論がたくさんあります。 –

+0

なぜパーサーを手動で書く必要がありますか?これには一般的に価値がありません。 –

+0

yaccやその他のパーサを使用することはできません。パーサは動作します – mystdeim

答えて

0

これは、使用しようとする文法によって異なります。 LLは文法の不確定さにいくつかの問題を抱えています(あなたはすべてを左回帰する必要があります)。

決定できない場合は、LR(1)またはLALRと一緒にご連絡ください。多分GLRさえ。

0

Try XText。それはあなたのためです。あなたの言語、パーサー、エディタを素早く簡単に作成する

+0

それは非常に興味深いです、ありがとう – mystdeim

+0

私はそれを試して、私はあまりにも感銘を受けました:D –

0

手で書く最も簡単なタイプのパーサは、LLパーサのファミリにある再帰的降下パーサです。他のほとんどのタイプのパーサーは、手書き(大状態遷移テーブルを使用するLALRパーサー)や複雑な言語(自然言語の解析用のEarleyパーサーなど)の解析用には難しいものです。

wikipediaには、再帰的な下降解析に関するいくつかの優れた情報があります。

2

私は、再帰的降下パーサーまたはテール再帰的降下パーサー(すなわち、LL)またはトップダウン演算子優先パーザのいずれかを使用します。

LR、LALR(k)、LALR(1)、GLRなど、パーザのLRファミリは、あなたの頭に残すにはあまりにも "奇妙な"ものであれば何でも構いません。そのうちの1つを書こうとすると、とにかく普通のままにするためには、というパーサー・ジェネレータを実装することになります。

+0

ああナンセンス。私は1979年以来LALRを使ってきましたが、私自身のパーサージェネレータを実装する必要はありませんでした。 – EJP