Lekki zestaw bibliotek napisany w C++ przeznaczony do współpracy z kontrolerem AVR lub innym dowolnym procesorem.
Biblioteki używają minimalnej ilości wbudowanych funkcji C/C++ i są zaimplementowane z użyciem mechanizmów dostarczanych przez C++11.
KLLibs zawiera kilka głównych modułów takich jak kontenery, czy mechanizmy języka skryptowego. Niektóre komponenty wymagają dołączenia do projektu innych modułów KLLibs.
KLLibs posiada zestaw wbudowanych kontenerów używanych w innych modułach projektu. Kontenery zaprojektowano pod kątem oszczędności pamięci i wydajności obliczeń tak, aby mogły one być wykorzystane nawet na słabych platformach sprzętowych.
Kontener reprezentujący liste obiektów.
- Indeksy tworzone są automatycznie. Indeks to numer elementu licząc od zera od początku listy.
- W przypadku wyboru nieistniejącego obiektu zostanie zwrócona referencja na pusty wskaźnik.
Możliwości:
- Dodawanie obiektów.
- Usuwanie obiektów.
- Iteracja po zakresie.
- Sprawdzenie ilości obiektów.
Kontener reprezentujący mape
- Szablon umożliwiający użycie dowolnych typów.
- W przypadku wyboru nieistniejącego obiektu zostanie zwrócona referencja na pusty wskaźnik.
Możliwości:
- Dodawanie obiektów.
- Usuwanie obiektów.
- Iteracja po zakresie.
- Sprawdzenie ilości obiektów.
- Sprawdzanie dostępności lub użycia klucza.
- Zmiana klucza (
KLMap::Update
).
Kontener reprezentujący łańcuch znaków.
- Przechowywanie łańcuchów znaków i operacje na nich.
Możliwości:
- Dodawanie i usuwanie fraz.
- Wyszukiwanie znaków i fraz.
- Zliczanie fraz i znaków.
- Zamiana fraz.
- Porównywanie łańcuchów.
- Jawne konstruktory konwertujące z typów liczbowych (
double
,int
iconst void*
). - Iteracja po zakresie (nieplanowane).
- Operatory konwersji na typy liczbowe (nieplanowane).
Kontener reprezentujący drzewo obiektów.
- Indeksy tworzone są automatycznie. Indeks to numer elementu licząc od zera od początku drzewa.
- W przypadku wyboru nieistniejącego obiektu zostanie zwrócona referencja na pusty wskaźnik.
Możliwości:
- Dodawanie obiektów.
- Usuwanie obiektów.
- Iteracja po zakresie.
- Sprawdzenie ilości obiektów.
- Przełączanie się pomiędzy gałęziami.
Interpreter skryptów zawiera parser matematyczny i system bindowania zmiennych i funkcji. Cały mechanizm da się uruchomić na platformie 8-bitowej z minimum 18 kB pamięci programu i około 1 kB pamięci RAM (ilość pamięci zależy od przeprowadzanych operacji). Przy wykonywaniu skryptu interpreter nie potrzebuje alokować dużych obszarów pamięci więć zwykle jeśli skrypt zdoła zostać umieszczony w pamięci oraz zostanie zainicjowany interpreter, to skrypt ten zostanie poprawnie wykonany.
Interpreter wyrażeń matematycznych i logicznych.
- Interpretacja wyrażeń matematycznych.
- Interpretacja wyrażeń logicznych.
- Wbudowane funkcje trygonometryczne i matematyczne.
Możliwości:
- Obsługa priorytetu operatorów.
- Obsługa wyrażeń w nawiasach.
- Operacje na liczbach zmiennoprzecinkowych i logicznych.
- Obsługa błędów.
- Obsługa zmiennych.
- Rozszerzalna lista funkcji.
- Instrukcje przypisania.
Prosty interpreter skryptów.
- Zarządzanie zmiennymi.
- Bindowanie zmiennych.
- Bindowanie i wywoływanie funkcji.
Możliwości:
- Obsługa zmiennych.
- Wywoływanie funkcji.
- Konstrukcja
if () ... else ...
. - Konstrukcja
while () ...
. - Dynamiczne definiowanie funkcji
define ... end
.
Przykład:
# definicja własnej funkcji
define funkcja;
pop a; # pobranie pierwszej wartości ze ztosu parametrów
pop b; # pobranie drugiej wartości ze ztosu parametrów
# obliczenie wyniku funkcji
if (a > b); return a;
else; return b; fi;
end;
# utworzenie zmiennej
var Zmienna1, Zmienna2;
# przypisanie wartości
set Zmienna sin( (2+2)*3 + 10 );
# wywołanie własnej funkcji
goto funkcja Zmienna1, Zmienna2;
# pobranie wyniku wywołanej funkcji do zmiennej
var wynik; set wynik $;
# instrukcja if
if Zmienna <> 100 | Zmienna < 50;
# wywołanie funkcji (kolejne parametry po przecinku)
call Funkcja sin(Zmienna), 30, Zmienna*2;
# przypisanie wyniku funkcji do zmiennej
set Zmienna return;
# eksport zmiennej do zmiennych globalnych
export zmienna;
# instrukcja else
else;
var i;
# instrukcja while
while i < 10;
call Procedura Zmienna % i, Zmienna;
set i i+1;
if ! $;
# przerwanie skryptu
exit;
fi;
# zakończenie while
done;
# zakończenie if
fi;
# zapisanie zwróconej wartości
return 0;
Bindy funkcji dostępne z poziomu skryptu.
- Wywoływanie funkcji o stałym prototypie ze skryptu.
- Przekazywanie parametrów i zwracanie wyników za pośrednictwem systemu
KLVariables
.
Moźliwości:
- Bindowanie funkcji.
- Edycja i zarządzanie zmiennymi w funkcji.
- Edycja (usuwanie i aktualizacja) bindów.
- Zwracanie wartości do skryptu (za pomocą listy zmiennych).
System zarządzania zmiennymi w skrypcie.
- Przechowywanie łańcuchów znaków, typów całkowitych i zmiennoprzecinkowych.
- Silne typowanie (typowanie dynamiczne wykonywane ręcznie).
- Zarządzanie pamięcią.
Możliwości:
- Bindowanie lokalnych obiektów.
- Kopiowanie obiektów i zakresów.
- Organizacja wielopoziomowa.
- Rekursywne przeszukiwanie poziomów.
- Informacja o typie.
- Informacja o bindzie.
- Iteracja po zakresie (zgodnie z
KLMap
). - Iteracja po zakresie lub wybór zmiennej bez znajomości jej nazwy.
- Automatyczna kontrola typu przy operacjach wyłuskania.
- Słabe typowanie.
- Dynamiczna zmiana typu.
KLLibs zawiera kilka dodatków do biblioteki Qt ułatwiających edycje kodu skryptu w GUI. Aby zbudować biblioteke z tymi dodatkami należy w argumentach qmake dodać następujący wpis: CONFIG+=addons
. Domyślnie biblioteka budowana jest bez tych dodatków.
Mechanizm podświetlania składni języka KLScript
- do użycia wraz z obiektem
QTextDocument
- podświetlanie składni i elementów języka
Możliwości:
- Edycja styli podświetlania.
Rozszerzenie QPlainTextEdit
umożliwiające podświetlanie składni i numerowanie linii przy edycji kodu KLScript
.
Możliwości:
- Numeracja wierszy.
- Podświetlanie aktywnej linii.
- Automatyczne wyróżnianie składni (
KLHighlighter
). - Zmiana kolorów w widgecie.
Bazujący na QObject
i KLScript
bind ułatwiający współpracę z KLScript
w środowisku QT.
Bazujący na QObject
i KLParser
bind ułatwiający współpracę z KLParser
w środowisku QT.
Aby zamiast prostego bindowania funkcji w stylu C
używać biblioteki boost
należy skompilować bibliotekę z użyciem CONFIG+=boost
, a przy linkowaniu biblioteki uaktywnić globalne makro USING_BOOST
.
KLLibs - Zbiór lekkich bibliotek. Copyright (C) 2015 Łukasz "Kuszki" Dróżdż.
Niniejszy program jest wolnym oprogramowaniem – możesz go rozpowszechniać dalej i/lub modyfikować na warunkach Powszechnej Licencji Publicznej GNU wydanej przez Fundację Wolnego Oprogramowania, według wersji 3 tej Licencji lub dowolnej z późniejszych wersji.
Niniejszy program rozpowszechniany jest z nadzieją, iż będzie on użyteczny – jednak BEZ ŻADNEJ GWARANCJI, nawet domyślnej gwarancji PRZYDATNOŚCI HANDLOWEJ albo PRZYDATNOŚCI DO OKREŚLONYCH ZASTOSOWAŃ. Bliższe informacje na ten temat można uzyskać z Powszechnej Licencji Publicznej GNU.
Kopia Powszechnej Licencji Publicznej GNU powinna zostać ci dostarczona razem z tym programem. Jeżeli nie została dostarczona, odwiedź http://www.gnu.org/licenses/.