Parsowanie i skrypty
Implementacja Data-Driven ciąg dalszy ;)
Niezastąpiony framework do robienia parserów: Boost Spirit. Jak wiele innych bibliotek Boosta całość znajduje się w nagłówkach, więc nie ma potrzeby linkowania dodatkowych bibliotek. W skrócie umożliwia on definiowanie gramatyki języka bezpośrednio w kodzie c++. Prosty przykład:
rule<> keywords = str_p("class")
| "variant"
| "scene"
| "bool"
| "float"
| "int"
| "str";
rule<> symbol = lexeme_d
[
((alpha_p | '_')
>> *(alnum_p | '_'))
-keywords
];
alpha_p
) lub (|
) dolny myślnik. Kolejnych (>>
) znaków może być 0 albo więcej (*
) i mogą one być literą lub cyfrą (alnum_p
) lub dolnym myślnikiem. Nie może również konfliktować z słowami kluczowymi, więc na końcu od możliwego wyniku odejmujemy keywords
.Kolejną biblioteką Boosta jaką wykorzystałem jest Boost Iostreams, również w nagłówku. Umożliwia ona proste tworzenie własnych strumieni. Ja wykorzystałem ją do zrobienia strumienia czerpiącego z PhysicsFS. Przykładowy kod, który znalazłem.
Generalnie przekonałem się również (wreszcie?) do używania std::stringa, zamiast standardowego const char*, m.in. ze względu na jego automatyczne współdzielenie referencji, prostotę i co było dla mnie najważniejsze - unordered_map tworzy hashe z niego automatycznie.
Aktualnie zastanawiam się nad wyborem języka skryptowego. Od początku myślałem o Pythonie, ale po przeczytaniu tej, choć już starej, opinii zacząłem się zastanawiać, czy ten wybór będzie dobry. Poszukam jeszcze wbudowanych szybkich kompilatorów C (jak polecono w przytoczonym linku) i podejmę decyzję. Tworzenie własnego języka skryptowego nie wchodzi w grę :P
Dodatkowe linki na ten temat
1 komentarz(y):
Daj spokoj - nie opieraj sie na opinii wydanej ponad 8 lat temu!
Problem jest prosty - jesli stac Cie na stworzenie wlasnego jezyka skryptowego to zrob to. Jesli nie to przerzuc koszty wyboru Pythona na uzytkownikow :)
Prześlij komentarz
« Główna