رمز العنوان الثلاثي
في علوم الحاسوب ، يُعدّ رمز العناوين الثلاثة [ 1 ] (يُختصر غالبًا إلى TAC أو 3AC) رمزًا وسيطًا تستخدمه مُجمّعات التحسين للمساعدة في تنفيذ التحويلات التي تُحسّن الكود . تحتوي كل تعليمة من تعليمات TAC على ثلاثة مُعاملات على الأكثر، وهي عادةً مزيج من عملية إسناد ومعامل ثنائي. على سبيل المثال، . يُشتق الاسم من استخدام ثلاثة مُعاملات في هذه التعليمات، على الرغم من وجود تعليمات أخرى تحتوي على عدد أقل من المُعاملات.t1 := t2 + t3
بما أن رمز العناوين الثلاثة يُستخدم كلغة وسيطة داخل المترجمات، فمن المرجح ألا تكون المعاملات عناوين ذاكرة فعلية أو سجلات معالج ، بل عناوين رمزية تُترجم إلى عناوين فعلية أثناء تخصيص السجلات . كما أنه من الشائع ترقيم أسماء المعاملات بالتسلسل، لأن رمز العناوين الثلاثة يُولّد عادةً بواسطة المترجم.
يُعد الشكل الطبيعي A (ANF) تحسينًا لرمز العناوين الثلاثة .
أمثلة
في لغة الترميز ثلاثية العناوين، يُقسّم هذا إلى عدة تعليمات منفصلة. تُترجم هذه التعليمات بسهولة أكبر إلى لغة التجميع . كما يُسهل اكتشاف التعبيرات الفرعية المشتركة لتقصير الكود. في المثال التالي، تتكون عملية حسابية واحدة من عدة عمليات حسابية أصغر:
# احسب حلاً واحداً للمعادلة التربيعية. x = (-b + sqrt(b^2 - 4*a*c)) / (2*a) | t1 := b * b t2 := 4 * a t3 := t2 * c t4 := t1 - t3 t5 := sqrt(t4) t6 := 0 - b t7 := t5 + t6 t8 := 2 * a t9 := t7 / t8 x := t9 |
قد يحتوي الكود ذو العناوين الثلاثة على قفزات مشروطة وغير مشروطة، وطرق للوصول إلى الذاكرة. وقد يحتوي أيضًا على طرق لاستدعاء الدوال، أو قد يختزلها إلى قفزات. وبهذه الطريقة، قد يكون الكود ذو العناوين الثلاثة مفيدًا في تحليل تدفق التحكم . في المثال التالي الشبيه بلغة C، تخزن حلقة مربعات الأعداد بين 0 و9:
...for ( i = 0 ; i < 10 ; ++ i ) { b [ i ] = i * i ; }... | t1 := 0 ; تهيئة i L1: إذا كان t1 >= 10 انتقل إلى L2؛ قفزة مشروطة t2 := t1 * t1 ; مربع i t3 := t1 * 4 ; عنوان محاذاة الكلمات t4 := b + t3 ; عنوان لتخزين i*i *t4 := t2 ; تخزين القيمة من خلال المؤشر t1 := t1 + 1 ; زيادة i انتقل إلى L1؛ كرر الحلقة المستوى الثاني: |
انظر أيضاً
مراجع
- بناء المترجم
