gramatyka bezkontekstowa

gramatyka bezkontekstowa
S1
  • Rejestracja:ponad 11 lat
  • Ostatnio:ponad 11 lat
  • Postów:3
0

Witam. Pomoże ktoś rozwiązać taki problem: Program, który wypisze na ekranie n łańcuchów z języka opisanego za pomocą gram bezkontekstowej:

S->aB|bA A->a|As|bAA B ->b|bS|aBB

Proszę o pomoc.

edytowany 1x, ostatnio: Shalom
Shalom
  • Rejestracja:około 21 lat
  • Ostatnio:około 3 lata
  • Lokalizacja:Space: the final frontier
  • Postów:26433
1

Ale dowolnych? Jakich n słów? W kolejności rosnących długości?
Samo zadanie trywialne. Zdefiniuj sobie każy nieterminal jako funkcje która zwraca ci odpowiedni ciąg, np:

Kopiuj
string S(){
  if(rand()%2){
    return "a"+B();
  }else{
    return "b"+A();
  }
}

string A(){
  choice = rand()%3;
  if(choice == 0){
    return "a";
  }else if(choice ==1){
    return A()+"s";
  }else{
   return "b"+A()+A();
  }
}

To jest chyba najbardziej oczywista implementacja, przy założeniu że chcesz wypisać sobie losowe słowa. Analogicznie dopisz sobie B() a potem wypisz S() w pętli.


"Nie brookliński most, ale przemienić w jasny, nowy dzień najsmutniejszą noc - to jest dopiero coś!"
S1
  • Rejestracja:ponad 11 lat
  • Ostatnio:ponad 11 lat
  • Postów:3
0

tak chodzi i o wypisanie posortowanych długosci

Shalom
  • Rejestracja:około 21 lat
  • Ostatnio:około 3 lata
  • Lokalizacja:Space: the final frontier
  • Postów:26433
0

http://ideone.com/29joBN
Ale to jest C++, w C musisz wywalić "string" i bawić się w ręczne alokowanie pamięci na tablice znaków. No i ten kod wypisuje zupełnie losowe słowa z tego języka. Nad wypisywaniem w kolejności musisz trochę pomyśleć.


"Nie brookliński most, ale przemienić w jasny, nowy dzień najsmutniejszą noc - to jest dopiero coś!"
S1
  • Rejestracja:ponad 11 lat
  • Ostatnio:ponad 11 lat
  • Postów:3
0

nie mam pomysłu jak to można zrobić. Chodzi o to żeby nie dzielić tego na funkcję i w jednej main to zrobić czy dalej niech są podzielone na funkcję ?

Shalom
  • Rejestracja:około 21 lat
  • Ostatnio:około 3 lata
  • Lokalizacja:Space: the final frontier
  • Postów:26433
0

A jakie to ma niby znaczenie? o_O Czy ty w ogóle rozumiesz gdzie w tym zadaniu jest "trudność"? Bo mam wrażenie że nie za bardzo. Biorąc pod uwagę fakt że nie umiałes doprowadzić tego do stanu "kompiluje się" to szczerze wątpię żebyś był w stanie to zadanie rozwiązać.
Zrób sobie takie ćwiczenie na kartce: weź tą gramatykę i ręcznie wypisz sobie rozwiązanie dla n=10 czy n=15 i zobacz w jaki sposób to robisz.


"Nie brookliński most, ale przemienić w jasny, nowy dzień najsmutniejszą noc - to jest dopiero coś!"

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.