Iは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 node recursion私はwhlのアドレスをvecのアドレスでロードして($ t1 ..など)入れてから、sclのアドレスをwhlのアドレスでロードして($ t1 ..)(しかし、数値はここではオブジェクトではありません。($ t1)には保存しないでください)
私の問題:オブジェクトアドレスに姓を知ってロードアドレスを停止する方法は? object_accessノードの最後のアドレスを$ t1保存する必要があります。これは別の操作に必要となるためです。
は非常にthatsの知っていたことができています長い文章...読みやすくするために句読点を使用してください。 – user463035818
は今や明らかです@ tobi303 ??? – sam
こんにちは。携帯電話から転記している場合は、小文字とtxtspkで書き込むことになるので、入力しやすいものを使用してください。私たちはここでの質問に少し感謝します - ありがとう! – halfer