backpatching
DESCRIPTION
Backpatching. דוגמא: switch. דוגמא switch :. הדקדוק. שלבי פיתרון. שלב I – תרשים פריסת הקוד. שלב II – סכימת תירגום. תכונות סמנטיות שנצטרך S – nextlist E – place C – value, quad, nextlist CL – nextlist , quad_list (stack) value_list (stack). שלב II – סכימת תירגום. - PowerPoint PPT PresentationTRANSCRIPT
Backpatching
switchדוגמא:
:switchדוגמא
הדקדוק
פיתרון שלבי
הקוד – Iשלב פריסת תרשים
תירגום – IIשלב סכימת
שנצטרך • סמנטיות תכונותS – nextlistE – placeC – value, quad, nextlistCL – nextlist,
quad_list (stack) value_list (stack)
תירגום – IIשלב סכימת
שימושים • מרקריםN →ε{
N.nextlist = makelist(nextquad);emit('goto ___');
}
M →ε {
M.quad = nextquad(); }
תירגום – IIשלב סכימת
•: סמנטיים הכלליםC →case num : M S ; break ; {
C.quad = M.quad;C.value = num.value;C.nextlist = S.nextlist;
}
סמנטיים – IIשלב הכללים
C L → C{
CL.quad_list = newstack();CL.quad_list.push(C.quad);CL.value_list = newstack();CL.value_list.push(C.value);CL.nextlist = C.nextlist;
}
סמנטיים – IIשלב הכללים
C L → C CL1
{CL.quad_list = CL1.quad_list;CL.quad_list.push(C.quad);CL.value_list = CL1. value_list;CL.value_list.push(C.value);CL.nextlist = merge(
C.nextlist, CL1.nextlist);}
סמנטיים – IIשלב הכלליםS → switch (E N) {CL}{
backpatch(N.nextlist, nextquad() );while (!CL.value_list.empty()){value = CL.value_list.pop();quad= CL. quad_list.pop();emit('if' || E.place || '=' ||value || 'goto‘ ||quad);}
S.nextlist = merge(CL.nextlist, makelist(nextquad()); emit(“goto __”);
}