Skocz do zawartości

Force Script Language


Force

Polecane posty

Mam sobie taki oto program:

program Programik;

var
 liczba : integer;

function Silnie(Param : integer):integer;
begin
 writeln('kupa.');
 Result :=Param+1;
end;

begin
 writeln('kupa.');
 readln(liczba);
 liczba := liczba();
 writeln(liczba);
end.

Dostaję taki error:

KOD[8 17] : "There is no overloaded version of "writeln" thet can be called with these arguments in writeln ( 'ku' ) Czyżby nie można było wypisywać niczego w funkcjach?

Ciekawi mnie jeszcze linijka "liczba := liczba();" jako taka. Nie wypluwa błędów, ale nie wypluje ich też jak będzie chociażby "liczba := ((liczba))()()();" też przejdzie, wiem że to już semantyka, ale może lepiej sypać warrningi bo może ktoś coś zjadł. Nie wiem jakie masz założenia :)

 

Ps.

Testowane na wersji najnowszej (w momencie pisania posta)

Pozdrawiam,

vo7 (;

Link do komentarza
Udostępnij na innych stronach

  • Odpowiedzi 80
  • Created
  • Ostatnia odpowiedź

Force ,nie przejmuj sie ..wiem co to FSL ,a takze Jabber ,tylko nie wiedzialem ze to az takie podobne ...

 

 

FSL nie ma typu Real ???Ojć to kiepsko ,moja Argenta ma Stringi ,Reale i Boolean'y (i ich mix ,w koncu podobizna php) ..U mnie nie podaje sie typu zmiennej ,po prostu jest i mozna zmieniać dynamicznie przydzielajac odpowiednie wartości np :

 

 

 

$zmienna1:? ;//Tworzenie zmiennej i przypisanie wartosci początkowej 0 typu Variant ('0' ,0 false);

$zmienna2:="Łańcuch :)" ;//Tworze zmienna i przypisuje wartość stringową

$zmienna2:=1 ;//zmieniam typ na Real-Boolean (1 ,to u mnie true ,a 0 false)

$zmienna2:=567,67888 ; //Zmienna jest typu rzeczywistego

$zmienna2:=false ;//Zmienna ma wartosć 0 ,chociaż wpisałem false

 

endarg?>

 

 

Jak mi sie bedzie chciało to sciagne ...ale teraz czekam na wersje final ...

 

 

PS... Nikt nie skomentuje mojego kodu ??Buuu :(

 

 

 

PS2.Force pytanie ,co mam zrobić żeby po kliknieciu na plik ,ten uruchamiał się w moim edytorze ??Bo teraz jak klikne na skrypt pisany w argencie to właczy sie interpreter ,ale tylko właczy ..co zrobić żeby jeszcze uruchomił on skrypt ???Jakieś zmienne są do tego ,przekazujace parametry uruchomienia ??

Aktualnie piszę 32 bitowy system operacyjny.

ASE2.0 100% ,DME (Dynamic Motion Engine) v2.0 10% ,32 bit PumaOS - 40%

Stick's Adventure 3 - 0%

Komp nr.1 AMD Duron 1,3 Ghz ,256 MB Ram DDR PC133 (na eBoostr mam jeszcze 1 GB) ,Nvidia GeForce FX 5500 256MB DDR

Komp nr.2 (laptop) AMD Athlon XP 2,0 Ghz , 192 MB Ram DDR PC2700 (na eBoostr mam jeszcze 3 GB) , Via S3 Unichrome IGP

Przykład programu w ASE2.0:

<?arg #CreateProcs; $i:?;

#For('$i,10,1,@Lab');@Lab;

#Sleep(100);

#Message("Ten komputer ulegnie autodestrukcji za $i sekund");

#Retf;

#Message('Dead'); arg?>

Link do komentarza
Udostępnij na innych stronach

Dexarz... FSL nie ma Real-a? Mógłbyś chociaż odpalić parser który napisał Force, zanim go skomentujesz.

 

Nikt nie skomentuje Twojego kodu bo nie chodzi o komentowaniu kodu. Chodzi o komentowanie programu który analizuje składnię a potem realizuje jakieś czynności związane z tym co przeanalizował... Pokazałeś parser?

 

Co do ps2: nie szukałeś w google, prawda? http://4programmers.net/Delphi/FAQ/Jak_sko...iem_danego_typu

Pozdrawiam,

vo7 (;

Link do komentarza
Udostępnij na innych stronach

To z tym Writeln to mój błąd. Nie można zagnieżdżać metod w metodzie jeśli chodzi definicje metod, ale zapomniałem, że metoda może wywołac metodę z unit-a to poprawione. Swoją drogą odnośnie typu zmiennych o których później powiem - tak pisałem interpreter, że w sumie można by łatwo zrobić metody anonimowe :D FSL nie ma zmiennych real,planowane są, uznałem, że stworzenie wiele typów zmiennych na początek nie ma sensu jeśli leżeć i kwiczeć będzie reszta, mozliwość rekurencyjnego wywołania metod wydała mi się trudniejsza do implementacji. Metody nie działają tak, że jak wywołuję metodę to kopiuje kod i go wykonuje, kopiuję tylko zmienne,potem muszę zrzucić dane tego co wywołuje na stos, wyjść z egekuzji wrzucić nowe wywołanie metody, gdy ona się wykona ściągnąć ją ze stosu, a następnie przywrócić wykonywanie poprzedniego kodu. Dodanie reala to żaden problem, ale są trudniejsze rzeczy do napisania niż dodatkowy typ zmiennej. Mogłem zrobić, że zmienne mają dowolny typ, ale chciałem mieć zgodność z pascalem, jakby miał jeden typ zmiennej to bym nie musiał wiele rzeczy testować.

Twój kod nie wiem co komentować, jakbyś dał nawet nie parser a opis składni, jedyne co moge powiedzieć, że uzywanie przecinka jako rozdzielnika części całkowitej od ułamkowej to bład. A składnia mało się trzyma php poza brakiem typu zmiennej, a zmienne są od "$", nie mówię, że to źle, ale to jest nadużyciem porównywać do php.

Poprawiony plik z tym writeln jest w tym samym poście, nie chciałem non-stop literek zwiększać dla tak małych zmian, z tymi nawiasami to poprawię, napewno to trzeba zlikwidować, wiem jak, ale to już przy większej zmianie, może jak wskocze na wersję 0.1 bo nie przewiduje wersji między 0.2/3, a 0.1, tak samo aby Writeln itp. mógł przyjmować dowolną ilość parametrów.

Nie mam kojarzenie plików z moim programem, uruchamia się najeżdżają skrypt na program lub z konsoli

Baza tysięcy lotnisk: http://airportsbase.com

Link do komentarza
Udostępnij na innych stronach

stary, nowy by mi nabruździł w kodzie ;) Może kiedyś będzie, ale na razie mam inne rzeczy na głowie, muszę tą modułowość zrobić, a nie exitem się martwić :D Tak samo myślałem, czy continue i break nie mogłyby mieć opcjonalnie parametru, w continue-ile przebiegów pominąć, w break-z ile pętli wyskoczyć

Baza tysięcy lotnisk: http://airportsbase.com

Link do komentarza
Udostępnij na innych stronach

Post pod postem, ale tak to by nikt nie zauważył.

Wyszła właśnie wersja pre alpha wersji 0.1. Cóż to oznacza:

-pliki muszą kończyć się na dpr lub pas.

-Write itp. mogą mieć dowolną ilość parametrów

-modułowość, uses-y, odwoływanie się przez kropkę do innych zmiennych, z innych modułów.

Więcej na blogu, jest tam też nowa wersja, FSL-a. Polecam przejrzeć od nowa wszystkie przykłady, zobaczy się jak działają moduły i write/itp..

Baza tysięcy lotnisk: http://airportsbase.com

Link do komentarza
Udostępnij na innych stronach

Dlaczego kod7.dpr nie wypluwa, że nie może odnaleźć pliku? Unit1 dodany w uses jest w podkatalogu czego interpreter nie wykrywa.

Pobawiłem się trochę i utworzyłem 2 prawie identyczne unity. Dałem takie same funkcje, ale różniące się wynikiem i z moich testów, wykonywane są te funkcje które zostały zaimplementowane wcześniej.

Poza tym podwójna deklaracja funkcji wywala interpreter (av). Nie wiem czy to tak się nazywa, w każdym razie chodzi o coś takiego:

unit unit1;

interface
var
b : integer;
a : INTegER;


function DajCzterdziesci(L : integer):integer;
function DajCzterdziesci(L : integer):integer;
function DajLiczbe(L : integer):integer;

implementation

function DajCzterdziesci(L : integer):integer;
begin
Result := 40;
EnD;

function DajLiczbe(L : integer):integer;
begin
Result := 1;
EnD;
end.

 

Wiem, że to nie są jakieś błędy krytyczne, ale moim zdaniem są to takie rzeczy, którym mimo wszystko wypada się przyjrzeć albo chociaż wiedzieć, że istnieją :)

 

Kiedy będzie można tworzyć własne klasy/struktury? :D

Pozdrawiam,

vo7 (;

Link do komentarza
Udostępnij na innych stronach

To z tym przeładowaniem sprawdzę, unit1.pas jest w dwóch kopiach, ta z katalogu inc nie ma w uses unit2. Wątpię aby kiedyś będzie się dało tworzyć struktury i klasy. Będzie się dało jako parametr przesłać obiekt i odwoływać się do jego pól przez rtti, ale własnych w skrypcie obiektów się nie zrobi.

Edit: Poprawiłem to, oprócz tego usunąłem 3 inne sytuacje gdy kod był niepoprawny i robił AV oraz wykryłem babola, że gdy mamy kod a mod b, to jest on testowany i zazwyczaj b=0 to nie powinien w czasie kompilacji dać błęda z dzieleniem przez 0. Zmodyfikowałem przykłady, nawet skopiowałem funkcę nwd z internetu i się skompilowało bez problemu. Mamy różne wersje metod Min,Max,Fibb,Silnia, które pokazują albo rekurencję albo przekazywanie zmiennych przez out-a. Wszystko w tym samym linku.

Edit2: Udało mi się usunąć leaki i biorąc pod uwagę poprawienie kilkunastu dużych bugów od wczoraj nowa wersja nazywa się już FSL 0.1a, jak wszystko dobrze pójdzie w środę wyjdzie z testów i wtedy pokażę ją na innych forach (nie dawajcie mi bana :) )

Baza tysięcy lotnisk: http://airportsbase.com

Link do komentarza
Udostępnij na innych stronach

FORCE !!! Wot !!! Struktury i klasy muszą być ,wiem ze to nie jest łatwe ,ale mi się udało ...

 

Ja to rozwiązałem tak że stworzyłem w Delphi klasę ,która ma 5 list wskażnikowych (zmienne ,stale ,funkcje , etykiety i struktura) ,które podczas stworzenia obiektu klasy element nie jest dodawany do zmiennych globalnych , a właśnie do tych list ...

 

 

Jednak ja mam nieco inną budowę programu niż ty ...Ty najpierw parsujesz kod ,potem przekształcasz do swój pośredni kod i wykonujesz ..U mni to jest tak ,ze najpierw kod jest przygotowywany (usuwane komentarze ,dzielenie instrukcji w oddzielne linie itd itp ) potem kod pobiera 1 linie i wykonuje potem 2 ,potem 3 ..Czyli u mnie działa to w trybie rzeczywistym , bo kod jest od razu gotowy (po przygotowaniu)

 

 

Proszę cię zrób struktury ,bo nie będę miał konkurencji ...Ja już je mam ...

 

 

 

Aha i zmieniłem zdanie Blind ..Swoją Argente jednak dam na neta jak skończe ją pisać ...Będzie pracowało w WinDosie ,bo dopiero Turbo Argenta ,będzie korzystała z komponentów i form ...

Aktualnie piszę 32 bitowy system operacyjny.

ASE2.0 100% ,DME (Dynamic Motion Engine) v2.0 10% ,32 bit PumaOS - 40%

Stick's Adventure 3 - 0%

Komp nr.1 AMD Duron 1,3 Ghz ,256 MB Ram DDR PC133 (na eBoostr mam jeszcze 1 GB) ,Nvidia GeForce FX 5500 256MB DDR

Komp nr.2 (laptop) AMD Athlon XP 2,0 Ghz , 192 MB Ram DDR PC2700 (na eBoostr mam jeszcze 3 GB) , Via S3 Unichrome IGP

Przykład programu w ASE2.0:

<?arg #CreateProcs; $i:?;

#For('$i,10,1,@Lab');@Lab;

#Sleep(100);

#Message("Ten komputer ulegnie autodestrukcji za $i sekund");

#Retf;

#Message('Dead'); arg?>

Link do komentarza
Udostępnij na innych stronach

Dexarz wypluwasz z siebie belkot niezrozumialy dla innych:

co to znaczy:

stworzenia obiektu klasy element ..... rozrozniasz typ od klasy ?

Czyli u mnie działa to w trybie rzeczywistym - znaczy chodzi ci o real mode ? czy o co ? rzeczywisty bo rzeczywiscie sie dzieje ?

(...) bo kod jest od razu gotowy (po przygotowaniu) - WTF ? skoro jest po przygotowaniu to jest gotowy (chyba). Jak masz kod to jest on chyba gotowy bo napisal go programista...

 

"Proszę cię zrób struktury ,bo nie będę miał konkurencji ...Ja już je mam ... " - egocentryzm fajna rzecz, nie wiedzialem ze twoj jezyk jest tak powszechny ze trzeba mu robic jakas konkurencje aby swiat nie byl na niego skazany....

 

(...)Struktury i klasy muszą być(...) - a niby dlaczego musza byc ? bo wszyscy maja ? bo tak jest trendy ? bo ogorek jest zielony ? Moze najpierw warto dowiedziec sie do czego jest dedykowany FSL a pozniej zastanowic sie jakie elementy jezyka nalezy stworzyc....

Always Dark<br />u1_tt_logo.png banner-1.pngexFabula-banner.pngson_banner_ubersmall.jpg

Link do komentarza
Udostępnij na innych stronach

Zaraz, ogórek jest zielony?

Edit: struktury i klasy nie będą, jak już to jak mówiłem: można przesłać jakąś zmienną TObject, ale z programu, który używa skrypt, a nie zdefiniowaną w skrypcie i ma używać rtti do modyfikowania tego obiektu, uważam to za wystarczające i tak to będzie ostre odstępstwo od tego co jest w FP

Baza tysięcy lotnisk: http://airportsbase.com

Link do komentarza
Udostępnij na innych stronach

Zapomniałem do czego ma służyć FSL. :P No tak, jeśli ma być jedynie dodatkiem do innych programów to chyba masz rację, że wystarczy sama możliwość odwoływania się do obiektów używając rtti. W sumie fajnie by było gdyby w przyszłości była możliwość robienia pełnosprawnych programów przy użyciu samego FSL (np. tak jak w pythonie) :)

 

Na koniec jeszcze Cie zdopinguję do dalszej pracy. Dawaj dawaj! :D

Pozdrawiam,

vo7 (;

Link do komentarza
Udostępnij na innych stronach

Ojć

 

 

Blind - teraz nie ,bo czekam na wersje 0.2 FSL

 

 

TOster - nie chodzi o tryb rzeczywisty ,chodzi oto że kod jest odrazu wywołany bez obróbki na kod pośredni ,tzn ten ko jest już pośredni :D

 

Wiem że nie muszą ,ale przewiduje że w FSL będzie można pisać normalnie programy ...

Przygotowany ,czyli że po procce PrepareUnits kod jest gotowy do wykonania .

Procka PrepareUnits robi porządek w kodzie ,czyli usuwa zbedne rzeczy i dzieli kod na instrukcje ...

 

 

Ale teraz jest mowa o FSL ,więc może przestanę nawijać o Argencie ...

 

Force ,do boju !!

 

 

Blind - to nie jest super hiper język skryptowy ,bo ma swoje wady i sporo ograniczeń ...Ale pod DoSymfoniaB w sam raz ...

Aktualnie piszę 32 bitowy system operacyjny.

ASE2.0 100% ,DME (Dynamic Motion Engine) v2.0 10% ,32 bit PumaOS - 40%

Stick's Adventure 3 - 0%

Komp nr.1 AMD Duron 1,3 Ghz ,256 MB Ram DDR PC133 (na eBoostr mam jeszcze 1 GB) ,Nvidia GeForce FX 5500 256MB DDR

Komp nr.2 (laptop) AMD Athlon XP 2,0 Ghz , 192 MB Ram DDR PC2700 (na eBoostr mam jeszcze 3 GB) , Via S3 Unichrome IGP

Przykład programu w ASE2.0:

<?arg #CreateProcs; $i:?;

#For('$i,10,1,@Lab');@Lab;

#Sleep(100);

#Message("Ten komputer ulegnie autodestrukcji za $i sekund");

#Retf;

#Message('Dead'); arg?>

Link do komentarza
Udostępnij na innych stronach

Dodałem zmienne real, dodatkowo ponieważ kod się rozrasta postanowiłem udostępnić źródło. Liczą na uwagi, komentarze, co można zmienić, usprawnić. Kolejny krok to zrobienie zapisu i odczytu do pliku kodu pośredniego. Tutaj się zastanawiam jakie rozszerzenia powinny mieć pliki kodu programu,modułu i kodu pośredniego programu i modułu (osobne rozszerzenia bo może skojarzę pliki projektu z interpreterem) oraz także powinien być trzeci plik kodu pośredniego, który miałby w sobie zlinkowane plik programu i wszystkie modułu. Jakieś propozycje? :)

FSL

Ponieważ jestem leń to skopiowałem post z bloga :)

Baza tysięcy lotnisk: http://airportsbase.com

Link do komentarza
Udostępnij na innych stronach

1. Wolny Lexer. Daj jakiś hash lub/i shortstringi czy własne stringi string[x] dla słów kluczowych

2. Każda zmienna klasą? Strata pamięci i czasu

 

Takie małe uwagi ;)

soon Delphi will be only for veterans and finally we all will die at the end…

delphi.dathox.com - nowinki z świata Delphi/Pascala

only programmers and drug dealers call their customers "users"

 

Oto cisza przed burzą, Chwile się dłużą.Z gór schodzi dużo chmur ku podnóżom.Ptaki milaczą, drogi suche jak wiór się kurzą, Ptaki milczą a drogi się kurzą.

Link do komentarza
Udostępnij na innych stronach

Ad 2. Wiem, że to nie jest najlepsze, powoli mam w planie połączyć zmienne w jeden blok pamięci, tak żeby TFSLSection miało tablice integerów-ów i stringów, oraz offsety dla każdej zmiennej no i plan jest, że potem przy pobieraniu zmiennej do obliczeń to ona ma tylko offset, a nie nazwę, bo po nazwie to długo będzie szukać. Ogólnie liczyłem właśnie, że ktoś to zrobi, jaki byłby sens pokazywać kod, żeby tylko zjechać? :D

Edit: Co sądzicie, aby integery były też jako reale-e ale przy wczytywaniu wrtości by się pilnowało aby tylko część całkowita przeszła? Choć mam obawy, że real nie wszystkie liczby całkowite posiada skoro cecha ma tylko 11 bitów.

Edit2: I czy mógłby ktoś zobaczyć jak to na Lazarusie idzie? Bo dla mnie Lazarus jest trudny w użytkowaniu :)

Baza tysięcy lotnisk: http://airportsbase.com

Link do komentarza
Udostępnij na innych stronach

Force, napisałem sobie dla testu 2 programy (w C, ale zasada działania zmiennych jest podobna o ile nie taka sama*)

int main()
{
 for(float i=0;i<100000000;++i);
 return 0;
}

Ten ze zwykłym integerem wykonywał się w ułamku sekundy. A ten drugi powyżej 6 sekund (potem zabiłem program bo nie chciało mi się czekać :P)

 

 

*- int i float** to nie są przypadkiem zmienne "wbudowane w komputer" (koprocesor)? :P

** - aktualnie procki nie liczą już na zmiennych o pojedynczej precyzji, wszystko idzie na podwójnej (double)

Pozdrawiam,

vo7 (;

Link do komentarza
Udostępnij na innych stronach

*- int i float** to nie są przypadkiem zmienne "wbudowane" w procesor?

 

Żadny procesor nie ma wbudowanych żadnych zmiennych... ;] wszystko to się rozbija na rejestry, jaka kolwiek operacja na liczbach jest wykonywana wyłącznie przy użyciu rejestrów procesora. Wiadomo też, że rejestry są 8, 16, 32, 64 bitowe... ;] więc zmienna 2 bajtowa jest liczona na rejestrach 16 bitowych... ;], zmienna 4 bajtowa na 32 bitowych rejestrach i tak dalej...

A różnica czasowa jest... zalecam przeczytać budowe float, a integer... ;]

http://pl.wikipedia.org/wiki/Liczba_zmiennoprzecinkowa

http://pl.wikipedia.org/wiki/Liczba_ca%C5%...ta_(typ_danych)

 

obydwie te zmienne choć są 32 bitowe, to różni je budowa i to może być powodem spowolnienia float.

Czas przeliczenia liczby typu zmiennoprzecinkowego... ;]

 

Pozdrawiam

Prawdziwy programista wiesza sie wraz ze swoim programem.

Link do komentarza
Udostępnij na innych stronach

Zarchiwizowany

Ten temat jest archiwizowany i nie można dodawać nowych odpowiedzi.

×
×
  • Utwórz nowe...