[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