擬似言語用のコンパイラのようなものを作成するという課題があります。C++コンパイラとプリプロセッサ
例:
PROGRAM_BEGIN
... //code
VAR(name) = NUMBER(2.3)
PROGRAM_END
我々はプリプロセッサでこれを処理し、C++のコードにそれを有効にする必要があります。
例:
#define PROGRAM_BEGIN int main(){
#define PROGRAM_END return 1;}
私はとのトラブルを持っていることは、我々は次のようなコードをサポートしなければならないことである。
VAR(name) = NUMBER(1)+NUMBER(2.5)
はあまり考えた後、私はアイデアのカップルを持っていたが、何も(これまで働いていませんたとえば、動的に作成された名前の変数を使用します)。私はいくつかの適切なデータ処理で、クラスへの入力を整理する計画を立てていたと思います。演算子のオーバーロードを使用するとこの作業を行うのに役立ちますが、大きな画像はまだ見えません。 VAR
がint
かfloat
であれば、あなたが心配する必要はありませんauto
を使用することにより
#include <iostream>
using namespace std;
#define PROGRAM_BEGIN int main(){
#define PROGRAM_END return 1;}
#define VAR(x) auto x
#define NUMBER(x) x
PROGRAM_BEGIN
VAR(name) = NUMBER(1) + NUMBER(2.5);
cout << name << endl;
PROGRAM_END
:
正確に何を求めているのですか?プリプロセッサで 'VAR(name)'を表現する方法を探しているなら、プリプロセッサマクロを見てください。この場合、#define VAR(name)int name'はトリックを行うべきです。実際にはintはここでうまくいきません。私は、浮動小数点を使用して暗黙の変換を行うか、または共用体を使用すると思います。しかし、実際の要件なしではわかりません。 –
ええ、私はそれをやったことがありますが、もしあなたがNUMBER(22)+ NUMBER(11)はint x = 22になります。 + int x = 11;これは実行されません... –
'1'または' 2.5'はすでに数値なので、 'NUMBER'マクロは何もする必要はありません –