C に基づいてカスタム (小さな) プログラミング言語 (構文) を作成することを考えています。[testClass runThis:true]; のような演算子を使用して Apple がどのように Objective-C を実装したかわかりません。その構文で。
カスタム C 言語のカスタム構文を実装する方法
C に基づいてカスタム (小さな) プログラミング言語 (構文) を作成することを考えています。[testClass runThis:true]; のような演算子を使用して Apple がどのように Objective-C を実装したかわかりません。その構文で。
カスタム C 言語のカスタム構文を実装する方法
Clang(LLVMコンパイラのC、C ++、およびObj-Cフロントエンド)と、LLVMで構築されたObjective-Cに基づく新しい言語であるEeroプログラミング言語を確認することをお勧めします。どちらのプロジェクトもオープンソースです。
まず、パーサーとレクサーを実装する必要があります。そのための1つの方法は、K&Rの「Cプログラミング言語」からC構文と文法を取得し、それをFlexとBisonへの入力として使用してスタンドアロンパーサーを作成することです。これにより、構文的に有効なCプログラムが解析されます。その後、必要に応じて微調整してカスタマイズできます。
ただし、これは簡単なプロジェクトではなく、コンパイラについて多くのことを学ぶ準備をする必要があります。幸運を!
コンパイラを作成する必要があります。セマンティクスが適合する場合は、C コードに直接コンパイルできる可能性があります。それ以外の場合は、C に直接変換するのが簡単ではない言語のビットに対して、ある種のランタイムも作成する必要があります。ただし、小さな C ベースの言語について話していることを考えると、それはおそらく問題ではありません。 .
これをどのように行うのですか?おー。おとこ。
コンパイラの作成に関する書籍、記事、チュートリアルなどは多数あります。コンパイラの個々の部分が特に難しいわけではありませんが (少なくとも単純で最適化を行わないコンパイラにとっては)、さまざまな方法で対処しなければならないことがたくさんあります。
少なくとも、レクサー(通常はflexのような自動化ツールを使用するか、 ANTLRのようなコンパイラースイートの一部として)、パーサー(通常はBisonや前述の ANTLR のような自動化ツールを使用)、およびコードジェネレーター(通常は手で)。実際には、パーサーとコード ジェネレーターの間に抽象的な構文ツリーを貼り付けて、さまざまな最適化を実装し、コード生成をより簡単にするための余地をあなた (または他の誰か) に与えることをお勧めします。
研究論文は言うまでもなく、このトピックに関する本はたくさんあります。楽しむ。あなたがやろうとしていることはやりがいがありますが、やり遂げるとやりがいがあります。
C++ にステップアップすると、DSEL (ドメイン固有組み込み言語) を作成できる可能性があります。どのような問題を解決しようとしているのかはわかりませんが、適切に設計された DSEL は、独自の言語を設計してパーサーやコンパイラなどを作成するよりもはるかに便利かもしれません。この本のコピーを入手して、洞察を得ることができます: C++ テンプレート メタプログラミング