2016-11-27 19 views
-3

擬似言語用のコンパイラのようなものを作成するという課題があります。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) 

はあまり考えた後、私はアイデアのカップルを持っていたが、何も(これまで働いていませんたとえば、動的に作成された名前の変数を使用します)。私はいくつかの適切なデータ処理で、クラスへの入力を整理する計画を立てていたと思います。演算子のオーバーロードを使用するとこの作業を行うのに役立ちますが、大きな画像はまだ見えません。 VARintfloatであれば、あなたが心配する必要はありません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 

+0

正確に何を求めているのですか?プリプロセッサで 'VAR(name)'を表現する方法を探しているなら、プリプロセッサマクロを見てください。この場合、#define VAR(name)int name'はトリックを行うべきです。実際にはintはここでうまくいきません。私は、浮動小数点を使用して暗黙の変換を行うか、または共用体を使用すると思います。しかし、実際の要件なしではわかりません。 –

+0

ええ、私はそれをやったことがありますが、もしあなたがNUMBER(22)+ NUMBER(11)はint x = 22になります。 + int x = 11;これは実行されません... –

+1

'1'または' 2.5'はすでに数値なので、 'NUMBER'マクロは何もする必要はありません –

答えて

0

はこれを(coutが唯一のデバッグ用です)試してみてください。

+0

私の#define VAR(ID)に挿入されたコードは、自動IDの前に行く必要があります –

関連する問題