DSLExecutor

 

DSLExecutor to narzędzie wykonujące instrukcje zapisane w językach DSL. Powstało w ramach konkursu Daj Się Poznać 2016.

Założenia
  1. DSLExecutor przeznaczony jest bardziej do języków imperatywnych (jak JavaScript, C#), niż deklaratywnych (jak HTML).
  2. DSLExecutor nie jest samodzielnym programem, a dllką (dostępną przez NuGet).
  3. Składnia wykonywanego języka nie jest z góry znana. Oznacza to, że użytkownik musi dostarczyć jej parser.
  4. Parser musi parsować język do z góry narzuconej struktury, zrozumiałej dla narzędzia. Struktura taka zawiera opis operacji (i ich argumentów), które będą wykonane przez DSLExecutor.
  5. Zestaw dostępnych operacji – biblioteka standardowa – również jest dostarczony z zewnątrz.
    • Jako że to Użytkownik decyduje, co ostatecznie może “zrobić” jego DSL, narzędzie samo z siebie nie ma wpływu na bezpieczeństwo jego produktu.
  6. DSLExecutor, na podstawie sparsowanego kodu DSL i biblioteki standardowej, wykonuje zadane operacje i zwraca ich wynik.
Przykład działania

Poniższy przykład powinien dobrze zobrazować przypadek użycia DSLExecutora:

  1. Chcesz stworzyć aplikację konsolową, która będzie pobierać od Użytkownika zapis operacji matematycznej, wykonywać tę operację i wyświetlać jej wynik.
  2. Implementujesz:
    1. Szkielet aplikacji (pobieranie danych od użytkownika itp.).
    2. Parser odwrotnej notacji polskiej (możliwe, że w przyszłości DSLExecutor będzie ją wspierał out of the box).
    3. Funkcje biblioteki standardowej, np. operacje dodawania i odejmowania.
  3. Działanie aplikacji jest następujące:
    1. Użytkownik podaje zapis operacji matematycznej, np:
      1 2 + 3 -
    2. Zapis przekazywany jest do parsera i DSLExecutora.
    3. DSLExecutor wykonuje odpowiednie funkcje biblioteki standardowej, tj. dodawanie i odejmowanie (wynik dodawania staje się pierwszym argumentem odejmowania), i zwraca ich ostateczny wynik.

Jak widać, DSLExecutor ma zastosowanie wszędzie tam, gdzie do systemu trafiają operacje zapisane w formie tekstowej.

Linki