2011-01-24 10 views
10

広く使用されている構文解析アルゴリズムの中で最も弱いファミリーがCコードを解析できることを知っている人はいますか?つまり、Cの文法LL(1)、LR(0)、LALR(1)などがありますか?私は興味があります。なぜなら、サイドプロジェクトとして、これらのファミリのパーサジェネレータを書くことに興味があり、最終的に別のサイドプロジェクトのためにCコードを解析できるようにするためです。Cコードを解析できる最も単純な構文解析アルゴリズムは何ですか?

+0

ほとんどのパーサーは、「あまりにも多く」認識するように構築されており、パーサー以外の追加のチェックによってそのオーバーヘッドが拒否されます。その場合、正規表現 "[*] *"は、多くの追加の意味チェックがあるにもかかわらず、Cを解析する最も弱いパーサーです。一度これが明らかになったら、任意のパーサジェネレータをCで処理し、余分なハッキングをモジュロできることは明らかです。 (開始場所としてあまりにも小さすぎるものを受け入れるパーサーを書くのは完全に夢中です)。 –

+0

私はこの質問をもう一度やり直しました。明らかな実用的な答えは、「手書きのトップダウン再帰的」です。私は、最初のCパーサーがどのように構築されたのか(YACCの前に、私のボトムドルを賭けるだろう:)これの上にある面白い質問は、それが基本を超えてどのくらいハッキリしますか? –

答えて

2

Bison uses an LALR(1)パーサと思われます。 LALRパーザはLLパーザよりも堅牢ですが、より複雑です。これから、LALR(1)はおそらくCコードを解析できる最も弱い解析アルゴリズムだと思われます。

実際に自分のレコグナイザを動かすことができない限り、これを行うにはANTLRが最善の策でしょう。 ANTLRはLL *アルゴリズム(事実上、LALR)を使用します。

関連する問題