Tak jak zapowiadałem, jako że “środowisko uruchomieniowe” DSLExecutora (wykonywanie wyrażeń) jest już zaimplementowane, od dziś skupiam się na funkcjonalności będącej bliżej użytkownika końcowego. Mowa o parsowaniu kodu DSL podanego przez użytkownika do postaci gotowej do wykonania. Na początek zdefiniuję najprostszy DSL i stworzę jego parser. Do dzieła!
Category: DSLExecutor
Wykonywanie wyrażeń: funkcje (cz. 2)
Uff, po przerwie przeznaczonej na święta, załatwianie zaległych spraw i witanie wiosny, czas wrócić do blogowania. Przerwa wypadła w mało fortunnym momencie, bo w połowie opisu wykonywania wyrażeń reprezentujących funkcje. W związku z tym, dla lepszego zrozumienia dzisiejszego posta, polecam zajrzenie do jego pierwszej części. Po tej lekturze zapraszam dalej.
Wykonywanie wyrażeń: funkcje (cz. 1)
Czas rozprawić się z wykonywaniem wyrażeń reprezentujących wywołania funkcji, a zarazem zamknąć minicykl postów o wykonywaniu wyrażeń (poprzednie części: wartości stałe, zbiory wyrażeń). Tym samym rdzeń DSLExecutora zostanie ukończony i będę mógł przejść do implementacji funkcjonalności będących bliżej użytkownika. Ale skupmy się na wywoływaniu funkcji. Pracy jest niemało, dlatego opis zostanie rozbity na dwa posty. Do dzieła!
Wykonywanie wyrażeń: zbiory wyrażeń
Po rozgrzewce kontynuuję implementację wykonywania wyrażeń w projekcie DSLExecutor. Dzisiaj przyjrzę się wyrażeniom drugiego (z trzech) typu: BatchExpression (reprezentującego zbiór wyrażeń). A zanim przyjrzę się wyrażeniom, muszę najpierw… przyjrzeć się wyrażeniom.
Wykonywanie wyrażeń: ExpressionExecutor i wartości stałe
Zgodnie z zapowiedzią, dzisiaj wreszcie zajmę się implementacją klas wykonujących wyrażenia. Będzie trochę kodu i trochę rozterek związanych z wydajnością osiąganą kosztem czystości kodu.
Continue reading “Wykonywanie wyrażeń: ExpressionExecutor i wartości stałe”
Obsługa funkcji niezwracających wartości
Dzisiaj, Czytelniku, będziesz mógł wreszcie zasnąć spokojnie – rozładuję napięcie zbudowane w poprzednim poście. O czym zapomnieliśmy ostatnio? Otóż opisując funkcje, milcząco przyjąłem, że każda funkcja zwróci jakąś wartość. A co z funkcjami, które wartości nie zwracają (w C# ich typ zwracany to void)?
Dziedzina DSLExecutora: implementacja
Ok, skoro przedstawiłem już podstawowe zasady dotyczące struktury opisu wykonywanych operacji, mogę zacząć definiować interfejsy i klasy należące do dziedziny DSLExecutora. W poprzednich postach używałem właściwie tylko dwóch pojęć, które mogą trafić do tej dziedziny: wyrażenie i funkcja. Wygląda na to, że to wszystko, czego będę potrzebował do implementacji podstawowego przetwarzania. Zatem:
Dziedzina DSLExecutora: założenia
Jak pisałem wcześniej, tworzone przeze mnie narzędzie będzie przetwarzało wyrażenia i funkcje. Zanim zajmę się szczegółami tego przetwarzania, skupię się na zdefiniowaniu przetwarzanych bytów – wyrażeń i funkcji właśnie. Byty te razem tworzą dziedzinę, w której DSLExecutor będzie się poruszał.
DSLExecutor: schemat działania i harmonogram prac
Dobra, projekt konkursowy czas zacząć. Na początku wypadałoby poglądawo opisać planowane kroki działania DSLExecutora i przedstawić plan pracy nad ich implementacją.
Continue reading “DSLExecutor: schemat działania i harmonogram prac”
Hello again, world! Daj Się Poznać 2016
Witaj po latach, świecie! Dokładniej, po prawie sześciu latach – bo tyle czasu minęło od zakończenia pierwszej edycji konkursu “Daj Się Poznać” i przejścia tego bloga w stan hibernacji. Wiele się przez ten czas zmieniło, zarówno w świecie .NET-owym, jak i moim prywatnym. Ale o tym innym razem – dziś będzie mowa o “Daj Się Poznać” właśnie.