FEli


1. Spis treści

  1. Spis treści
  2. Wstęp
  3. Licencja
  4. Biblioteki
  5. Opis działania
  6. Obsługiwane skróty klawiszowe
  7. Silniki wykonywania
  8. Silniki skryptów
  9. O autorze

2. Wstęp

FEli pozwala na tworzenie programów z wykorzystaniem schematów blokowych. Jest wzorowany na programie Eli, który mimo swojego wieku, ciągle jest wykorzystywany w polskich szkołach.

Główne założenia projektu to:

3. Licencja

FEli jest rozprowadzane na licencji MIT, której treść można znaleźć w pliku License.txt. Licencje wykorzystanych bibliotek można znaleźć w sekcji Biblioteki.

4. Biblioteki

Aplikacja wykorzystuje następujące biblioteki:

5. Opis działania

Ogólne

Aplikacja opiera swoje działanie na projektach, które zawierają plansze, zawierające kod programu, czyli bloki z ewentualnymi skryptami. Każdy projekt może składać się z teoretycznie nieograniczonej ilości plansz. Projektowi przypisuje się tzw. silnik wykonywania oraz silnik skryptów już przy tworzeniu i nie można tego później zmienić z poziomu interfejsu.

Bloki

Głównym elementem każdego programu są bloki, które określają przepływ programu. Ogólnie dostępne bloki to:

Dodatkowo dla każdej kombinacji silnik wykonywania + silnik skryptów można dodawać dodatkowe bloki(i tak np. dla silnika SimpleScriptingEngine dostępne są bloki reprezentujące podstawowe operacje matematyczne).

Każdy projekt musi posiadać dokładnie jeden punkt wejścia, oznaczany blokiem Start oraz dowolną ilość wyjść(blok Finish). By zdefiniować funkcję, należy wykorzystać blok FunctionDefinition. Takiej funkcji można nadać nazwę oraz przyjmowane parametry. Ważne jest, by pamiętać o zakończeniu funkcji blokiem FunctionReturn, nie Finish. Mimo, iż to będzie działać, nie jest uznawane za poprawne. Bloki skryptów i warunków mają składnie zależną od wykorzystywanego silnika skryptów(o czym dalej).

Silniki wykonywania

FEli opiera swoją budowę na dwóch rodzajach silników. Jednymi z nich są silniki wykonywania, które decydują, jak program się będzie zachowywał po napotkaniu danego bloku. Domyślny silnik(DefaultRunner) jest bardzo przewidywalny - wykonuje bloki "jeden po drugim", pozwalając na skoki do funkcji i powroty z nich(imituje w niewielkim stopniu działanie jednordzeniowych procesorów). Oparty na nim jest ConsoleRunner(widoczny jako Konsola), który pozwala na wysyłanie i pobieranie informacji na/z konsolę(aktualnie tylko systemy z rodziny Windows są wspierane).

Silniki skryptów

Jednym z podstawowych założeń aplikacji była obsługa dynamicznie typowanych skryptów. Osiągnięte zostało to przez wykorzystanie typów dynamicznych(dostępnych od C# 4.0) oraz DLR. Każda zmienna może być konwertowana na inny typ, o ile taka konwersja jest możliwa(np. ciąg znaków '123' może bez problemu zostać skonwertowany na wartość liczbową).

Silniki skryptów nie wspierają wywoływania funkcji zdefiniowanych przez użytkownika.

6. Obsługiwane skróty klawiszowe

7. Silniki wykonywania

ConsoleRunner(Konsola)

Imituje działanie procesora(bazuje na DefaultRunner, opisanym wcześniej), oraz udostępnia następujące funkcje:

8. Silniki skryptów

SimpleScriptingEngine(Prosty język skryptów)

Silnik ten nie udostępnia skryptów jako takich, pozwala jedynie na wywoływanie wbudowanych funkcji i operacje na zmiennych(odczyt/zapis). Wszystkie obliczenia odbywają się za pomocą bloków.

Silnik udostępnia następujące funkcje:

CLikeEngine(Dialekt C)

Oparty na Irony, implementuje język skryptowy podobny do języka C. Obsługuje podstawowe operacje matematyczne, operacje na zmiennych i zmiennych tablicowych oraz wywoływanie funkcje wbudowanych. Nie obsługuje operacji binarnych.

Tablicach są wzorowane na tablicach z języka JavaScript(są dynamiczne, oparte na System.Collections.Generic.List).

Tablice tworzy się przez przypisanie do zmiennej wyrażenia [element1, element2, ..., elementN], gdzie element1 itp. to kolejne elementy tablicy.

Odwołanie do elementu odbywa się z wykorzystaniem operatora indeksowania [indeks], gdzie indeks to dynamicznie obliczany indeks elementu. Dodanie nowego elementu do tablicy jest wykonywane poprzez dodanie do nazwy zmiennej operatora indeksowania, BEZ podawania indeksu(np. tablica[]) i przypisanie do tego wyrażenia jakiejś wartości.

Tablice można również wykorzystywać w blokach, zachowując taką samą składnie jak w funkcjach.

Silnik ten wspiera wszystkie funkcje obecne w SimpleScriptingEngine oraz:

Ruby

Bazuje na IronRuby. Nie pozwala na wywoływanie wbudowanych funkcji inaczej niż za pomocą bloku Script. Operacje na zmiennych są dozwolone(ale nie są wspierane zmienne tablicowe inaczej niż z poziomu skryptów).

Dokumentacja IronRuby

9. O autorze

Autorem FEli oraz biblioteki FLib jest Jakub Fijałkowski - uczeń, pasjonat programowania.

Kontakt: