2008-08-16

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
  ];
Wzięty z mojego kodu. Ten kawałek kodu to zasada na symbole (czyli wg. mojej skromnej wiedzy nazwy deklarowane przez nas). Dopuszczamy takie symbole jak w c++. Pierwszy znak to litera (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):

[19:38] <Anonymous Anonimowy>

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