• Welcome to TUKE FÓRUM - Fórum pre študentov Technickej Univerzity v Košiciach.
 

Formálne jazyky a preklada?e

Started by mishelka, 16.09.2010, 13:35:34

« predchdzajce - alie »

antil kiprest

Quote from: sulo on  29.11.2010, 01:23:06
Quote from: cenki on  28.11.2010, 22:18:44
BTW. este k 3tej pisomke:
Gramatika:
a ["*" b]
c {"/" d}
bude:
a(E MUL|H_b|K)
b(K)
c(H_Div|H_d|K)
d(H_Div|H_d|K) alebo d(H_d|K) alebo d(K) // ak su tam zatvorky {}
??? Lebo sa nam trochu rozchadzaju nazory na toto :)

Pre: X → C {"/" D}
bude volanie pre D:
D(E DIV | H_D | K);

Lebo po D-čku môžu vrámci pravidla X nasledovať ďalšie "/" a D-čka, keďže je tam cyklus {}.
Pre podmienku [] by už bolo len K.

ok a co presne je to H_d ?? co sa tam nachadza?
bravčové krídielka a náhradu sóje poprosím!!

sulo

Všetky terminálne symboly, ktoré sa môžu vyskytnúť na začiatku D-čka.

Napr.:
D → (Y | "plus") "value"
Y → ["div"] "minus" "mul"

Najprv určíme H_Y, lebo ho budeme potrebovať pri D-čku:
H_Y = E DIV | E MINUS;

A potom pre samotné D:
H_D = H_Y | E PLUS;

Safyia

Quote from: sulo on  29.11.2010, 01:36:36
Všetky terminálne symboly, ktoré sa môžu vyskytnúť na začiatku D-čka.

Napr.:
D → (Y | "plus") "value"
Y → ["div"] "minus" "mul"

Najprv určíme H_Y, lebo ho budeme potrebovať pri D-čku:
H_Y = E DIV | E MINUS;

A potom pre samotné D:
H_D = H_Y | E PLUS;
To sa nepytame... To vieme... Ale ked mas dade po sipke nieco, ako cenki daval priklad, radsej ten povedz :D

sulo

Tri príspevky vyššie...  :D

ursus

sulo-man, plz vyries toto

a->b{"+" b}
b->c["-" b]
c->d["*" d]
d->value | "(" a ")"

thx a lot
So this router walks into the doctor's office...
- Doctor, it hurts when IP.

cenki

#405
thx sulo, konečne dakto kto ujasnil a nie len my čo sme odhadovali myšlienkové pochody nášho pána cvičiaceho.
od ursus:
a->b{"+" b}            //bude: b(PLUS|H_b|K), b(PLUS|H_b|K)
b->c["-" b]             //bude: c(MINUS|H_b|K), b(K)
c->d["*" d]            //bude: d(MUL|H_d|K), d(K)
d->value | "(" a ")"  //bude: a(RPAR)
Takto?

antil kiprest

Quote from: cenki on  29.11.2010, 02:58:32
thx sulo, konečne dakto kto ujasnil a nie len my čo sme odhadovali myšlienkové pochody nášho pána cvičiaceho.
od ursus:
a->b{"+" b}            //bude: b(PLUS|H_b|K), b(PLUS|H_b|K)
b->c["-" b]             //bude: c(MINUS|H_b|K), b(K)
c->d["*" d]            //bude: d(MUL|H_d|K), d(K)
d->value | "(" a ")"  //bude: a(RPAR)
Takto?


jj tiez si myslim akurat

a->b(E PLUS | H_B | K){"+" b(E PLUS | H_B | K)}
b->c(E MINUS | H_C | K)["-" b(E MINUS | H_C | K)]
c->d(E MUL | H_D | K)["*" d(H_D | K)]
d->value | "(" a(E RPAR) ")"

si myslim
bravčové krídielka a náhradu sóje poprosím!!

revelc

Quote from: cenki on  29.11.2010, 02:58:32
thx sulo, konečne dakto kto ujasnil a nie len my čo sme odhadovali myšlienkové pochody nášho pána cvičiaceho.
od ursus:
a->b{"+" b}            //bude: b(PLUS|H_b|K), b(PLUS|H_b|K)
b->c["-" b]             //bude: c(MINUS|H_b|K), b(K)
c->d["*" d]            //bude: d(MUL|H_d|K), d(K)
d->value | "(" a ")"  //bude: a(RPAR)
Takto?

Takto

a->b{"+" b}            //bude: b(PLUS|H_b|K), b(PLUS|H_b|K)
b->c["-" b]             //bude: c(MINUS|H_b|K), b(K)
c->d["*" d]            //bude: d(MUL|H_d|K), d(K)
d->value | "(" a ")"  //bude: a(RPAR | K)
Čo môžeš urobiť dnes odlož na pozajtra a ziskaš deň voľna.

"I'm a man of simple tastes. I enjoy dynamite...and gunpowder...and gasoline! "

antil kiprest

Quote from: revelc on  29.11.2010, 03:11:02
Quote from: cenki on  29.11.2010, 02:58:32
thx sulo, konečne dakto kto ujasnil a nie len my čo sme odhadovali myšlienkové pochody nášho pána cvičiaceho.
od ursus:
a->b{"+" b}            //bude: b(PLUS|H_b|K), b(PLUS|H_b|K)
b->c["-" b]             //bude: c(MINUS|H_b|K), b(K)
c->d["*" d]            //bude: d(MUL|H_d|K), d(K)
d->value | "(" a ")"  //bude: a(RPAR)
Takto?

Takto


a->b{"+" b}            //bude: b(PLUS|H_b|K), b(PLUS|H_b|K)
b->c["-" b]             //bude: c(MINUS|H_b|K), b(K)
c->d["*" d]            //bude: d(MUL|H_d|K), d(K)
d->value | "(" a ")"  //bude: a(RPAR | K)

si si tym isty?? ja by som tam K neposielal... v K mas totiz uz od mainu aj SEOF a ked to a-cko volas ked Ti pride "(" .. no a potom predsa nemozes len tak dostat SEOF kym sa Ti neuzavrie zatvorka... okrem toho ostatne symboly sa Ti do K znovu postupne nazbieraju...  ale opravte ma ked sa mylim
bravčové krídielka a náhradu sóje poprosím!!

cenki

Quote from: antil kiprest on  29.11.2010, 03:07:23
...
si myslim

Radšej nemyslieť... môžeš odôvodniť prečo tak ?
napr.: c->d(E MUL | H_D | K)["*" d(H_D | K)], prečo dávaš i H_D v prvom d()? A prečo H_D v druhom d()?
to revelc: jo K na konci tiež, som zabudol.

antil kiprest

cenki, jedine v tom pripade mas totiz neasociativnu operaciu (*).. to vyplyva z gramatiky.. a ked sa Ti uz raz vyskytne * tak ho dalej uz neocakavas... cize neposielas E MUL do druheho d ...


ale to K na konci mi vysvetlite preco to nevadi, ked si za tym tak stojite  ;D
bravčové krídielka a náhradu sóje poprosím!!

antil kiprest

mimochodom H_D = H_C = H_B = H_A = E LPAR | E VALUE pokial sa nemylim...

ta kde je sulo? kto teraz vynesie rozsudok?
bravčové krídielka a náhradu sóje poprosím!!

LubomirR

A -> B {"+" B}

Za prvým B môžu nasledovať plus a B, teda:
B(E PLUS | H_B | K);
Za druhým B môžu nasledovať opäť plus a B, pretože {} môže zabezpečiť ďalšie opakovanie (+ B + B + B...) a ak by chýbalo napr. plus, tak sa zrecoveruje vďaka tomu, že vo while sa testuje, či je aktuálny symbol z (E PLUS | H_B), nie len E PLUS.
B(E PLUS | H_B | K);


B -> C [ "-" B ]

Za C sa dáva len mínus. Nemalo by zmysel dávať do množiny aj H_B, pretože ak by sme dali aj H_B a bolo by vynechané mínus a vďaka nejakému erroru by aj prišlo k začiatku B, tak aj tak nám to nepomôže, lebo volanie B je v ife, ktorý sa celý nevykoná. (Na toto sme sa boli pýtať priamo Kollára, je to podobné ako A -> B ( c d e | f g h ) C - tu sa B zavolá s E c | E f | H_C | K.)
C(E MINUS | K);
Za posledným B už nejde nič (v tomto pravidle):
B(K);


C -> D [ "*" D ]

Podobne ako predchádzajúce:
D(E MUL | K);
D(K);


D -> value | "(" A ")"

Tu bude switch, v default bude error s K (pozor, tu mal Kollár v niektorých príkladoch chybu, dal tam aj E VALUE a E LPAR).
Za A ide len RPAR, čiže:
A(E RPAR | K);


Quote from: antil kiprestno a potom predsa nemozes len tak dostat SEOF kym sa Ti neuzavrie zatvorka...

To SEOF musí ísť do každého erroru už len kvôli tomu, aby sa ukončil ten while v errore, keď sa narazí na SEOF. Aby si nevolal getsymbol aj vtedy, keď už nie sú dostupné ďalšie symboly.
"Microsoft would have us believe that helping your neighbour is the moral equivalent of attacking a ship."
-- Richard Stallman

XMPP: lubomirr@jabbim.sk

antil kiprest

ok.. mmnt .. takze tam ako mam ten while { + B +B + B}, ked niekde bude chybat + tak sa to zotavi na VALUE alebo LPAR ?? ked je to tak, tak som ani zadanie spravne nepochopil ;D
ale inac chlape teraz si ma uz uplne poplietol... ja mam ten kod asi uplne inak ako ma byt ;D  napr vo while v error mam v podmienke aj symbol!=SEOF a v tych ostatnych funkciach posielam kde co...funguje mi to pekne, vypisuje co kde chyba, ale co z toho ked ten test aj tak asi nedam... to mam za to ze k tomu pristupujem intuitivne a nie podla ucebnic hehe... potom som mimo hry v takychto veciach
bravčové krídielka a náhradu sóje poprosím!!

LubomirR

Quote from: antil kiprest on  29.11.2010, 05:17:13
ok.. mmnt .. takze tam ako mam ten while { + B +B + B}, ked niekde bude chybat + tak sa to zotavi na VALUE alebo LPAR ?? ked je to tak, tak som ani zadanie spravne nepochopil ;D
ale inac chlape teraz si ma uz uplne poplietol... ja mam ten kod asi uplne inak ako ma byt ;D  napr vo while v error mam v podmienke aj symbol!=SEOF a v tych ostatnych funkciach posielam kde co...funguje mi to pekne, vypisuje co kde chyba, ale co z toho ked ten test aj tak asi nedam... to mam za to ze k tomu pristupujem intuitivne a nie podla ucebnic hehe... potom som mimo hry v takychto veciach

K tomu while ti skúsim napísať príklad, snáď je správne.


/* A -> B {"+" B} */
int a(SetType K) {
  int left, right;
  left = b(E PLUS | H_B | K);

  check(n, E PLUS | H_B | K);
  while ((E symbol) & (E PLUS | H_B)) {
    if (symbol == PLUS) {
      getsymbol();
    } else {
      error(n, E PLUS | H_B | K);
    }
    right = b(E PLUS | H_B | K);
    left += right;

    check(n, E PLUS | H_B | K);
  }

  return left;
}


To SEOF nemusíš dávať nikde (len raz pri volaní A z mainu), lebo sa ti vďaka K dostane všade.
"Microsoft would have us believe that helping your neighbour is the moral equivalent of attacking a ship."
-- Richard Stallman

XMPP: lubomirr@jabbim.sk

pisti17

ako ma vyzerat ta dokumentacia na 4zadanie???

neucilasom

Ak kreslim syntakticky strom a mam vyraz 3+4-5+9+10 a mam - ma prioritu 1 a + 2  a vsetko je bez asociativity z toho vyjde ze najprv sa urobi 4-5 a potom k tomu pripocitame 3 a ostatne sa odignoruje a uz sa nekresli?

neucilasom

No ale ja som to myslela ako na pisomke nie v programe.

fazy

Len tak zo zvedavosti robi este dakto zadania?

INKOGNITTO

Nooo, aj ja by som potreboval do stvrtka mat FJAP 4 / 15. Kto si chce zarobit ? :)

asmodeus

QuotePre stredajsiu skupinu:
Zadanie c. 4 bude odovzdavane v 12. tyzdni, teda 08.12.2010 o 15,55 v pc16.
to znamena, ze aj bleskovka bude v 12. tyzdni?


SOGOR

Nenajde sa nejaka dobra dusa co ma 27 stranu 8. prednasky a nepodeli sa o nu s nami?

Petrinho

Viete co vam poviem, trebalo by mi "poradit" so zadanim 3,4 ...verzia 15 :)
Kto by bol ochotny? Financna odmena je samozrejmostou.
mizu.kolotocar@gmail.com


Nasher

Nasiel by sa este niekto, co by mi urobil zadania 3 a 4? Zaplatim.
Kontakt cez PM alebo mischesn@gmail.com.
Dik moc.