[Mat08] info4 próbazh válaszok
Berta Nánássi
nberta at math.bme.hu
2011. Ápr. 25., H, 12:41:47 CEST
Sziasztok!
A próbazh válaszainak újabb része.
Berta
--------- következõ rész ---------
Egy csatolt HTML állomány át lett konvertálva...
URL: http://lists.math.bme.hu/pipermail/mat08/attachments/20110425/97635a92/attachment.htm
--------- következõ rész ---------
cpp6p.cxx:
==========
c.1: a forraskod mely reszeit teszi ertelmezhetove az "#include <FlexLexer.h>" altal beolvasott informaio?
A flexer valtozot.
c.2: Egy "Foo * abcd;" eseten milyen vonatkozasban jelent biztonsagot, es milyen vonatkozasban nem segit semmit a "DEL(abcd);" hasznalata?
biztonsag: nem engedi ketszer torolni ugyanazt.
nem segit: nem kezeli a lefoglalt tomboket.
c.3: Mit jelent a static a map_of_variables, main_list, tty_indent_amount, tty_indent, NewPrompt, flexer, parser, es hasonlo helyeken? Milyen problema eseten mit egyszerusit le, ha ahol lehet azt static-nak nyilvanitjuk?
Ezek az elemek csak az aktualis fajlbol erhetoek el. A nevutkozeseket kuszobolhetjuk ki vele nevtelen nevterek hasznalata nelkul.
c.4: Milyen informaciot es hogyan tarol a map_of_variables?
Rendezve tarol double ertekeket string kulcsok alapjan.
c.5: Milyen informaciot es hogyan tarol a main_list?
Ketszeresen lancolt lista Stmt elemekkel.
c.6: A Token konstruktoraban miert szamit jobb megoldasnak a konstruktor teste elott elhelyezett ": name(str) {" frazis a konstruktor testen belul elhelyezett "name=str;" frazisnal?
Mert a name konstans, konstans adattagoknak csak implicit modon tudunk erteket adni.
c.7: Lehet-e statikussa tenni a tty_help globalis fuggvenyt?
Lehetne.
c.8: Forditaskor milyen figyelmezteto uzenetet kapnank, ha a Cmd::eval_print fuggveny switch reszebol kitorolnenk az egyik case ... break; esetet? Honnet tudja a fordito ezen figyelmezteteshez elegseges informaciot?
Nem kapnank hibauzenetet, max ha az enumban nem definialt erteket hasznalnank egy case esetben.
c.9: A case hist: { ... } break; helyen miert van { ... } blokk letesitve? Hasonlo hely a case vars: { ... } break; is.
A lokalis deklaraciok miatt.
c.10: Reszleteiben magyarazzuk el, hogy a case hist: miert irja ki az addig begepelt parancsokat, azaz a history-t! Peldaul mit is jelent a "( *pc )->tty();" frazis, nem tul sok a cimfeloldasi indirekcio, miert nem sok? Vagy peldaul milyen elvi kulonbseg van a main_list.begin() es a main_list.end() cim kozott?
MainlistEXE hozzafuzi a begepelt parancsokat a main_list vegere.
A case hist esetben a pc valtozo megkapja a lista elejet.
Vegig iteral a listan.
(*pc) egy lista elemet jelol. Erre hivja meg a tty metodust.
Majd leptet egyet a listan a ++pc-vel.
c.11: Elobbihez hasonloan reszleteiben magyarazzuk el, hogy MIT, HOGYAN es MIERT irat ki a case vars: eset! Peldaul mi is az a pv->first es pv->second, es erre a valaszra honnet, milyen nyomozasi vonalon lehet rajonni?
A map_of_variables-ben tarolt ertekeket irja ki, ami a Var::asgn-en keresztul kap erteket.
pv megkapja a map elejet, majd a vegeig iteral.
Az iteralas kozben kiirja az aktualis elem kulcsat, majd egy " = " stringet, azutan az elem erteket, vegul egy ujsor jelet.
Az iteralo blokk vegen leptet a kovetkezo elemre.
A first es second a std::map resze.
c.12: A Num::eval fuggvenyben mi a name.c_str() es a std::strtod, es az ilyesmikre hogyan lehet rajonni, hogyan lehet kideriteni?
c_str: c stilusu stringet general a stringbol( null vegu karaktertomb). strtod: a parameterkent kapott c stringet double ertekke alakitja.
A c_str a std::string resze.
A strtod stdlib resze.
c.13: Tul egyszerunek tunik a Fun::eval fuggveny teste annak ellenere, hogy a neve alapjan fuggveny kiertekeles gondolata is felmerulhet. Itt valojaban mi is tortenik, peldaul milyen tipus a dblfun?
dblfun egy fv mutato, amivel visszater az eval.
c.14: Mi a szerepe a Var::eval fuggveny testeben az if-szerkezetnek? Ez mikepp hat ki a megvalositott nyelv SZEMANTIKA-jara?
Ha a talalt elem a lista utolso eleme, akkor 0 ertekkel ter vissza.
c.15: A Var::asgn definiciojaban rendre mire mutatnak a map_of_variables, name es val azonositok?
map_of_variables: valtozok asszociativ tombje
name: kulcs
val: hozzarendelt ertek
c.16: Mi ertelme egy semmittevo Expr::~Expr( void ) {} konstruktornak? Miert van, ha nem csinal semmit???
Azert, mert virtualis. A Late Binding miatt kell definialni, akar ureskent. ~Expr amugy destrukor, ha nem elirasrol van szo.
c.17: Mit jelent az ( fun->eval() )( arg->eval() ) kifejezes az ExprFun::eval definiciojaban? E kifejezes kiertekelesenek reszletes, belulrol kifele torteno magyarazatat varom.
fun->eval() visszaadja az aktualis fv mutatojat, amit az ExprFun::eval vegre is hajt az arg->eval() parameterrel.
More information about the Mat08
mailing list