如何在C++中编译编译器?

问题描述:

我使编译的C++和我到达代码生成电平(由MIPS),我想生成组合物如何在C++中编译编译器?

在YACC的组合物中的规则是:

variable: 
object_access 
|.....some rule not important here 
; 
object_access: 
variable '.' name 
|.....some rule not important here 
; 

当输入为:

class screw 
{ 
int number; 
screw(); 
} 
class wheel 
{ 
int type; 
screw scw;// here composition 
wheel(); 
} 
class car 
{ 
string model; 
wheel whl;// here composition 
} 
void main() 
{ 
car vec=new car(); 
cout<<vec.whl.scw.number; 
} 

当我参观了object_access节点(生成的代码),我可以得到(可变& &名)

我的问题是:

当我有像(vec.whl.scw.number)我不知道(vec.whl.scw.number)的长度,因为它工作递归左。我需要的长度,因为(我知道如果我加载(vec,whl,scw),我会得到的地址,但如果我加载(数字),我会得到一个整数值。 object_access节点递归我只需要通过vec的地址加载whl的地址并将其放入($ t1 ..例如),然后我通过whl的地址加载scw的地址并将其放入($ t1 ..例如),但(数量不是对象,我不能将它保存在($ t1))..

我的问题:我如何知道object_access节点中的姓以停止加载地址?需要$ t1保存object_access节点中的最后一个地址,因为我将需要它到另一个操作。

+1

多数民众赞成在一个非常长句...你能用一些标点符号来使它可读吗? – user463035818

+0

现在清楚了@ tobi303? – sam

+0

你好。如果您使用手机发布信息,而这又会导致您以小写字母和txtspk书写,请使用更易于输入的内容。我们非常感谢这里的一些问题 - 谢谢! – halfer

你可以使用你的符号表来知道你的(对象访问)中的每个名字的类型......你需要的所有名称将它们保存为类型为的地址(名称(有类的名称)...即不是int或双倍...)只有您的示例中的变量(数字)有(int或double或 除类型名称以外的任何类型) 因此,您可以知道是否通过它的符号表类型到达号码