DSLExecutor to narzędzie wykonujące instrukcje zapisane w językach DSL. Powstało w ramach konkursu Daj Się Poznać 2016.
Założenia
- DSLExecutor przeznaczony jest bardziej do języków imperatywnych (jak JavaScript, C#), niż deklaratywnych (jak HTML).
- DSLExecutor nie jest samodzielnym programem, a dllką (dostępną przez NuGet).
- Składnia wykonywanego języka nie jest z góry znana. Oznacza to, że użytkownik musi dostarczyć jej parser.
- 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.
- 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.
- 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:
- Chcesz stworzyć aplikację konsolową, która będzie pobierać od Użytkownika zapis operacji matematycznej, wykonywać tę operację i wyświetlać jej wynik.
- Chcesz wykorzystać DSLExecutor.
- Użytkownik będzie podawał operacje w odwrotnej notacji polskiej.
- Implementujesz:
- Szkielet aplikacji (pobieranie danych od użytkownika itp.).
- Parser odwrotnej notacji polskiej (możliwe, że w przyszłości DSLExecutor będzie ją wspierał out of the box).
- Funkcje biblioteki standardowej, np. operacje dodawania i odejmowania.
- Działanie aplikacji jest następujące:
- Użytkownik podaje zapis operacji matematycznej, np:
1 2 + 3 -
- Zapis przekazywany jest do parsera i DSLExecutora.
- DSLExecutor wykonuje odpowiednie funkcje biblioteki standardowej, tj. dodawanie i odejmowanie (wynik dodawania staje się pierwszym argumentem odejmowania), i zwraca ich ostateczny wynik.
- Użytkownik podaje zapis operacji matematycznej, np:
Jak widać, DSLExecutor ma zastosowanie wszędzie tam, gdzie do systemu trafiają operacje zapisane w formie tekstowej.