如何在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节点中的最后一个地址,因为我将需要它到另一个操作。
答
你可以使用你的符号表来知道你的(对象访问)中的每个名字的类型......你需要的所有名称将它们保存为类型为的地址(名称(有类的名称)...即不是int或双倍...)只有您的示例中的变量(数字)有(int或double或 除类型名称以外的任何类型) 因此,您可以知道是否通过它的符号表类型到达号码
多数民众赞成在一个非常长句...你能用一些标点符号来使它可读吗? – user463035818
现在清楚了@ tobi303? – sam
你好。如果您使用手机发布信息,而这又会导致您以小写字母和txtspk书写,请使用更易于输入的内容。我们非常感谢这里的一些问题 - 谢谢! – halfer