Skocz do zawartości

RoboRemoFree - sterowanie diodą przyciskiem


MarJanPol

Pomocna odpowiedź

Żeby twoja gramatyka definiowała język akceptowany przez twój komputer, w sensie stricte formalnym, musiałaby uwzględniać informację o tym ile twój komputer ma pamięci oraz jak poszczególne konstrukcje wpływają na jej zużycie. To jest w teorii do zrobienia, ale oczywiście zmiana ilości wolnej pamięci zmieni ci gramatykę.

Ale weźmy prostszy przykład. Jak napiszesz taką gramatykę, to musisz w niej między innymi uwzględnić polecenie "#include" i jego działanie. W szczególności, żeby mieć pełną definicję języka, musisz wiedzieć jakie parametry polecenie to akceptuje, a jakie prowadzą do błędu. Żeby to wiedzieć, twoja gramatyka musi zawierać pełną listę wszystkich plików na twoim komputerze i wszystkich jego dyskach sieciowych, oraz, ponieważ istnieją ścieżki względne, katalog w którym uruchomisz kompilację.

Jeśli zamiast tego gramatyka zezwoli do dowolną ścieżkę, to nie będzie definiować, w sensie formalnym, tego samego języka, który jest zaimplementowany na twoim komputerze, bo istnieją takie wejścia, które gramatyka przyjmuje, a które twój komputer odrzuca.

[ Dodano: 07-12-2017, 15:39 ]

Panowie, jestem bardzo wdzięczny za Wasz aktywny udział w moim skromnym wątku 😃 ale jeśli się zgodzicie, że na chwilę wrócę do meritum i zadam pytanie pomocnicze, o to w którym dokładnie miejscu trzeba zmienić "=" na "==", bo jakoś nie jest to dla mnie takie intuicyjne.

Poza tym rozumiem, że użycie zmiennej string jest nieoptymalne - czy zatem lepiej będzie zmienić linijkę:

String odebraneDane = "";

na:

int odebraneDane = "0";

Kłaniam się uniżenie wszystkim znawcom tematu... 😉

m.

Porównanie robisz w if-ie. Tam chcesz mieć operator porównania, a nie przypisanie.

To co zaproponowałeś jest niepoprawne na kilka różnych sposobów, więc może na razie zostaw w wersji nieoptymalnej ale działającej, a jak poczytasz więcej o C, C++ i Arduino, to może kiedyś poprawisz.

  • Lubię! 1
Link do komentarza
Share on other sites

deshipu, masz racje, to co jest zgodne z gramatyka, nalezy do jezyka. Programy niepoprawne rowniez, wiec to ze program nie dziala nic nie zmienia.

Natomiast zaciekawilo mnie to co piszesz o udowodnionym braku mozliwosci napisania gramatyki - informatyke konczylem juz dosc dawno, wiec moze od tego czasu cos sie zmienilo. Moglbys podac zrodlo?

BTW - udowodnione ze nie istnieje gramatyka dla jezyka naturalnego, ale to inna sprawa.

Link do komentarza
Share on other sites

deshipu, masz racje, to co jest zgodne z gramatyka, nalezy do jezyka. Programy niepoprawne rowniez, wiec to ze program nie dziala nic nie zmienia.

Nie, "programy niepoprawne" nie należą do języka. Z definicji, poprawnym programem (czy tam "zdaniem" czy "wypowiedzią" czy jak kto to akurat sobie nazwie) nazywamy te i tylko te wejścia, które należą do języka. Inaczej nie byłoby żadnego sensu wprowadzanie pojęcia języka formalnego. Albo wejście należy do języka i daję "tak", albo nie należy i daje "nie", albo jest niedecydowalne i nic nie daje bo obliczenie się nie zatrzymuje.

Natomiast zaciekawilo mnie to co piszesz o udowodnionym braku mozliwosci napisania gramatyki - informormatyke konczylem juz dosc dawno, wiec moze od tego czasu cos sie zmienilo. Moglbys podac zrodlo?

Nic takiego nie napisałem. Napisałem, że specyfikacja nie zawiera formalnej specyfikacji gramatyki całego języka, co możesz łatwo sprawdzić czytając tę specyfikację, oraz że jeśli nawet byś napisał taką gramatykę na podstawie tej specyfikacji, to będzie ona niejednoznaczna — to taki techniczny temin dotyczący klas gramatyk, pewnie jeszcze będzie na dalszych wykładach.

Link do komentarza
Share on other sites

Wrzuc na luz, nie rozmawiasz z mlodym studentem (niestety) - konczylem studia dawno temu, na nastepne wyklady raczej nie pojde. Moglem co najwyzej zapomniec, ale kilka razy jakis parser pisalem, wiec nawet mialem okazje troche sobie poprzypominac.

Program niepoprawny, tzn. np. zawieszajacy sie, uzywajacy zbyt duzo pamieci albo odwolujacy sie od adresu zero jest poprawnym programem w sensie jezyka. Mylisz dwa pojecia - semantyke i syntaktyke. Jezyk formalny okresla syntaktyke jezyka, czyli to co widzi kompilator. To ze program nie ma sensu, albo wykonuje niepoprawne operacje nic nie zmienia, to nadal bedzie poprawny kod w C++. A co robi to juz inna i trudniejsza sprawa. Bo kod ktory ma 10PB moze byc zupelnie zly, a dla kogos innego poprawny, tylko wymaga wiecej pamieci.

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

BTW - udowodnione ze nie istnieje gramatyka dla jezyka naturalnego, ale to inna sprawa.

Jestem ciekaw jak to możliwe. Może masz na myśli konkretną klasę gramatyki, na przykład bezkontekstowe? Bo ogólnie rzecz biorąc, ludzki mózg jest turing-complete, więc teoretycznie istnieje gramatyka opisująca wszystko, co on może przetworzyć.

Link do komentarza
Share on other sites

Porównanie robisz w if-ie. Tam chcesz mieć operator porównania, a nie przypisanie.

OK. Dziękuję! Rozumiem w takim razie, że w if-ie co do zasady nigdy nie używa się "=" (?). Jak wrócę do domu i sprawdzę czy działa, to dam znać...

m.

Link do komentarza
Share on other sites

Program niepoprawny, tzn. np. zawieszajacy sie, uzywajacy zbyt duzo pamieci albo odwolujacy sie od adresu zero jest poprawnym programem w sensie jezyka. Mylisz dwa pojecia - semantyke i syntaktyke. Jezyk formalny okresla syntaktyke jezyka, czyli to co widzi kompilator.

Nawet nie zacząłem nic mówić o *wykonywaniu* programu — nie chciałem ci komplikować i ograniczyłem się do przykładów z błędami kompilacji.

Ale możemy tam pójść, bo to ty mylisz pojęcia — wszystko zależy od tego co weźmiesz za swoją czarną skrzynkę i za wyniki "tak" i "nie". Ja nie chciałem ci komplikować, więc założyłem, że się ograniczamy do kompilatora i poprawna kompilacja programu to "tak" a niepoprawna to "nie". Ale oczywiście gramatykami możesz opisać dowolne działanie komputera i możemy sobie nasz język rozszerzyć (a właściwie zawężyć)— na przykład zakładając, że po kompilacji programu zostanie on uruchomiony z jakimś tam wejściem i jeśli da oczekiwane wyjście to jest "tak". Oczywiście te testy wtedy muszą być częścią języka, bo ich zmiana da ci inny język za każdym razem.

[ Dodano: 07-12-2017, 16:05 ]

Porównanie robisz w if-ie. Tam chcesz mieć operator porównania, a nie przypisanie.

OK. Dziękuję! Rozumiem w takim razie, że w if-ie co do zasady nigdy nie używa się "=" (?). Jak wrócę do domu i sprawdzę czy działa, to dam znać...

m.

Nie wiem, czy nigdy — jak się uprzesz, to możesz, tak jak widzisz. Ale w praktyce zazwyczaj jest to błąd.

Link do komentarza
Share on other sites

Nie.

Używać możesz czego chcesz, tyle że różne "używania" dają różne efekty.

Przykład: if (x = y).

Będzie orawdą, jeśli y nie jest ogólnie pojętym zerem. Jeśli napiszesz ciś w stylu if (x = "dupa"). - zawsze będzie to prawdą, ponieważ " dupa" nie jest zerem, a ubocznym efektrm będzie to, że od tej chwili x będzie równe "dupa".

Jeśli napiszesz if (x == "dupa") - będzie to prawdą tylko wtedy, jeśli x było dupą przed wykonaniem porównanua.

Poniał?

Link do komentarza
Share on other sites

DZIAŁA !!! 😃

dzięki bardzo!

m.

[ Dodano: 07-12-2017, 20:00 ]

...a tak na marginesie (i żebym był trochę mądrzejszy), czy możecie mi koledzy podpowiedzieć jak należałoby zmodyfikować ten kod, żeby zmienna "odebraneDane" mogła mieć typ integer?

m.

Link do komentarza
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.