2009-08-22 16 views
5

私はいくつかのリソースを開始する必要があります(私はCS学生です)パーサーとコンパイラを書くのに最高のプログラミング言語は何ですか?

+1

多くの他の多くの人々の間でhttp://stackoverflow.com/questions/1669/learning-to-write-a-コンパイラの相違 –

+0

これはオープンエンドのリソース要求である場合、Neilは正しいです。それが比較とコントラストを求めているなら、それは "主観的で議論の的になる"ものに接する。 – dmckee

+0

[最善の言葉を書くコンパイラ・イン](http://stackoverflow.com/質問/ 809710/what-is-the-the-best-language-to-a-compiler-in) – nawfal

答えて

9

答えは非常に主観的になります。しかし、パーサーを作成する場合は、ANTLRを使用することをお勧めします。現在、ANTLRはC、C#、ActionScript、JavaScript、およびJavaターゲットをサポートしています。私の経験から、Javaバージョンは実際には安定しており、多くの強力なオープンソースプロジェクト、すなわちDroolsHibernateで使用されています。

2

Lisp/Schemeは私たちがuniでbackを使用して任命したものでした。

彼らは自分自身を非常にうまくやっています。

ダン

2

私はかつてのJavaにおける現代コンパイラの実装 "というタイトルのテキストブックを持っていますが、私は彼らの言語は自身をコンパイルできることを証明するよりも、専門家がまだC.その他を使用してだと思います。

6

プログラミング言語で記述する必要がありますか?またはFlexBisonを使用できますか?

+1

私はFlexとBisonも同様に提案しようとしていました。 :-) –

+4

パーサージェネレーターはプログラミング言語の必要性を排除しません。特定の言語でパーサを生成します。従来のFlex/Bison(LEX/YACC)言語はCです。 – Brannon

+0

@Brannon +1あなたはまだプログラミング言語が必要です。しかし、Flex/BisonやLex/Yaccがかなり古くなっていると付け加えたいと思います。 Coco/Rのようなものを使ってLex/Yaccに行くと、機能は必死になりますが、それ以上の先読みはありません。 – Imagist

0

汎用言語のパーサーを作成しますか?この場合は、ターゲット言語での記述(およびブートストラップ)を行うことをお勧めします。あなたは自分のドッグフードを食べるべきです。

+1

私は「多くの場合推奨」と言っていますが、「はっきりと推奨」していません。 「汎用言語」は、すべてのタスクに適した言語がないため、一種の誤解です。私はCでWebアプリケーションを書くつもりはなく、Pythonでオペレーティングシステムを書いていません。あなたがこれらのことのどちらも行うことができないということではありません。それはそうするのが適切ではないということだけです。このロジックを受け入れると、構文解析には適していない汎用目的の言語を作成している可能性があるため、解析するためには使用しないでください。 – Imagist

+1

ここではすてきな例があります:STEPSプロジェクトの* JavaScriptインタプリタ全体は、170行のOMetaソースコードであり、1人で午後1人で書いています。 Narcissus JavaScriptインタプリタでは、パーサー単独で*はJavaScriptの1000行以上で、AST訪問者にはさらに1000行です。したがって、JavaScriptを使用してJavaScriptを実装すると、OMetaを使用する場合よりも10倍も冗長になります。 –

+0

しかし、パーサー/コンパイラを実際に使用する場合は、バグの溜めを洗い流してください。そして、あなたは実際にそれをこの言語自体で実装することによってそれを使用します。 – Mnementh

1

コンパイラーを基本から実装する場合、ほとんどのプログラミング言語はタスクに依存します。 (私はFortran IVとCOBOLで書かれたコンパイラ/パーサについて知っていますが、それを試すことはお勧めしません)

しかし、あなたが実装しようとしている言語が些細ではない文法であっても、フロントエンドを実装するために、レクサージェネレータおよび/またはパーサジェネレータを使用する方がよいでしょう。はるかに高速で信頼性の高いパーサーが得られます。

したがって、適切なプログラミング言語であり、適切なパーサジェネレータが利用可能です。多数のパーサージェネレーターを比較するページがWikipediaにあります。私はたくさんの人がいたことに気付かなかった!

1

パーサー(およびトークナイザー)の背後にあるテクニックを学ぶことを目的としている場合は、ゼロから自分自身を書く方が良いかもしれません。ほとんどのプログラミング言語でこれを行うことができますので、使い慣れたものを選ぶことができます。

少し前、私は、C#で、小さな架空のBASICライクなプログラミング言語用のパーサーを書くのがいかに簡単かを示す一連のブログ記事を書いた。私はここで迷惑メールをしたくないので、直接リンクはしませんが、ブログにアクセスして(私のプロフィールを参照)、下に行くと、 "私の投稿にパーサーを書く"というリンクがあります"-セクション。

3

パーサージェネレーターを調べたいと思うでしょう。あなたがCSの学生なら、おそらくドラゴンブックを見てみたいと思うでしょう:http://en.wikipedia.org/wiki/Compilers:_Principles,_Techniques,_and_Tools

メモリ管理などのことを心配する必要がなく、文法に集中できるので、おそらくC#またはJavaを使用してパーサーを構築するのが最も簡単です。

良いC#パーサジェネレータは、GPPG:http://plas.fit.qut.edu.au/gppg/です。

+0

なぜこれがdownvotedされたか説明することができますか?ドラゴンブックは優れたリソースであり、C#/ javaは問題の言葉に従っています。私はその質問自体は馬鹿だと思うが。 – gimpf

4

パーサーとコンパイラは、別々の2つの問題です。たとえば、私はCでコンパイラを書くかもしれませんが、私はパーサーをCで書くことはありません(私はパーサジェネレータを使用します)。速度が最優先ではない非常に単純なパーサの場合、良いテキスト操作機能を持つPerlまたはPythonでパーサを手作業でコードするかもしれません。しかし、非常に基本的なパーサーを超えて、私はパーサー生成ツールのいくつかの並べ替えを使用します。最も一般的に使用されるものはANTLR,Coco/RLex/Yacc、GNU実装のFlex/Bisonです。私の個人的な好みはCoco/Rですが、ANTLRは最近普及しているようです。

汎用プログラミング言語を作成している場合は、それ自体を書くことを検討してください。これには、移植性(人々は言語の最初のバージョンを移植するだけです)や機能のデモンストレーション(難解な問題なので、あなたの言語の証拠であるならあなたの言語で行うことができます)など、多くの利点があります。言語が解釈される場合、これはパフォーマンス上の理由から適切ではないかもしれません。

関連する問題