C-Objective |
» 2014-12-29 20:02:28 Napisz coś prostrzego. Zrobiłem coś w rodzaju total commandera w konsoli. manadżer plików itd. Jednak lepiej zabierz się za coś prostrzego; Wpisujesz np. Najpierw out [enter] a potem wszystko do funkcji (co wypisać...). Takie prostoty. Potem normalny interpreter a potem kompilator! |
|
DejaVu |
» 2014-12-30 01:25:43 @up: on nie musi pisać niczego prostszego, bo potrafi programować. @RazzorFlame: na dobry początek możesz wczytywać zmienne do std::map. Poza tym powinieneś na dobry początek zrobić stos: struct TwojStos { std::map < std::string, std::string > zmienneLokalne; };
std::vector < TwojStos > stos;
bool odczytajWartoscZmiennej( const std::string & _nazwa, std::string & _outWartosc ) { for( int i = stos.size(); i >= 0; --i ) { auto itFound = stos[ i ].find( _nazwa ); if( itFound == stos[ i ].end() ) continue; _outWartosc = itFound->second; return true; } return false; }
Jak już poprawnie zaimplementujesz stos to potem możesz zastanawiać się jak go zoptymalizować. /edit: Dodam jeszcze, że jeżeli koniecznie chcesz się zorientować jak wydajnie organizować dane to polecam Ci poczytać najpierw o assemblerze i zorientować się jak są de-facto zorganizowane dane w pamięci. Choć prawdę mówiąc... na Twoim miejscu na chwilę obecną skupiłbym się na tym, aby Twój język zaczął działać, a nie na tym, aby był on wydajny, bo to tylko komplikuje projekt, a i tak ma małe szanse na ukończenie go do postaci użytecznej dla innych użytkowników :) |
|
RazzorFlame Temat założony przez niniejszego użytkownika |
» 2014-12-30 12:59:16 Dzięki DejaVu! Wczoraj sobie wszystko rozpisałem i doszedłem do wniosku, że wykonywanie skryptu powinno w C++ wyglądać jakoś tak: int main() { KlasaZmiennejParsera arg1, arg2, arg3, returnValue; Parser parser; Skrypt script( "script.txt" ); returnValue = parser.parseScript( & script, "entrypoint_function", 3, & arg1, & arg2, & arg3 ); return 0; }
Chodzi o to, że parser będzie wykonywał funkcje o nazwie entrypoint czy jak to tam nazwiemy i po wykonaniu skryptu będziemy mieli dostęp tylko do argumentów. Bloki kodu zawarte w { i } po wyjściu z niego będą po prostu usuwane wraz z jego zmiennymi. Zrobiłem to jakoś tak: class CodeScope { public: vector < KlasaZmiennejParsera > m_zmienne; CodeScope * m_child, * m_parent; };
CodeScope scriptCodeScope; scriptCodeScope.m_parent = NULL; scriptCodeScope.m_child = NULL; CodeScope * actualScope = & scriptCodeScope;
if( token == "{" ) { actualScope->m_child = new CodeScope; actualScope = actualScope->m_child; } else if( token == "}" ) { if( actualScope->m_parent ) { actualScope = actualScope->m_parent; delete actualScope->m_child; } else { actualScope = NULL; } }
Jak na razie mój parser potrafi sparsować takie coś: function main (var arg1, var arg2, var arg3) { write_text("Przykladowy tekst \n A to tekst w nastepnej linii i \"przykladowy napis miedzy cudzyslowem\""); arg1 = "Argument nr 1"; arg2 = "Argument nr 2"; arg3 = "Argument nr 3"; }
Najbardziej cieszy mnie fakt, że składnia jest dość elastyczna, nie trzeba np. po main od razu dawać (), można nawiasy dać nawet w następnej linii, mozna tworzyc nowe bloki kodu. Czy to jest dobre podejście?Źle mnie zrozumiałeś DejaVu. Tworze ten parser do silnika, którego pisze w DirectX11. Pomyślałem, że przydadzą się skrypty. Mówiąc o zwykłym użytkowniku chodziło mi raczej o to jak ma wyglądać wykonywanie skryptu z poziomu kodu kogoś kto nie ma źródeł mojego parsera. Odpowiedź znalazłem taką jak podałem powyżej. |
|
1aam2am1 |
» 2014-12-30 23:58:32 Jak skończysz wstawisz gdzieś, kod? Dla przyszłych pokoleń.
Wie ktoś może jak dodać język lua do swojego programu jako język rozszerzający funkcjonalność już napisanej aplikacji.
Jak najlepiej zrobić własmy interpretator poleceń (prosta konsola) (switch case czy coś innego). |
|
RazzorFlame Temat założony przez niniejszego użytkownika |
» 2014-12-31 13:57:22 Jak chcesz się dowiedzieć o tym LUA to załóż nowy temat, może ktoś Ci odpowie. Wątpie czy wstawie kod. Na internecie możesz znaleźć wiele języków skryptowych z otwartym źródłem a poza tym mój kod zapewne będzie bardzo mało zoptymalizowany. |
|
Kaikso |
» 2014-12-31 15:40:53 Może zobacz jak to się w praktyce robi w jakiś program interpretujący skrypty z otwartym kodem źródłowym jak bash czy python. |
|
1aam2am1 |
» 2014-12-31 22:47:33 @up podąża stronę na której mógłbym to znaleźć.
Nie orjentuje sie na github.com |
|
Kaikso |
» 2014-12-31 23:53:14 Myślę że po przeanalizowaniu części kodu takich programów zdobędziesz praktyczne podstawy do napisania własnego. A więc życzę powodzenia, a tu masz to co znalazłem ;) @Do użytkowników C++0x szczęśliwego nowego roku!!! :D |
|
1 « 2 » |