FIRST & FOLLOW

Programovacie jazyky, rady, poradňa...
axxis
Addict
Addict
Používateľov profilový obrázok
Príspevky: 3690
Registrovaný: 29 máj 2007, 21:53
Bydlisko: Spálené mlyny
Kontaktovať používateľa:

FIRST & FOLLOW

Príspevok od používateľa axxis »

nie je to uplne programovanie, ale potrebujem pomoc s vypoctom mnozin FIRST a FOLLOW

Kód: Vybrať všetko

   S  ->  S * E | E
   E  ->  T R
   R  ->  + T R | e
   T  ->  ( S ) | T ? | i
ako sa vyrata FIRST toho uplne prveho pravidla S -> S * E ?
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Re: FIRST & FOLLOW

Príspevok od používateľa audiotrack »

first koľko?
no pre jednoduchosť first jedna by bolo vlastne rozvinutie neterminálov na terminály, a zobranie prvých n (v tomto prípade 1) terminálov zo vzniknutého terminálneho slova. S*E sa ti môže zľava rekurzívne naťahovať, alebo sa prvé S prepíše na E. E sa potom prepíše na TR, T sa prepíše na zátvorku, i alebo sa bude rekurzívne naťahovať. Takže FI(1) bude ( zjednotenie i. Ak rátaš dlhšie first ako ti vznikne, musíš brať do úvahy zreťazenie s folowom toho neterminálu ktorého first robíš
axxis
Addict
Addict
Používateľov profilový obrázok
Príspevky: 3690
Registrovaný: 29 máj 2007, 21:53
Bydlisko: Spálené mlyny
Kontaktovať používateľa:

Re: FIRST & FOLLOW

Príspevok od používateľa axxis »

vdaka, nevedel som, ze si mam to S prepisat na neterminal E
a este jednu vec by som potreboval, lebo nie celkom rozumiem zadaniu

Kód: Vybrať všetko

Převeďte následující gramatiku na LL(1) gramatiku tak, aby popisovala syntaxi regulárních výrazů. Operátor součtu a konkatenace jsou zleva asociativní, přičemž nejvyšší prioritu má operátor * a konkatenace má větší prioritu než součet. Ověřte, ľe je výsledná gramatika typu LL(1). 
     E -> E + E  |  E E  |  E *  |  ( E ) | a
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Re: FIRST & FOLLOW

Príspevok od používateľa audiotrack »

neviem na akej úrovni si vo formáloch a automatoch, ale ja by som to riešil odstránením konfliktov (vidím že je tam rekurzia ktorá musí preč, to sa robí cez pomocný neterminál napríklad E'. Tiež tam vidím first-folow konflikt ktorý sa odstraňuje pohltením terminálu), a overenie by bolo pomocou zostrojenia LL(k) analyzátoru.

viac o transformáciach na LL(1): http://cs.wikipedia.org/wiki/Transformace_na_LL%281%29
axxis
Addict
Addict
Používateľov profilový obrázok
Príspevky: 3690
Registrovaný: 29 máj 2007, 21:53
Bydlisko: Spálené mlyny
Kontaktovať používateľa:

Re: FIRST & FOLLOW

Príspevok od používateľa axxis »

mohlo by to byt vo vysledku nieco taketo?

Kód: Vybrať všetko

E -> aE'
E' -> E'' | (E) | epsilon
E'' -> *E''|+EE'' | EE'' | epsilon
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Re: FIRST & FOLLOW

Príspevok od používateľa audiotrack »

vypadá to dobre, ak ti výjde analyzátor tak to dobre bude (ak v ňom nespravíš chybu)
axxis
Addict
Addict
Používateľov profilový obrázok
Príspevky: 3690
Registrovaný: 29 máj 2007, 21:53
Bydlisko: Spálené mlyny
Kontaktovať používateľa:

Re: FIRST & FOLLOW

Príspevok od používateľa axxis »

neni to dobre, first a follow prveho aj druheho pravidla su v konflikte :x
len toto nejako neviem opravit
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Re: FIRST & FOLLOW

Príspevok od používateľa audiotrack »

Skús si pozreť poriadne ten link na wiki alebo si nájdi v skriptách ako sa hladajú a odstraňujú konflikty, prípadne ako krajné riešenie je začať robiť analyzátor a uvidíš kde nastáva konflikt. Ja to už mám dávno za sebou, tak som prekvapený že si vôbec toľko toho pamätám :)
axxis
Addict
Addict
Používateľov profilový obrázok
Príspevky: 3690
Registrovaný: 29 máj 2007, 21:53
Bydlisko: Spálené mlyny
Kontaktovať používateľa:

Re: FIRST & FOLLOW

Príspevok od používateľa axxis »

no ja dufam, ze to budem mat zajtra uz tiez za sebou. radsej by som zdochol ako robit este jeden kompilator
thou, dakujem Ti za pomoc
Napísať odpoveď