2017-01-25 8 views
2

私は学部の研究でコンパイラデザインコースを受講しています。学習プロセスの一環として、私は言語のためのコンパイラを開発しなければならないでしょう。Bash用コンパイラ

Bash用にコンパイラを記述することはできますか? C/C++のような通常のプログラミング言語のためのコンパイラを設計するよりも、少なくとも初心者のためには全く考えられないほど難しいでしょうか?

+2

実質的にどの言語でもコンパイルできます。一般的な手法はすべての言語で同じです。コンパイラはコードを解析し、プログラムが何をするのかを把握し、それを実行する実行可能コードを生成します。 bash 'for'ループと' 'for''ループのコンパイルにはあま​​り違いはありません。 – Barmar

+1

"どのように"どのような部分は、あなたがクラスに傾くものと仮定されていません?あなたはその言語を選んでもいいですか?言語があなたのために処方される可能性があります。 – puhlen

+0

誰かが私のコメントに何が起こったのか知っていますか? – melpomene

答えて

6

コンパイラはBash用に記述できますか?

はい。 (存在証明-shc

もしそうなら、どうですか?

これは難しい部分です。

POSIXシェル言語は、バックティック、変数置換、引用などの影響を受けるため、一般的なプログラミング言語と大きく異なります。

これを無視し、難しい機能を省略したり、POSIXの動作に準拠しない方法で "bash like"言語を実装することができます。

次に...実行可能なものを生成する方法の問題があります。繰り返しますが、これは可能です(上記参照)。しかし、あなたの目的が通常のシェルより速い場合は、コンパイルされたコードで一般的なLinuxコマンドの動作をエミュレートする必要があります。それは大きな仕事です。


私はこれは悪いプロジェクトです言っていないんだけど、あなたには、多くの作業を行う必要があります:POSIXシェルスペックを読んで(完全に)理解し、

  • 発見あなたのものに対処する方法を考え出す
  • がコマンドを直接実装する必要があるのlinux把握、および
  • POSIXの特質を扱うパーサを実装する方法を研究し
  • しないでください。例えばパイプラインのすべての複雑さ。
+0

ccshは、コンパイルしているシェルスクリプトをバイナリにすることを誇る、フリーではないプロジェクトです。 – louigi600

+0

ありがとうございますが、存在証明のために必要なのは1つの例だけです。 –

関連する問題