2016-11-27 116 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) 

左思右想我有一對夫婦的想法,但迄今沒有奏效(例如,使用具有動態創建名稱的變量)。我想,通過一些適當的數據處理,我已經制定了將輸入組織到類中的計劃,並且使用運算符重載可以幫助完成這項工作,但我仍然無法看到大局。

+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僅用於調試):

#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 

使用auto你不必擔心,如果VARintfloat

+0

謝謝你的回答讓我明白,我已經插進我的#define VAR(ID)的代碼應自動識別之前,因爲否則它不會去編譯 –