Jump to content

Archived

This topic is now archived and is closed to further replies.

Force

Force Script

Recommended Posts

Po ciężkiej batalii z C++ udało mi się napisać pierwszy program, i nawet drugi też, choć zajęło mi to miesiąc. Wymyśliłem własny język skryptowy mający składnię podobną do Assemblera o niezbyt wymyślnej nazwie - Force Script. Jest to język który jest kompilowany do pliku dającego się interpretować przez specjalny program. Umożliwia on deklarowanie zmiennych 4 rodzajów: napis, liczba, tablica liczb, oraz dwuwymiarowa tablica, wykonuje najbardziej używane działania matematyczne, instrukcje skoków oraz posiada własny stos.

Język powstał aby nie musieć kompilować od nowa programów, ale modyfikować tylko skrypty, które bardzo łatwo się podpina do programów i ich zmiennych. Na razie jest tylko wersja dla konsoli, ale już mam pomysł na program, który też będzie go wykorzystywał.

W pakiecie są 3 programy: kompilator, środowisko programistyczne korzystające z tego kompilator, oraz program interpretujący skrypt przeznaczone do konsoli.

 

Zachęcam do ściągnięcia, przetestowania czy aby na pewno działa tak jak powinien.

Stąd link można ściągnąć cały pakiet wraz z przykładowymi skryptami i tabelą zawierającą spis i opis komend.

Kurs oraz więcej informacji można znaleźć na stronie http://fp.cba.pl.

Share this post


Link to post
Share on other sites

link działa, czasami tylko coś się psuje jak jakiś błąd robi się gdy łączy się z bazą sql, ale też nie aż tak często.

Proponuje wkleić

http://fp.cba.pl/downloads.php?cat_id=2&download_id=3

do przeglądarki, wtedy działa na 99%.

To że link nie działa to chyba wina tego że cba blokuje hotlinkowanie i tak uznaje działanie linka, bo wklejenia linku, lub z mojej strony działa.

Share this post


Link to post
Share on other sites

Nic mi nie działa, a jak próbuje usunąć folder to wyskakuje błąd (mimo iż ze środka wszystko pokasowałem). Pod jakim OS to pisałeś?

Share this post


Link to post
Share on other sites

chmy, nie działa, to dziwne, może opisz co robisz przed tym jak nie działa, w edytorze nie można nic kliknąć póki się nie otworzy jakiegoś skryptu, lub nie zrobi się nowego. To pierwsza rada, a druga jest taka, że fsconsole.exe uruchamia się na pliku już skompilowanym czyli fsc, a nie fsct. A kompilatora nie ma po co włączać, bo jak naciśniesz F9 w edytorze to on włącza kompilator z odpowiednimi parametrami. A co do systemu to windows xp.

Popełniłem błąd nie dodając pliku, zawierającego informacje co i jak, będę musiał jednak taki zrobić, bo rzeczywiście nie pomyślałem, że ja wiem jak obsługiwać program to nie każdy musi umieć, jednak myślałem, że nie wielka ilość przycisków pomoże.

Share this post


Link to post
Share on other sites

Jak uruchomić jakikolwiek program z folderu z przykładami bo ja robie tak:

Otwieram plik ".fsct" w "ScriptEditor" wciskam strzałkę czy coś w tym stylu ;) i nie działa

Share this post


Link to post
Share on other sites

Otwieram edytor, wczytuje jakiś skrypt z przykładów klikam "Kompiluj" czy coś iii... się nic nie dzieje. A jak chcę usunąć folder to wyskakuje błąd, że nie można usunąć bo jest aktualnie używany :)

Share this post


Link to post
Share on other sites

No cóż, funkcjonalnością edytor jeszcze nie dorównuje Borlandowi, może kiedyś, on kompiluje skrypt, ale go nie uruchamia, bo ta wersja środowiska tego nie umie, ale jest taki plan, powstaje plik z rozszerzeniem fsc, który jest tam gdzie był plik fsct (oczywiście jeśli powiodła się kompilacja - informacja u dołu ekranu). Wynika to stąd, że skrypty mają działać także np. w programach a tam przerwania mogą robić co innego i co innego żądać. Aby go uruchomić należy np. najechać plik fsc na fsconsole.exe, albo włączyć fsconsole.exe z ścieżką do tego pliku jako parametr.

 

// "No cóż, funkcjonalnością edytor jeszcze nie dorównuje Borlandowi" - :D - Iskar

Share this post


Link to post
Share on other sites

Zanim sie pokaze exeka szerszemu gronu warto sprawdzic czy ktos poza autorem potrafi to obsluzyc :) w 95% moich programów tak nie jest dlatego pokazuje swiatu tylko 0,1% moich prac ;) Tez sie nad tym zastanow :)

Share this post


Link to post
Share on other sites

No wiem, akurat to był ten, który uważałem za łatwiejszy w obsłudze. Jakbym wszystkie 3 pliki zrobił jako jeden program to pewnie by nie było tyle problemów co klikać. Chciałem w tej wersji udostępnić to co w końcu będzie w kolejnej, ale c++ ze mną nie chciał współpracować, więc może do kolejnej już mu się zachce.

Share this post


Link to post
Share on other sites

dobra kompiluje plik

w konsoli uruchamiam fsconsole.exe w parametrze podaje nazwę pliku dodawanie.fsc

naciskam enter

i ciemność widzę

Share this post


Link to post
Share on other sites
dobra kompiluje plik

w konsoli uruchamiam fsconsole.exe w parametrze podaje nazwę pliku dodawanie.fsc

naciskam enter

i ciemność widzę

Ja mam lepiej udało mi sie uruchomić "NWD.fsc" po za nim nic B)

 

Przy okazji ten program jest na jakiej licencji ;)

Share this post


Link to post
Share on other sites

dodawanie.fsct (po skompilowaniu fsc) to jest akurat najbanalniejszy skrypt, pokazujący, że polecenia ADD naprawdę coś robi (tak jak z resztą inne polecenia). Próbowałem skrypty robić w jakiejś kolejności logicznej, można powiedzieć, że na początku umiemy tylko dodawać, ale nie wiemy co to zmienna, a jak nie wiemy jak jak zrobić zmienną typu str, to trudno jakiś napis wyświetlić. W tym skrypcie po prostu wpisujesz liczbę, enter, wpisujesz liczbę, enter, masz wynik. Wszystkie powinny działać skoro się kompilują bez błędu, najlepiej przenieść fsconsole.exe do folderu Example i skompilowane skrypty na niego przenosić to naprawdę sie okaże że działa. A program jest w skrócie na takiej licencji:

a) Jak masz na własnej stronie (haha) to miłby było jakbyś napisał autora i podał link do mojej strony.

B) Nie sprzedawaj programu ani skryptów, chyba że mnie spytasz.

c) Nie dawaj programy do gazety, wole osobiście.. taa.

 

I także przeglądajcie pliki fsct, w komentarzach (komentarz jest od średnika) jest omówione co się stanie po komendzie jakiejś. I na mojej stronie jest coś co miało przypominać kurs, ale składnia język jest zbyt mała zagmatwana, aby zrobiło się materiał na książkę (raczej na "Force Script Leksykon kieszonkowy").

 

i to B) to miało być b z nawiasem, że niby kolejny podpunkt.

Share this post


Link to post
Share on other sites

Czy to język JIT x86? (tz. czy skrypt kompiluje się od razu do kodu maszynowego)

Share this post


Link to post
Share on other sites

Nie, jest to język skryptowy, z resztą sama nazwa "Force Script" sugeruje, że nie jest to kod maszynowy. Z resztą nie zależało mi aby mieć własny język programowania, ale takie co nie będę musiał przekompilowywać od nowego programu, tylko skryptu w jakimś edytorze robić i dawać aby je wykonał. Kompilator zamienia plik fsct na postać co do której wiadomo, że nie ma błędów i którą się już banalnie interpretuje.

Share this post


Link to post
Share on other sites

Interpretacja pochłania sporo czasu, a rozwiązania JIT są powszechnie stosowane w skryptach (LUA, BeroScript, Java, PaxCompiler). Jak nie dajesz źródła tego projektu czy użytecznej dll'ki to moim zdaniem niepotrzebnie pokazujesz to światu. Zawracanie głowy. Tak pomyślałem skoro składnię ma podobną do asm to może kompiluje go do IA-32. Bo przecież zamiast sprowadzać to do własnego byte code warto użyć najszybszego byte code. Ale nie wtrącam się. Twoja sprawa.

 

Wielu programistów napisało dużo bardziej zaawansowane języki i są prawie na licencjach Public Domain :P + pełne źródła (Pascal Script i wspomniany LUA oraz BeroScript).

Share this post


Link to post
Share on other sites

Zdaję sobie sprawę z wad mego języka, ale nie zamierzam robić w nim apletów. Ma to być coś w stylu:

Gracz x wypił fiolkę y. No i taki skrypt ma opisywać co fiolka na nim robi, nie będą to przecież zawiłe skomplikowane obliczenia, tak z 10 linijek kodu, ale dzięki temu nie trzeba co chwile kompilować programu aby dodać coś nowego. Inny użycie to np. wykonywania masę razy tego samego działania, załóżmy że mamy tabelę i chcemy do niej zrobić analizę, to zamiast pisać non-stop procedury, trzeba takie skrypty (najlepiej to zrobić program, który reprezentuje to w postaci jakiś bloków jak ELI), a program ma tylko narysować oś X, oś Y, i słupki. A co do dll-ki to chce aby taki był końcowy efekt, ale to mój pierwszy program w c++ to może drugi będzie z dllk-ą, ale chciałem to zrobić tak, że się dziedziczy klasę interpretera i pisze swoje dwie funkcje (tak jest z tą wersją konsolową).

Share this post


Link to post
Share on other sites

krecisz swiatem, z jednej strony nie chesz programu ktory musisz przekompilowac ale dajesz jakas maszyne wirtualna w ktorej cos tam mozna wykonac ale to cos i tak musi byc skapilowane. czym wiec rozni sie twoj skrypt (poza prostota) od dowolnego innego jezyka programowania ? Co wnosi, co powoduje ze jest on uzyteczny ? dlaczego warto na niego zwrocic uwage ?

Share this post


Link to post
Share on other sites

Skoro i tak skrypt musi być kompilowany do kodu pośredniego, to nie ma problemu, żeby to był kod maszynowy ;) Co prawda przenośność w tym wypadku jest kiepska, ale zawsze możesz zrobić 2 wersje - JIT i interpretacje.

Dynamiczne załadowanie takiego skryptu w działającym już programie nie jest problemem: ładujesz kod do tablicy i rzutujesz ją na funkcję. O ile pamiętam tak to szło (piszę z lekcji inf, to nie mam swoich źródeł):

char *tab = new char[4096];
/* tu wprowadzenie opcodów do tXXH
Y

J
HH
Y

J
JHX][YHHFW\"gVćś6ŚG\"wśććRśGP

Jak nie działa, to mnie poprawcie.

 

PS: Oczywiście gratuluję interpretera :)

 

EDIT: Już w domku sprawdziłem i dobry kod dałem.

Share this post


Link to post
Share on other sites

Ten interpreter konsolowy, nie stworzyłem po to aby robić skrypt na konsole, bo to żadna przyjemność, służył do testowania czy interpreter dobrze działa, bo nie lubię c++ i mu nie ufam (i mam powody). Został napisany po to, aby móc pisać średniej długości skrypty do innych programów. Ponieważ większość czynności jakie można robić z rzeczami nie jest skomplikowana, na krześle można siąść, drzewo się buja na wietrze, a ucięcie głowy zazwyczaj zabija. I po to został stworzony, można też napisać jakieś AI, ale najlepiej dla czegoś turowego. A kod maszynowy nie jest, bo nie wiem jak to zrobić.

Tego kodu co napisał Bluebat do końca nie rozumiem (jak dobrać się do zmiennych programu nei rozumiem, no i pomijając fakt, że ma być kod maszynowy. Na razie jest tak że dziedziczy się interpreter i pisze funkcję, która jest wywoływana przez INT, oraz opcjonalnie funkcję do obsługi błędów (np dzielenie przez 0).

Share this post


Link to post
Share on other sites

×
×
  • Create New...