fbcc_slides.ps

来自「c编译器实现」· PS 代码 · 共 968 行 · 第 1/5 页

PS
968
字号
y({)41 b(P)n(as)28 b(de)h(p)n(r)n(\023)-41 b(ep)n(ro)r(cesseur:)29b(on)g(utilise)d Ff(gcc)36 b(-E)144 2050 y Fi({)41 b(P)n(as)28b(de)h(\015ottants)144 2222 y({)41 b(P)n(as)28 b(de)h(rep)n(rise)f(des)h(erreurs)p eop%%Page: 3 33 2 bop 71 293 a Fg(Les)46 b(Choix)g(-)g(2)p 71 430 19105 v 144 727 a Fi({)41 b(On)28 b(utilise)c Ff(flex\(lex\))fFi(et)k Ff(bison\(yac)o(c\))c Fi(p)r(our)k(le)f Fe(pa)n(rser)pFi(.)228 806 y(Donc)h(le)e(compilateur)e(doit)j(p)r(ouvoir)f(accepter)i(le)e(co)r(de)228 885 y(g)n(\023)-41 b(en)n(\023)g(er)n(\023)g(e)30b(pa)n(r)d(ces)j(2)e(utilitair)o(es.)144 1057 y({)41b(Gestion)19 b(de)h(mo)r(dules)e(s)n(\023)-41 b(epa)n(r)n(\023)g(es,)18b(donc)i(un)f(syst)n(\022)-41 b(eme)19 b(d')n(\023)-41b(edi-)228 1136 y(tion)28 b(de)h(liens)f(est)h(n)n(\023)-41b(ecessaire.)144 1308 y({)41 b(Dans)33 b(la)e(mesure)h(du)h(p)r(ossible,)e(on)i(reste)g(confo)n(rme)d(\022)-42 b(a)2281387 y(la)28 b(no)n(rme)f Fe(ANSI)i(C)p Fi(.)144 1560y({)41 b(Utilisati)o(on)23 b(d'une)j(machine)e(\022)-42b(a)25 b(pile.)f(Simple,)g(mais)f(em-)228 1638 y(p)n(^)-41b(eche)30 b(l')n(\023)-41 b(evolution)27 b(du)i(compilateur.)1441811 y({)41 b(P)n(our)21 b(des)g(questions)f(de)h(p)r(erfo)n(rmances,)f(on)h(est)g(d)n(\023)-41 b(ep)r(en-)228 1890 y(dant)26b(du)h Fe(ha)n(rdw)n(a)n(re)p Fi(:)d(taille)g(des)i(p)r(ointeurs,)g(alignement)228 1968 y(des)j(donn)n(\023)-41 b(ees,)30b Fe(endianit)n(\023)-41 b(e)p Fi(.)144 2141 y({)41 b(On)20b(s'imp)r(ose)f(en\014n)h(la)e(contrainte)h(de)h(d)n(\023)-41b(ep)r(endre)20 b(au)f(mi-)228 2220 y(nimum)e(des)j(fonctions)g(des)g(lib)n(rai)o(ri)o(es)d(standa)n(rds:)i(on)g(re-)228 2298y(compile)h(une)i(pa)n(rtie)f(du)h(co)r(de)g(p)r(our)hFf(stdlib.h)o Fi(,)c Ff(stdio.h)p Fi(,)228 2377 y Ff(stdarg.h)26b Fi(et)j Ff(string.h)p Fi(.)p eop%%Page: 4 44 3 bop 71 148 a Fg(Architecture)47 b(G)m(\023)-65 b(en)m(\023)g(erale)47 b(-)f(1)p 71 271 1910 5 v 71 526 a Fi(Compilateur)25b(C)k(\()p Ff(fbcc)p Fi(\):)71 605 y Fd(\(4700)23 b(lignes\))120766 y Fi(1.)41 b Fe(Lexer)120 927 y Fi(2.)g Fe(P)n(a)n(rser)1201089 y Fi(3.)g(Gestion)29 b(des)g(d)n(\023)-41 b(ecla)n(rations)1201250 y(4.)41 b(Pro)r(duction)19 b(des)h(donn)n(\023)-41b(ees)20 b(p)r(our)f(les)f(va)n(riables)f(statiques)1201412 y(5.)41 b(T)-7 b(ypage)29 b(des)g(exp)n(ressions)1201573 y(6.)41 b(Propagation)28 b(des)h(constantes)1201735 y(7.)41 b(G)n(\023)-41 b(en)n(\023)g(eration)29b(de)g(co)r(de)g(assembleur)71 1896 y(Assembleur)e(\()pFf(fbas)p Fi(\):)71 1975 y Fd(\(700)c(lignes\))120 2137y Fi(1.)41 b Fe(Lexer)58 b Fi(-)28 b Fe(P)n(a)n(rser)1202298 y Fi(2.)41 b(Gestion)27 b(des)g(symb)r(oles)e(exp)r(o)n(rt)n(\023)-41 b(es,)28 b(globaux,)d(ou)i(p)n(riv)n(\023)-41 b(es)1202460 y(3.)41 b(Pro)r(duction)33 b(d'un)f(ex)n(\023)-41b(ecutable)33 b(relogeable)e(avec)i(table)228 2538 y(de)c(relo)r(cation)p eop%%Page: 5 55 4 bop 71 413 a Fg(Architecture)47 b(G)m(\023)-65 b(en)m(\023)g(erale)47 b(-)f(2)p 71 550 1910 5 v 71 815 a Fi(Machine)28 b(virtuelle)f(\()pFf(fbvm)p Fi(\):)71 894 y Fd(\(900)c(lignes\))120 1067y Fi(1.)41 b(Cha)n(rgement)28 b(de)h(l'ex)n(\023)-41b(ecutable)28 b(et)h(relo)r(cation)120 1239 y(2.)41 b(Emulation)26b(des)j(instructions)120 1411 y(3.)41 b(App)r(el)28 b(de)h(quelques)e(fonctions)h(de)g(la)f(lib)n(rai)o(ri)o(e)e(C)j(stan-)2281490 y(da)n(rd)g(gr)o(^)-42 b(ace)28 b(\022)-42 b(a)28b(des)h Fe(traps)71 1662 y Fi(Lib)n(rair)o(i)o(es)d(\()pFf(startup.s)p Fi(,)p Ff(fb)o(li)o(b.c)o Fi(\):)71 1741y Fd(\(900)d(lignes\))120 1913 y Fi(1.)41 b(Co)r(de)30b(de)f Fe(sta)n(rtup)120 2086 y Fi(2.)41 b(Compilation)23b(des)j(fonctions)g Fc(f)p Ff(fvs)p Fc(g)p Ff(pri)o(ntf)cFi(et)k Ff(stdarg.h)120 2258 y Fi(3.)41 b(Compilation)25b(des)k(fonctions)g(de)g Ff(string.h)p eop%%Page: 6 66 5 bop 71 453 a Fg(Le)45 b(Compilateu)q(r)j(C)e(-)g(1)p71 604 1910 5 v 71 869 a Fi(Ca)n(ract)n(\023)-41 b(eristiques)26b(ANSI)j(non)g(impl)n(\023)-41 b(em)o(ent)n(\023)g(ees:)1441042 y({)41 b(T)-7 b(yp)r(es)30 b Ff(long)p Fi(,)c Ff(float)hFi(et)i Ff(double)144 1214 y Fi({)41 b(Quali\014catifs)27b(de)i(t)n(yp)r(es)h Ff(const)c Fi(et)j Ff(volatile)1441386 y Fi({)41 b(A\013ectations)c(de)f(structures,)g(passage)g(pa)n(r)f(valeur)g(et)228 1465 y(retour)29 b(de)g(structures)1441637 y({)41 b(Ca)n(ract)n(\022)-41 b(eres)28 b(de)h(t)n(yp)r(e)hFf(wchar)p 1106 1637 22 2 v 24 w(t)144 1810 y Fi({)41b(P)n(a)n(rsing)27 b(des)i(constantes)g(de)g(t)n(yp)r(e)gFf(unsigned)34 b(int)144 1982 y Fi({)41 b(Certaines)28b(fo)n(rmes)g(d'initial)o(i)o(sati)o(ons)e(statiques)1442154 y({)41 b(Quelques)25 b(contr^)-43 b(oles)24 b(de)g(t)n(yp)r(e)h(dans)f(les)g(exp)n(ressions)g(et)228 2233 y(structures)29b(de)g(contr^)-43 b(ole.)p eop%%Page: 7 77 6 bop 71 165 a Fg(Le)45 b(Compilateu)q(r)j(C)e(-)g(2)p71 316 1910 5 v 71 581 a Fi(Exemples)27 b(de)i(ca)n(ract)n(\023)-41b(eristiques)26 b(impl)n(\023)-41 b(ement)n(\023)g(ees:)144754 y({)41 b(Anciens)23 b(et)f(nouveaux)h(p)n(rotot)n(yp)r(es)g(de)f(fonctions,)h(avec)228 833 y(les)41 b Fb(:)13 b(:)f(:)54b Fi(p)r(our)42 b(indiquer)e(une)i(fonction)e(\022)-42b(a)42 b(nomb)n(re)e(de)228 911 y(pa)n(ram)n(\022)-41b(etres)27 b(va)n(riables)144 1084 y({)41 b(Blo)r(cs)29b(dans)g(les)f(fonctions)144 1256 y({)41 b(T)-7 b(ableaux)31b(multidi)o(m)o(ensionnel)o(s,)e Ff(struct)p Fi(,)h Ff(union)pFi(,)g Ff(enum)p Fi(,)228 1335 y(p)r(ointeurs)f(sur)f(les)g(fonctions)144 1507 y({)41 b(Gestion)29 b(compl)n(\022)-41 b(ete)28b(de)h Ff(typedef)144 1679 y Fi({)41 b(T)-7 b(outes)32b(les)g(instructions)f(de)h(contr^)-43 b(ole,)31 b(y)i(comp)n(ris)d(les)228 1758 y Ff(goto)144 1930 y Fi({)41 b(T)-7 b(ables)33b(des)h(symb)r(oles)f(s)n(\023)-41 b(epa)n(r)n(\023)g(ees)34b(p)r(our)g(les)e(\023)-41 b(etiquettes)228 2009 y(de)22b Ff(struct)p Fi(,)d Ff(union)p Fi(,)g(et)j Ff(enum)pFi(,)e(les)h(champs)f(de)i(structures,)228 2088 y(les)k(\023)-41b(etiquettes)29 b(de)g Ff(goto)144 2260 y Fi({)41 b(Initialisa)o(tions)25 b(statiques)j(et)h(dynamiques)f(auto)n(ris)n(\023)-41b(ees)144 2433 y({)41 b(T)-7 b(ypage)19 b(pleinement)f(confo)n(rme)f(\022)-42 b(a)19 b(la)f(no)n(rme)f(ANSI)j(p)r(our)2282512 y(p)n(resque)29 b(tous)g(les)f(op)n(\023)-41 b(erateurs)peop%%Page: 8 88 7 bop 71 431 a Fg(Le)45 b(Compilateu)q(r)j(C)e(-)g(3)p71 581 1910 5 v 71 847 a Fi(D)n(\023)-41 b(etails)27b(d'impl)n(\023)-41 b(em)o(entation:)144 1019 y({)41b(Il)24 b(n'y)h(a)f(pas)h(de)g(rep)n(r)n(\023)-41 b(esentation)24b(interm)n(\023)-41 b(ediai)o(re)22 b(p)r(our)j(le)2281098 y(co)r(de)32 b(autre)f(que)g(celle)e(des)i(exp)n(ressions.)f(Le)h(compila-)228 1177 y(teur)i(p)r(ourrait)c(^)-41 b(etre)32b(vu)h(comme)e(un)h(p)n(remier)e(pas)i(vers)228 1256y(un)d(g)n(\023)-41 b(en)n(\023)g(erateur)29 b(de)g(co)r(de)h(interm)n(\023)-41 b(ediai)o(re)144 1428 y({)41 b(T)-7 b(outes)22b(les)g(tables)f(de)h(symb)r(oles)f(sont)h(g)n(\023)-41b(er)n(\023)g(ees)22 b(avec)h(des)228 1507 y(tables)28b(de)h(hachage)144 1679 y({)41 b(Pratiquement)18 b(toutes)h(les)g(donn)n(\023)-41 b(ees)20 b(sont)f(sto)r(ck)n(\023)-41 b(ees)20b(dans)228 1758 y(des)32 b(listes.)e(Cela)h(p)r(ermet)g(de)h(simpli)o(\014er)d(la)i(gestion)g(de)228 1837 y(la)24 b(m)n(\023)-41b(emoire)22 b(et)i(\023)-41 b(evite)25 b(d'ab)r(o)n(rd)f(un)h(trop)g(grand)f(nomb)n(re)228 1916 y(de)29 b(structures)f(\022)-42b(a)29 b(d)n(\023)-41 b(e\014nir)28 b(de)h(fa\030)-38b(con)29 b(explicite.)144 2088 y({)41 b(Le)h(mo)r(d)n(\022)-41b(ele)41 b(de)i(pile)d(est)i(le)g(m)n(^)-41 b(eme)40b(que)i(celui)f(du)h(C)228 2167 y(standa)n(rd.)22 b(On)i(utilise)d(un)i(lien)f(dynamique)f(et)j(on)f(sauve)228 2246 y(aussi)k(la)g(taille)e(des)k(a)n(rguments)d(pass)n(\023)-41 b(es)28 b(en)g(pa)n(ram)n(\022)-41 b(etre.)p eop%%Page: 9 99 8 bop 71 328 a Fg(Le)45 b(Compilateu)q(r)j(C)e(-)g(4)p71 479 1910 5 v 71 670 a Fi(La)32 b(syntaxe)h(des)g(d)n(\023)-41b(ecla)n(rations)31 b(imp)r(ose)g(de)j(construire)e(une)71736 y(rep)n(r)n(\023)-41 b(esentation)30 b(interm)n(\023)-41b(ediai)o(re)28 b(p)r(our)k(les)f(t)n(yp)r(es.)g(On)h(utilise)71803 y(p)n(ratiquement)26 b(la)h(m)n(^)-41 b(eme)28 b(rep)n(r)n(\023)-41b(esentation)27 b(p)r(our)i(le)f(t)n(yp)r(e)h(d)n(\023)-41b(e-)71 869 y(\014nitif.)71 1002 y Fd(T)-6 b(yp)r(es:)711114 y Fa(type)32 b(:==)62 b(\(base_t)q(yp)q(e\))3141181 y(|)31 b(\(TYPE_P)q(OI)q(NT)q(ER)q(\))j(+)d(type)3141247 y(|)g(\(TYPE_A)q(RR)q(AY)j(dim\))f(+)e(type)3141313 y(|)g(\(TYPE_S)q(TR)q(UC)q(T)j(sym\))e(|)f(\(TYPE_U)q(NI)q(ON)j(sym\))e(|)f(\(TYPE_E)q(NU)q(M)j(sym\))314 1380 y(|)d(\(TYPE_F)q(UN)q(C)j(func_typ)q(e)g(var_list)q(\))f(+)e(type)71 1513y(base_type)j(:==)63 b(TYPE_CHA)q(R)34 b(|)d(TYPE_UCH)q(AR)4671579 y(|)g(TYPE_SHO)q(RT)j(|)d(TYPE_US)q(HO)q(RT)4671646 y(|)g(TYPE_INT)j(|)d(TYPE_UI)q(NT)71 1778 y(func_type)j(:==)e(FUNC_EL)q(LI)q(PS)q(IS)i(|)d(FUNC_OL)q(D)j(|)c(FUNC_NE)q(W)711911 y(var_list)k(:==)e(var1)g(+)f(...)h(+)f(varN)712044 y(var)h(:==)f(\()g(\(nom\))i(var_sto)q(ra)q(ge)h(type)f(var_init)h(\))71 2177 y(var_stora)q(ge)g(:==)63 b(STORAGE_)q(DE)q(FA)q(UL)q(T)34b(|)d(STORAGE_A)q(UT)q(O)j(|)d(STORAGE_)q(RE)q(GI)q(ST)q(ER)5282243 y(|)g(STORAGE_)q(ST)q(AT)q(IC)j(|)d(STORAGE_)q(EX)q(TE)q(RN)712376 y(var_init)j(:==)e(\(INIT_EX)q(PR)i(expr\))f(|)e(\(INIT_L)q(IST)j(var_ini)q(t1)g(...)e(var_ini)q(tN)q(\))p eop%%Page: 10 1010 9 bop 71 223 a Fg(Le)45 b(Compilateu)q(r)j(C)e(-)g(5)p71 373 1910 5 v 71 564 a Fd(T)-6 b(able)23 b(des)i(symb)r(oles:)71676 y Fa(var_locat)q(io)q(n)34 b(:==)e(VAR_STAC)q(K)i(|)d(VAR_DATA)71809 y(sym_var)i(:==)f(\()f(SYM_VAR)j(var_sto)q(ra)q(ge)g(type)f(\(var_loca)q(ti)q(on)h(var_off)q(se)q(t\))q(\))71 942y(sym_field)q(_s)q(tr)q(uc)q(t)g(:==)e(\(type)h(offset\))711075 y(sym_typed)q(ef)h(:==)e(\(SYM_TY)q(PE)q(DE)q(F)i(type\))711208 y(sym_struc)q(t)g(:==)62 b(\(TYPE_S)q(TR)q(UC)q(T)34b(-1\))62 b(/*)32 b(si)f(non)h(d\023)-30 b(efini)33 b(*/)4971274 y(|)e(\(TYPE_S)q(TR)q(UC)q(T)j(symbol_t)q(ab)q(le)g(size)e(align\))71 1407 y(sym_enum_)q(co)q(ns)q(t)i(:==)e(\(SYM_ENU)q(M_)q(CO)q(NS)q(T)i(val\))71 1519 y Fd(Exp)n(ressions:)71 1631y Fa(expr)e(:==)g(\(type)h(tag)f(expr1)h(...)f(exprN)h(\))711764 y(expr_iden)q(t)h(:==)e(\(type)h(EXPR_IDE)q(NT)h(sym\))711897 y(expr_call)g(:==)e(\(type)h(EXPR_CA)q(LL)h(expr_fu)q(nc)g(n)d(param1)i(paramN\))71 2030 y(expr_int)h(:==)e(\(type)h(EXPR_INT)h(n\))71 2163 y(expr_str)g(:==)e(\(type)h(EXPR_STR)h(str1)f(...)f(strN\))712295 y(expr_cast)i(:==)e(\(type)h(EXPR_CA)q(ST)h(expr\))712428 y(etc...)p eop%%Page: 11 1111 10 bop 71 312 a Fg(L'Assembleur)p 71 449 1910 5 v144 746 a Fi({)41 b(G)n(\023)-41 b(en)n(\023)g(eration)35b(de)f(co)r(de)i(et)f(donn)n(\023)-41 b(ees)35 b(dans)g(2)f(segments)228 825 y Ff(.text)27 b Fi(et)i Ff(.data)144 997 y Fi({)41b(Donn)n(\023)-41 b(ees:)20 b Ff(.byte)35 b Fe(num)pFi(,)18 b Ff(.short)34 b Fe(num)p Fi(,)18 b Ff(.int)35b Fe(exp)n(r)p Fi(,)p Ff(.align)228 1076 y Fe(num)p Fi(,)28b Ff(.zero)35 b Fe(num)144 1248 y Fi({)41 b(Etiquettes:)29b Ff(.equ)34 b Fe(sym)p Ff(,)p Fe(num)27 b Fi(,)i Fe(sym)pFf(:)p Fi(,)e Ff(.globl)34 b F

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?