2016-05-16 16 views
-1

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保存する必要があります。これは別の操作に必要となるためです。

+1

は非常にthatsの知っていたことができています長い文章...読みやすくするために句読点を使用してください。 – user463035818

+0

は今や明らかです@ tobi303 ??? – sam

+0

こんにちは。携帯電話から転記している場合は、小文字とtxtspkで書き込むことになるので、入力しやすいものを使用してください。私たちはここでの質問に少し感謝します - ありがとう! – halfer

答えて

0

あなたのシンボルテーブルを使って、あなたの(オブジェクトアクセス)の各名前の型を知ることができます...あなたがタイプするアドレスとしてそれらを保存する必要があるすべての名前(名前(クラス名)...)またはあなたのサンプル中の二重...)唯一の変数(数)(intやdoubleまたは タイプ名を除く任意の型) ので、あなたがシンボルテーブルからの型に基づいて数値に到着する場合

関連する問題