Zna ktoś komponent który po uruchomieniu programu kompliluje to co jest w edicie np? Czyli tak jak w temacie.

- Rejestracja:prawie 19 lat
- Ostatnio:prawie 17 lat
Jest cos takiego. Nie wiem czy płatne. Było kiedyś na jednej ze stron o delphi (delphi bajo chyba). Teraz ta strona juz nie istnieje. Pamiętam, że był to zestaw komponentów docelowo do obsługi skryptów w języku pascal w aplikacjach napisanych w Delphi.
Alternatywnie mozesz pokombinowac ze skryptami LUA (skladnia podobna do pascala, tylkoze musisz napisac sobie funkcje i procedury ;p).
Przykład wykorzystania (niestety w C++) :
http://opentibia.svn.sourceforge.net/viewvc/opentibia/otserv/trunk/?sortby=date#dirlist

- Rejestracja:około 19 lat
- Ostatnio:ponad 15 lat
- Postów:507
Od razu mówię że nie sprawdzałem tego w działaniu. Ale założenia się zgadzają:
http://www.remobjects.com/page.asp?id={9A30A672-62C8-4131-BA89-EEBBE7E302E6}
Ps. Czyli już przynajmniej dwa takie komponenty... Bo tego o którym wspomniałem wcześniej znaleźć nie mogę...

- Rejestracja:około 21 lat
- Ostatnio:około 14 lat
- Rejestracja:prawie 19 lat
- Ostatnio:około 17 lat
WIktorDelphi napisał(a)
Jest cos takiego. Nie wiem czy płatne. Było kiedyś na jednej ze stron o delphi (delphi bajo chyba). Teraz ta strona juz nie istnieje. Pamiętam, że był to zestaw komponentów docelowo do obsługi skryptów w języku pascal w aplikacjach napisanych w Delphi.
Również byłbym szczęśliwy, gdyby ktoś pomógł mi (nam) to znaleźć.
Edycja:
Nie zauważyłem drugiej strony, dzięki wielkie. :)
- Rejestracja:ponad 19 lat
- Ostatnio:ponad 15 lat
Inno Pascal chyba inno source maker omg
np. przycisk kompiluj ale kompilacji nie bedzie
if pos('showmessage(',lowercase(edit1.text))>0 then if
if pos(');',lowercase(edit1.text)) >0 then
showmessage(get_text_between('(',')',edit1.text);
function get_text_between(b1, b2, original_str : string) : string;
var
i : integer;
lol : string;
begin
result := '';
lol := lowercase(original_str);
b1 := lowercase(b1);
b2 := lowercase(b2);
if not pos(b1,lol) > 0 then exit;
if not pos(b2,lol) > 0 then exit;
delete(original_str,1,pos(b1,lol)+length(b1)-1);
delete(lol,1,pos(b1,lol)+length(b1)-1);
delete(original_str,pos(b2,lol),length(original_str));
result := original_str;
end;
///a tak na serio zoboczyliscie z tematu
teraz coś na temat parserów dla istniejących już języków
jak mamy juz dorobionie tworzenie zmiennych itp. możemy wziąć się za parsowanie kodu np. Delphi (bierzmy i parsujemy funkcje) poźniej dajemi if pos(nazwa funkcji) >0 wtedy (pobieramy zmiene sprawdzamy do czego sie odwoluja) nazwafunkcji(i zmienne), tak to wyglada jak chcemy w pelni miec dzialajacy kod z obsluga wszystkich procedur (ale i tak pewnie wszystkiego tak sie nie da przeleciec)

- Rejestracja:około 19 lat
- Ostatnio:ponad 9 lat
- Postów:892
Kolega chciał chyba powiedzieć coś na temat pisania własnego parsera, ale chyba kilka piw za dużo wypił. Szczególnie poniższy fragment mi się spodobał:
np. przycisk kompiluj ale kompilacji nie bedzie
Nie wiem, co chciał powiedzieć przez:
dorobionie tworzenie zmiennych itp.
, ale może napiszę jak ja parser zrobiłem:
- wstępny podział na podstawie znaków końca instrukcji i słów kluczowych.
- zamiana kodu na strukturę drzewiastą, żeby było wiadomo, który blok jest w którym, jakie są zasięgi itp
- dokładna tokenizacja wszystkich instrukcji po kolei
- zamiana wyrażeń na ONP - w tym momencie wywołania funkcji, procedur i zwracanie wyników przez w/w zrobi się niejako przy okazji ;)
3a. wstępna optymalizacja, bo ONP to generuje tyle operacji na stosie, że przynajmniej 3/4 można odpowiednio zwinąć - zamiana drzewa na strukturę liniową, a więc odpowiednie rozpisanie pętli, ifów itd na instrukcje skoków
- i zamiana całego tego cholerstwa na bytecode
Kolejność niektórych punktów dowolna. Mi pierwsze 3 punkty dla języka C++ rozwinęły się w 2000 linii kodu, więc pisania parsera realnego języka nie polecam. Zresztą to jest śmiech: Pascal, to nie jakiś tam sobie proceduralny język skryptowy. Albo skorzystasz z zewnętrznego kompilatora (albo ewentualnie z gotowego komponentu) albo masz kilka lat z życiorysu, żeby to samodzielnie zrobić.