Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Programowalny serwer/ tworzenie własnego języka

Ostatnio zmodyfikowano 2016-11-05 19:40
Autor Wiadomość
Axator
Temat założony przez niniejszego użytkownika
Programowalny serwer/ tworzenie własnego języka
» 2016-11-05 14:10:09
Witam,
pracuję od dawna nad własnym projektem prostej gry online. Moim celem jest stworzenie gry jak najbardziej elastycznej, możliwej do zaprogramowania od strony użytkownika pod każdym kątem i w niemalże dowolny sposób. Do tego celu tworzę edytor serwera. I teraz chciałbym, aby w tym edytorze było pole tekstowe, które będzie wypełniała osoba która zdecyduje się uruchomić taki serwer. W tym polu będzie programowała we własnym języku, który mam nadzieję stworzyć. I tu pojawia się pytanie w jaki sposób to napisać, aby to co pojawi się w tym polu tekstowym było interpretowane przez serwer w różny sposób w zależności od tego co tam się znajdzie.
Moim pomysłem jest sprawdzanie łańcuchów znaków w poszukiwaniu wzorców składniowych i słów-klucz. Na przykład, gdy użytkownik wpisze "set", to serwer powinien się spodziewać że dalej będzie tworzył nową zmienną lub zmieniał wartość poprzednio utworzonej. Gdy pojawi się słowo-klucz "call" to dalej ma spodziewać się wywołania funkcji.

I pojawia się kolejne, z pozoru banalne pytanie: Jak stworzyć zmienną?

Tutaj też mam pomysł, gdy pojawi się na przykład "set int zmienna;", to zaalokuje blok pamięci o rozmiarze sizeof(int), wskaźnik na ten blok pamięci będzie przechowywał w <int*>vectorze i dodatkowo nazwę zmiennej będzie przechowywał w <string>vectorze pod tym samym indeksem co int. Nie wiem czy takie rozwiązanie jest najlepsze, proszę o rady.

I jeszcze jedno proste pytanie: Jak stworzyć funkcję?
Gdy na przykład użytkownik wpisze taki tekst:

function Funkcja ( int a, int b) returns int
{
return a+b;
}

i w innym miejscu napisze

set int c = Funkcja(a, b);

to żeby program wiedział, że w tym miejscu musi przenieść swoje wykonywanie to tego kawałka, zrobić co tam trzeba i potem wrócić z powrotem. Na to też niby mam pomysł, ale wolę najpierw przeczytać jakąś radę.

I to wszystko w cpp :D

Offtopic: Przy nauce Unreal Engine spotkałem się z taką oto linijką kodu: "GetWorldTimeManager().SetTime(parametry);" Powoduje ona ustawienie timera który co wyznaczony czas uruchamia jakąś funkcję, te informacje podaje się w argumentach funkcji/metody SetTime(). Nie rozumiem jednak tego zapisu, tak jakby GetWorldTimeManager() był obiektem na rzecz którego jest wywoływana metoda SetTime. Mógłby mi ktoś wytłumaczyć ten zapis, w jaki sposób go przeczytać i co on oznacza?

Pozdrawiam.
P-153383
Gibas11
» 2016-11-05 14:35:01
Po co własny język? Użyj JS. A jak koniecznie chcesz to używaj dynamicznego typowania.
P-153384
pekfos
» 2016-11-05 15:18:13
Zanim się zabierzesz za tworzenie własnego języka, lepiej poznaj język, w którym zamierzasz to wszystko zrealizować. Tych pytań by nie było, gdybyś tylko miał wiedzę, potrzebną do realizacji takiego zadania.

banalne pytanie: Jak stworzyć zmienną?
jeszcze jedno proste pytanie: Jak stworzyć funkcję?
"I na koniec takie trywialne pytanie: jak zrobić wszystko o czym właśnie napisałem?". Wydajesz się być znacznie bardziej obeznany z językami skryptowymi, niż z C++..
P-153385
Axator
Temat założony przez niniejszego użytkownika
» 2016-11-05 16:23:12
W C++ programuję od dwóch lat, wydaje mi się, że znam go całkiem nieźle. Uczę się nowych rzeczy poprzez realizowanie konkretnych zagadnień. To jedno z nich. Brakuje mi weny/pomysłu w jaki sposób to najlepiej wykonać. Miałem nadzieję na pomoc, a nie informację że tego nie umiem...
P-153391
pekfos
» 2016-11-05 18:48:28
wydaje mi się, że znam go całkiem nieźle.
To nic nie znaczy. Możesz sobie programować od N lat i całkiem nieźle znać język - czemu po prostu nie wykorzystasz tej wiedzy? Doświadczenie powinno ci sugerować, jak to wszystko wykonać. Ale oczywiście łatwiej pytać niż myśleć samemu. Jak tu:
Na to też niby mam pomysł, ale wolę najpierw przeczytać jakąś radę.
Najpierw przeczytać radę, a potem co, tak dokładniej..? Jak bardzo byś nie kręcił, w twoim temacie (poza jednym fragmentem) są tylko pomysły i pytania, jak to zrobić.
Moim celem jest stworzenie gry jak najbardziej elastycznej, możliwej do zaprogramowania od strony użytkownika pod każdym kątem i w niemalże dowolny sposób.
Brzmi jak silnik gry, doskonale się składa, chyba jeszcze wczoraj był bardzo podobny temat. Również same pytania 'jak zrobić to i to'.
"silnik" kalkulatora ;)
Polecam przejrzeć, zanim odpowiesz w przewidywalny sposób.

gdy pojawi się na przykład "set int zmienna;", to zaalokuje blok pamięci o rozmiarze sizeof(int), wskaźnik na ten blok pamięci będzie przechowywał w <int*>vectorze i dodatkowo nazwę zmiennej będzie przechowywał w <string>vectorze pod tym samym indeksem co int. Nie wiem czy takie rozwiązanie jest najlepsze
To jest ten jeden, wyjątkowy fragment, w którym dajesz coś od siebie, więc dostaniesz na to normalną odpowiedź:
Przede wszystkim: jaki jest kontekst tego? Chcesz mieć wiele różnych typów zmiennych, jak mniemam? Na N typów zmiennych chcesz użyć N+1 wektorów? To jest jeden z tych momentów, przez które można mocno wątpić w twoją znajomość C++, bo to typowe rozwiązanie stosowane przez początkujących, którzy nie słyszeli jeszcze o strukturach.
Nazwa i dane powinny być w jednym kontenerze, a skoro chcesz wyszukiwać po nazwie, tym kontenerem powinna być mapa, a nie wektor. Dostajesz wtedy std::map<Nazwa, Dane>, gdzie dane to struktura/klasa obsługująca różne typy zmiennych. Typowo coś takiego zawiera informację o typie zmiennej oraz jakiś sposób na przechowywanie danych w tych typach.
P-153396
1aam2am1
» 2016-11-05 19:40:02
Na twoim miejscu zaimplementowal bym język lua jest dużo poradników i dozo skryptów też się w nim pisze. Kiedyś robiłem coś podobnego i nawet dobrze wyszło.
P-153398
« 1 »
  Strona 1 z 1