Author Topic: Formálne jazyky a preklada?e  (Read 144167 times)

OsamelyVlk

  • Jr. Member
  • **
  • Posts: 71
    • View Profile
Re: Formálne jazyky a preklada?e
« Reply #650 on: 16.01.2011, 22:52:11 »
2.Napíšte, do akej konfigurácie sa dostane automat pri konfigurácii
 . a {b | c }, ak na vstup pride znak a


a. {b|c}

toto nie je spravne...ak pride a,tak to bude vyzerat takto,ak sa nemylim

a { . b| . c} .

Hej , lebo tam je cyklus nula az  n krat , takze aj jedno ACKO je vyhovujuci vyraz...

elros

  • Newbie
  • *
  • Posts: 41
    • View Profile
Re: Formálne jazyky a preklada?e
« Reply #651 on: 16.01.2011, 22:57:45 »
Tie analyzatory zo zotavenim by som ja spravil takto
(btw skusku som uz robil)


A -> X [a Y] {Z}

A(symbolset K){

X(a | HZ | K);  //edit, tu nema byt tiez HY

check(a| HZ | K); //- tu nema byt HY, lebo je to v hranatych zatvorkach druhe, cize ak nebude na vstupe a, tak sa to co tam je v zatvorkach  nevykona cele, cize Y bude hladat zbytocne

if(sym == a ) {
   getsymbol();
   Y(HZ | K);
   //tu check nema dovod byt, toto nieje while cyklus
}

check(HZ | K);
while (sym & (HZ)){
   Z(HZ |K); // v celom cykle while mas mat rovnake parametre, lebo tam moze byt napr viac Zcok za sebou, a bez (HZ) podmienky by ti to kazde Z preskocilo
   check(HZ | K);
}


}

A-> B {d E} (c | F)

void A(symbolset K){

B(d | HE | c | HF | K );
check (d | HE | c | HF | K );

while (sym & (d | HE)){
  if(sym == d)
     getsymbol();
  else
     error(d | HE | c | HF | K);
  
  E(d | HE | c | HF | K);
  check(d | HE | c | HF | K);
 
}

check(c | HF | K);

   switch(sym){
     case c : getsymbol();
              break;
     case HF: F(K);
              break;
     default: error(K); //tu by som len toto dal, error K, predsa to nie je cyklus, a dalej uz v gramatikenic nieje
  }
}

« Last Edit: 17.01.2011, 13:37:52 by elros »

ludko

  • Newbie
  • *
  • Posts: 13
    • View Profile
Re: Formálne jazyky a preklada?e
« Reply #652 on: 16.01.2011, 23:01:37 »
Tie analyzatory zo zotavenim by som ja spravil takto
(btw skusku som uz robil)


A toto by si ako riesil?


X -> A[B|C] E  dane su aj: H(A),H(B),H(C),H(D)
napsiat syntakticky analyzator s pouzitim fcii error, check.
vysvetlic co su tie H a aky maju vyznam



Mike

  • Hero Member
  • *****
  • Posts: 634
    • View Profile
Re: Formálne jazyky a preklada?e
« Reply #653 on: 16.01.2011, 23:03:30 »
X -> A [B|C] D  dane su aj: H(A),H(B),H(C),H(D)
void X (symset K){
   A(H(B)|H(C)|H(D)|K);
   check (H(B)|H(C)|H(D)|K);
   if (sy & (H(B)|H(C)) {
      check (H(B)|H(C)|K);
       switch (sy) {
          case H(B) : B(K);break;
          case H(C) : C(K);break;
          default : error (K);
         }
   }
   D(K);
}
« Last Edit: 16.01.2011, 23:07:54 by Mike »

elros

  • Newbie
  • *
  • Posts: 41
    • View Profile
Re: Formálne jazyky a preklada?e
« Reply #654 on: 16.01.2011, 23:08:08 »

X -> A[B|C] E 

X(symbolset K){

A(HB | HC | HE | K);

check(HB| HC | HE | K);

if(sym in (HB or HC) ) {
   switch(symbol){
      case HB: B(HE| K); break;
      case HC: C(HE| K); break;
      default: error(HE | K);break;
   }
}

E(K);

}



Mike

  • Hero Member
  • *****
  • Posts: 634
    • View Profile
Re: Formálne jazyky a preklada?e
« Reply #655 on: 16.01.2011, 23:15:39 »
Definujte gramatiku prikazu do ...while v tvare EBNF a jeho translacnu schemu do jazyka virtualnych instrukcii. Pre navestie pouzite symbol label s prislusnym atributom. Urcte typy pouzitych virtualnych instrukcii jump (pre bezpodmienecny skok) a falsejump (pre podmieneny skok).

kde to najdem v skriptach ?

ondrej0071

  • Jr. Member
  • **
  • Posts: 96
    • View Profile
Re: Formálne jazyky a preklada?e
« Reply #656 on: 16.01.2011, 23:19:11 »
Definujte gramatiku prikazu do ...while v tvare EBNF a jeho translacnu schemu do jazyka virtualnych instrukcii. Pre navestie pouzite symbol label s prislusnym atributom. Urcte typy pouzitych virtualnych instrukcii jump (pre bezpodmienecny skok) a falsejump (pre podmieneny skok).

kde to najdem v skriptach ?
Do_While_Stat -> do "{" Stat_Seq "}" while "(" Expr ")"



   T [[ do "{" Stat_Seq "}" while "(" Expr ")"  ]]
   = label<L1> S[[Stat_Seq]] E[[Expr]] falsejump<L2> jump<L1> label<L2>

elros

  • Newbie
  • *
  • Posts: 41
    • View Profile
Re: Formálne jazyky a preklada?e
« Reply #657 on: 16.01.2011, 23:21:56 »
Definujte gramatiku prikazu do ...while v tvare EBNF a jeho translacnu schemu do jazyka virtualnych instrukcii. Pre navestie pouzite symbol label s prislusnym atributom. Urcte typy pouzitych virtualnych instrukcii jump (pre bezpodmienecny skok) a falsejump (pre podmieneny skok).

kde to najdem v skriptach ?

toto v skriptach nie je,.. ale na skuske byt moze,.. bolo to na prednaske.

Do While [[do Stat_seq while Expr end]] = label<L1> Stat_Seq Expr falsejump<L2>jump<L1>label<L2>

OsamelyVlk

  • Jr. Member
  • **
  • Posts: 71
    • View Profile
Re: Formálne jazyky a preklada?e
« Reply #658 on: 16.01.2011, 23:36:48 »
a otazkou ze a,b su typove premenne.Ak a=bxb co bude vyslednym typom ? k comu dochadza pri tejto operacii ?
                                                    Ak a=b co bude vyslednym typom ?  k comu dochadza pri tejto operacii ?


K tomu co napisat ? ze sa deje pri preklade staticka kontrola aby sa zistilo ci je mozne operovat s danymi typmi a aj dynamicka kontrola (pri behu uz programu) aby sa zistilo dynamicky ake typy mozno ocakavat a ukladavat (l-value) do premenej. A aky bude vysledny typ... ved to je individualne "znak kolmice" cize zlyhanie vypoctu...

any idea ?

antil kiprest

  • Full Member
  • ***
  • Posts: 159
    • View Profile
Re: Formálne jazyky a preklada?e
« Reply #659 on: 16.01.2011, 23:38:53 »
Definujte gramatiku prikazu do ...while v tvare EBNF a jeho translacnu schemu do jazyka virtualnych instrukcii. Pre navestie pouzite symbol label s prislusnym atributom. Urcte typy pouzitych virtualnych instrukcii jump (pre bezpodmienecny skok) a falsejump (pre podmieneny skok).

kde to najdem v skriptach ?

toto v skriptach nie je,.. ale na skuske byt moze,.. bolo to na prednaske.

Do While [[do Stat_seq while Expr end]] = label<L1> Stat_Seq Expr falsejump<L2>jump<L1>label<L2>

okej a pre while by to bolo  
While [[ while Expr Stat_Seq end ]] = label <L1> Expr falsejump<L2> Stat_Seq jump<L1> label<L2>
???
bravčové krídielka a náhradu sóje poprosím!!

Mike

  • Hero Member
  • *****
  • Posts: 634
    • View Profile
Re: Formálne jazyky a preklada?e
« Reply #660 on: 16.01.2011, 23:52:15 »
a otazkou ze a,b su typove premenne.Ak a=bxb co bude vyslednym typom ? k comu dochadza pri tejto operacii ?
                                                    Ak a=b co bude vyslednym typom ?  k comu dochadza pri tejto operacii ?

ak A a B su typove premenne, T1 = B1 T2 = B2, potom T1xT2 = T3 a vsetky vyskyty B1 a B2 sa nahradia A, lebo A ma typ TA - tomu sa hovori unifikacia
ak A je typova premenna, T1 = A, T2 = TE (typovy vyraz) kde TE nie je premenna, kazdy vyskyt A sa nahradi TE - substitucia
a to B, ak  T1 = A, T2 = B, potom T1 = B, lebo doslo k substitucii A = B
« Last Edit: 16.01.2011, 23:54:03 by Mike »

ondrej0071

  • Jr. Member
  • **
  • Posts: 96
    • View Profile
Re: Formálne jazyky a preklada?e
« Reply #661 on: 16.01.2011, 23:54:02 »
Definujte gramatiku prikazu do ...while v tvare EBNF a jeho translacnu schemu do jazyka virtualnych instrukcii. Pre navestie pouzite symbol label s prislusnym atributom. Urcte typy pouzitych virtualnych instrukcii jump (pre bezpodmienecny skok) a falsejump (pre podmieneny skok).

kde to najdem v skriptach ?

toto v skriptach nie je,.. ale na skuske byt moze,.. bolo to na prednaske.

Do While [[do Stat_seq while Expr end]] = label<L1> Stat_Seq Expr falsejump<L2>jump<L1>label<L2>

okej a pre while by to bolo  
While [[ while Expr Stat_Seq end ]] = label <L1> Expr falsejump<L2> Stat_Seq jump<L1> label<L2>
???

ano

ludko

  • Newbie
  • *
  • Posts: 13
    • View Profile
Re: Formálne jazyky a preklada?e
« Reply #662 on: 16.01.2011, 23:58:09 »
3) Upravte bezkontext gramatiku
   A-> abC | a{B} na LL(1). Pre upravenu gramatiku spravit syntakticky analyzator pomocou procedur Check a Error.


?? :)

ondrej0071

  • Jr. Member
  • **
  • Posts: 96
    • View Profile
Re: Formálne jazyky a preklada?e
« Reply #663 on: 17.01.2011, 00:00:17 »
3) Upravte bezkontext gramatiku
   A-> abC | a{B} na LL(1). Pre upravenu gramatiku spravit syntakticky analyzator pomocou procedur Check a Error.


?? :)

tak to by aj mna zaujimalo,ako to ma vyzerat  ???

OsamelyVlk

  • Jr. Member
  • **
  • Posts: 71
    • View Profile
Re: Formálne jazyky a preklada?e
« Reply #664 on: 17.01.2011, 00:06:23 »
3) Upravte bezkontext gramatiku
   A-> abC | a{B} na LL(1). Pre upravenu gramatiku spravit syntakticky analyzator pomocou procedur Check a Error.


?? :)

tak to by aj mna zaujimalo,ako to ma vyzerat  ???


no tam sa naraza nato ze to ma byt v EBNF , cize prefixy maju byt vyclenene zlava (aby sa mohlo jednoznacne hned v uvode rozhodnut )
nieco v zmysle a(bC |B{B});
NOT SURE!

antil kiprest

  • Full Member
  • ***
  • Posts: 159
    • View Profile
Re: Formálne jazyky a preklada?e
« Reply #665 on: 17.01.2011, 00:11:37 »
3) Upravte bezkontext gramatiku
   A-> abC | a{B} na LL(1). Pre upravenu gramatiku spravit syntakticky analyzator pomocou procedur Check a Error.


?? :)

tak to by aj mna zaujimalo,ako to ma vyzerat  ???


no tam sa naraza nato ze to ma byt v EBNF , cize prefixy maju byt vyclenene zlava (aby sa mohlo jednoznacne hned v uvode rozhodnut )
nieco v zmysle a(bC |B{B});
NOT SURE!

a v akom jazyku je A-> abC | a{B} ?? to nie je LL(1) ? resp EBNF?  mam v tom trosku zmatok
bravčové krídielka a náhradu sóje poprosím!!

OsamelyVlk

  • Jr. Member
  • **
  • Posts: 71
    • View Profile
Re: Formálne jazyky a preklada?e
« Reply #666 on: 17.01.2011, 00:23:24 »
3) Upravte bezkontext gramatiku
   A-> abC | a{B} na LL(1). Pre upravenu gramatiku spravit syntakticky analyzator pomocou procedur Check a Error.


?? :)

tak to by aj mna zaujimalo,ako to ma vyzerat  ???


no tam sa naraza nato ze to ma byt v EBNF , cize prefixy maju byt vyclenene zlava (aby sa mohlo jednoznacne hned v uvode rozhodnut )
nieco v zmysle a(bC |B{B});
NOT SURE!

a v akom jazyku je A-> abC | a{B} ?? to nie je LL(1) ? resp EBNF?  mam v tom trosku zmatok


podla mna A-> abC | a{B} je v BNF jazyk LR(k) . LL(1) jazyk je pri rozsirenej BNF== EBNF.
EBNF je vlastne rozsirena BNF , preto pre obidva typy malujeme prechodovy diagram.
LL(1) je vsak jazyk ktory parsuje (nacitava symboly) zlava , preto musi byt v najlavejsom vyraze hned definovany prefix .
LL(1) je zalozeny na konstrukcii najlavejsieho odvodenia , preto nesmie mat rovnake vyrazy v dvoch vetvach
laicky by som povedal ze v EBNF len upravujes na krajsiu formu , nieco ako ked mas v matike vyberanie pred zatvorky...



antil kiprest

  • Full Member
  • ***
  • Posts: 159
    • View Profile
Re: Formálne jazyky a preklada?e
« Reply #667 on: 17.01.2011, 00:27:19 »
3) Upravte bezkontext gramatiku
   A-> abC | a{B} na LL(1). Pre upravenu gramatiku spravit syntakticky analyzator pomocou procedur Check a Error.


?? :)

tak to by aj mna zaujimalo,ako to ma vyzerat  ???


no tam sa naraza nato ze to ma byt v EBNF , cize prefixy maju byt vyclenene zlava (aby sa mohlo jednoznacne hned v uvode rozhodnut )
nieco v zmysle a(bC |B{B});
NOT SURE!

a v akom jazyku je A-> abC | a{B} ?? to nie je LL(1) ? resp EBNF?  mam v tom trosku zmatok


podla mna A-> abC | a{B} je v BNF jazyk LR(k) . LL(1) jazyk je pri rozsirenej BNF== EBNF.
EBNF je vlastne rozsirena BNF , preto pre obidva typy malujeme prechodovy diagram.
LL(1) je vsak jazyk ktory parsuje (nacitava symboly) zlava , preto musi byt v najlavejsom vyraze hned definovany prefix .
LL(1) je zalozeny na konstrukcii najlavejsieho odvodenia , preto nesmie mat rovnake vyrazy v dvoch vetvach
laicky by som povedal ze v EBNF len upravujes na krajsiu formu , nieco ako ked mas v matike vyberanie pred zatvorky...





aha aha takze ide o to ze ked zadam prve 'a' tak este stale neviem ci idem vetvou abC alebo a{B}  spravne??? 

ale s tou BNF Ta musim opravit... toto urcite nie je v BNF.. ta totiz nepodporuje  {}  ..preto sa pytam aky jazyk to je
bravčové krídielka a náhradu sóje poprosím!!

antil kiprest

  • Full Member
  • ***
  • Posts: 159
    • View Profile
Re: Formálne jazyky a preklada?e
« Reply #668 on: 17.01.2011, 00:28:52 »
Definujte gramatiku prikazu do ...while v tvare EBNF a jeho translacnu schemu do jazyka virtualnych instrukcii. Pre navestie pouzite symbol label s prislusnym atributom. Urcte typy pouzitych virtualnych instrukcii jump (pre bezpodmienecny skok) a falsejump (pre podmieneny skok).

kde to najdem v skriptach ?

toto v skriptach nie je,.. ale na skuske byt moze,.. bolo to na prednaske.

Do While [[do Stat_seq while Expr end]] = label<L1> Stat_Seq Expr falsejump<L2>jump<L1>label<L2>

okej a pre while by to bolo  
While [[ while Expr Stat_Seq end ]] = label <L1> Expr falsejump<L2> Stat_Seq jump<L1> label<L2>
???

ano

oks, a k comu sa viaze to end ??
bravčové krídielka a náhradu sóje poprosím!!

elros

  • Newbie
  • *
  • Posts: 41
    • View Profile
Re: Formálne jazyky a preklada?e
« Reply #669 on: 17.01.2011, 00:32:15 »
to end je len slovko,.. teda ze koniec napr v jazyku pascal,.. v cecku je to ta vlnita zatvorka,.. ked chces ten label l2 je vlastne ten koniec.

a ta gramatika prepisana bude:  a(bC |{B}) ,... to mas akokeby si a vybral pred zatvorky, lebo v LL1 gramatike v jednom riadku nema byt dvakrat ten isty terminalny symbol.

antil kiprest

  • Full Member
  • ***
  • Posts: 159
    • View Profile
Re: Formálne jazyky a preklada?e
« Reply #670 on: 17.01.2011, 00:35:44 »
to end je len slovko,.. teda ze koniec napr v jazyku pascal,.. v cecku je to ta vlnita zatvorka,.. ked chces ten label l2 je vlastne ten koniec.

a ta gramatika prepisana bude:  a(bC |{B}) ,... to mas akokeby si a vybral pred zatvorky, lebo v LL1 gramatike v jednom riadku nema byt dvakrat ten isty terminalny symbol.

no jasne, to B navyse som si nevsimol..  a nevies aky je to teda jazyk?? myslim A-> abC | a{B}   ...typujem ze je kontextovy, alebo to je nieco ine?
bravčové krídielka a náhradu sóje poprosím!!

OsamelyVlk

  • Jr. Member
  • **
  • Posts: 71
    • View Profile
Re: Formálne jazyky a preklada?e
« Reply #671 on: 17.01.2011, 00:38:59 »
to end je len slovko,.. teda ze koniec napr v jazyku pascal,.. v cecku je to ta vlnita zatvorka,.. ked chces ten label l2 je vlastne ten koniec.

a ta gramatika prepisana bude:  a(bC |{B}) ,... to mas akokeby si a vybral pred zatvorky, lebo v LL1 gramatike v jednom riadku nema byt dvakrat ten isty terminalny symbol.

no jasne, to B navyse som si nevsimol..  a nevies aky je to teda jazyk?? myslim A-> abC | a{B}   ...typujem ze je kontextovy, alebo to je nieco ine?

JJ B som tam videl 2x , @erlos mas pravdu.

elros

  • Newbie
  • *
  • Posts: 41
    • View Profile
Re: Formálne jazyky a preklada?e
« Reply #672 on: 17.01.2011, 00:40:39 »
asi to bude nejaky LL(k) jazyk,..

Mike

  • Hero Member
  • *****
  • Posts: 634
    • View Profile
Re: Formálne jazyky a preklada?e
« Reply #673 on: 17.01.2011, 00:40:55 »
takze ak napriklad mam   A->aBCdeF|aBCd, vieme ze to nie je gramatika LL(1) lebo v jednom riadku nemoze byt viac krat ten isty terminalny symbol

do LL(1) vyberiem pred zatvorku aBCd a vyjde mi co ...

A-> aBCd ( eF| ? )

antil kiprest

  • Full Member
  • ***
  • Posts: 159
    • View Profile
Re: Formálne jazyky a preklada?e
« Reply #674 on: 17.01.2011, 00:41:14 »
4. Napíšte prefixnú a postfixnú formu výrazu a+b+c*d+e/f pre gramatiku z príkladu 3

 + a – asociujú do prava, * neasociuje  a / dolava a priorita je takáto:
   p(+)= p(-) > p(*) > p(/)


postfix by mal byt :  ab+c+de+*f/

a prefix??

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