2016-11-27 90 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)的代码应自动识别之前,因为否则它不会去编译 –