web-dev-qa-db-ja.com

最近YACCを学ぶことは意味がありますか?

YACCを使用している巨大なプロジェクトがあり、そのバグを修正する必要があります。

私はそれを書いた誰かにそれを修正するように頼むかもしれませんが、コンパイラがどのように機能するかに興味があります。最近YACCを学ぶことは理にかなっていますか?古くて時代遅れだと言われました。コンパイラ/ llvmやそれらのような他のものがどのように機能するかを理解したいと思います... YACCはどうですか?

3
Makane Elhay

YACCは、パイプラインの1つのステップ(特定の文法のパーサーの作成)を支援します。そのステップを実行する他の多くの方法があります。大量の parser generators が利用可能ですが、手動で独自のパーサーを作成することもできます。要件に応じて、YACCが廃止されたと見なすには多くの技術的な理由があります。少なくとも、出力言語の選択肢が限られているということではありません。

しかし、それは教育ツールとして時代遅れに近いものではありません。使用するパーサーに関係なく、パーサーと文法の基礎を学ぶ必要があります。YACCを使用すると、他のものと同じように簡単にそれらを学ぶことができます。知識は非常に簡単に翻訳されます。私は学校でYACCを学びましたが、ほとんど努力することなくANTLRを選びました。

また、バグがパーサーにさえない可能性が非常に高いことも考慮してください。通常、ほとんどのパーサーバグは、プロジェクトの非常に早い段階で解決されます。これは、これらのバグが壮観な障害を引き起こす傾向があるためです。より微妙なエラーは、パーサーの下流のレイヤーにある傾向があり、YACCとは関係ありません。

6
Karl Bielefeldt

YACCは時代遅れではないと思います。ある意味、それは bison 、GNU実装によって廃止されましたが、元のバージョンとの下位互換性があります。

大きなコンパイラーは手動で作成されたパーサーを持っているように見えますが、これは主に、パーサーエラーの場合、汎用のパーサージェネレーターが提供するものよりも優れた診断が必要だからです。しかし、ドメイン固有の言語が小さい多くのツールはbisonを使用します(llvmスイートのビルドはbisonに依存しているため、clangがパーサーを手動で作成しているものの、明らかにいくつかのツールがあります)。

3
Jan Hudec