‟overcq”

Ze strony Wiki projektu OUX/C+

Projekt OUX/C+ rozszerza składnię języka C o struktury przełączania wykonania oraz zawiera bibliotekę funkcji. W implementacji wymagane jest stosowanie ustalonego standardu nazewnictwa zmiennych i funkcji globalnych.

Nazwa OUX pochodzi od liter D Q U X oznaczających kolejno: ‹zadanie›, ‹obiekt›, ‹znacznik stanu›, ‹raport›.

Symbole

Symbole z wielkich liter są piktogramami, w których są dwa kierunki: pionowy i poziomy. Pionowy z góry na dół to przepływ wykonania, a poziomy z lewej oznacza program, a z prawej system. Wszystkie proste symbole to:

Stosowane w składni symbole są zawarte w plikach: “compile/E_cplus_S_machine.h” i “compile/E_cplus_S_language.h”.

Nazwy globalne mają format: “E_” nazwa ‹modułu› “_” symbol “_” nazwa, i dowolna ilość “_” symbol “_” nazwa.

Struktury przepływu wykonania i inne

System gwarantuje wykonywanie się w każdej chwili tylko jednej struktury wykonania, a przełączanie następuje w wyznaczonych liniach, np. w instrukcji oczekiwania na ‹raport›.

Moduły

Na ‹moduł› składa zwykle kilka plików mających wspólny początek nazwy do znaku “-”.

Zadania

‹Zadanie› definiuje się następująco:

D( moduł, nazwa_zadania )
{
    I_D
    {
    }
}

Zwykle definiuje się ‹zadanie› czekające na ‹raport› i wykonujące coś po jego otrzymaniu:

D( moduł, nazwa_zadania )
{   X_M( moduł, nazwa_raportu );
    I_D
    {   X_B( moduł, nazwa_raportu )
            break;

    }
    X_W( moduł, nazwa_raportu );
}

‹Zadanie› tworzy i usuwa ‹raport›, na który czeka, a inne ‹zadanie› deklaruje użycie ‹raportu›, który emituje.

Obiekty

‹Obiekt› definiuje się w osobnym pliku ‹modułu›, zawierającym zwykle kilka ‹obiektów›.

‹Obiekt› składa się z ‹procedur› jego utworzenia, wyrzucenia i funkcji ‹obiektu›.

Znaczniki stanu

‹Znacznik stanu› najpierw się definiuje i inicjuje:

struct
{   unsigned U_R( nazwa, nazwa_stanu ) :1
}struktura;
U_L( struktura.nazwa, nazwa_stanu );

albo:

B U_L( nazwa, nazwa_stanu );

A następnie w pętli wykonania wzbudza go:

U_F( struktura.nazwa, nazwa_stanu );

albo:

U_F( nazwa, nazwa_stanu );

Po to, by później, poza pętlą, go obsłużyć:

if( U_E( nazwa, nazwa_stanu ))
{
}

albo obsłużyć go w innym ‹zadaniu›:

if( U_E( struktura.nazwa, nazwa_stanu ))
{
}
Nierealizacje

Dostępne jest szereg instrukcji ‹nierealizacji›, które odpowiadają sposobowi obsługi błędów wywołań ‘uniksowych’.

Instrukcją ‹nierealizacji› otacza się instrukcję wywołania systemowego, na przykład:

VO1( read( fd, buf, count ))
{   VO1( close(fd) ){}
    return 1;
}

W przypadku nierealizacji (błędu) wywołania ‘uniksowego’ jest wypisywany ‹raport linii› ze standardowym opisem błędu.

Raporty linii

‹Raport linii› jest to linia tekstu wypisywana po wykonaniu danej linii. Są dwa rodzaje ‹raportów linii›:

Definiuje się je odpowiednio:

G_();

oraz

G();

Po której to definicji następuje w tej samej linii dowolna liczba definicji wypisywania wartości zmiennych, na przykład:

G(); Gd( zmienna_liczbowa );

Programy OUX/C+

Programy znajdują się i mogą być dodawane w podkatalogach katalogu “program”.

W katalogu należy utworzyć łącze do pliku “Makefile” z obecnego już podkatalogu innego programu.

Programy i środowisko potrzebne do ‘kompilacji’

Podczas pierwszej ‘kompilacji’ jest tworzona baza danych plików nagłówkowych potrzebnych dla każdego wywołania. Dlatego nie trzeba dodawać instrukcji “#include” dla tak znalezionych wywołań.