A Ściągawka języka tok

Ta sama ściągawka jest w pakiecie tok-agent (.github/skills/tok-modelowanie/references/sciagawka.md), więc agent AI pracuje na tym samym opisie języka co Ty. Pełna specyfikacja w języku angielskim: github.com/tok-lang-bpm/tok/blob/main/docs/spec.md, a przewodnik po języku i narzędziach: tok-lang-bpm.github.io.

Jedna instrukcja w jednym wierszu. Bloki tworzy wcięcie (spacje, nie tabulator). # zaczyna komentarz. Każdy wiersz zaczyna się słowem kluczowym. Identyfikatory: litery ASCII, cyfry, _, -; każdy inny. Etykiety: „tekst w cudzysłowie”, dowolny język. Atrybuty: klucz=wartość (słowo, liczba albo “tekst”) oraz flagi bez wartości.

Nagłówek

tok 0.1 "Tytuł modelu" [executable]

Zdarzenia

Instrukcja Element BPMN Przykład
start ID "…" zdarzenie początkowe start wplyw "Pismo wpłynęło" message="Pismo"
end ID "…" zdarzenie końcowe end koniec "Sprawa zamknięta" · terminate · error="Błąd zapisu"
catch ID "…" pośrednie przechwytujące catch odp "Odpowiedź autora" message="Odpowiedź" · timer=P14D
throw ID "…" pośrednie rzucające throw esk "Zgłoszenie opóźnienia" escalation="Opóźnienie"
boundary ID "…" on=CZYNNOŚĆ graniczne boundary termin "Minęło 7 dni" on=ocena timer=P7D noninterrupting

Wyzwalacze (najwyżej jeden): message="…", timer=P3D / PT2H / 2027-01-15T09:00 / "R3/PT1H", signal="…", error="…", escalation="…", condition="…", link="…", flagi terminate, compensate.

Czynności

Instrukcja Zadanie Kiedy
task ogólne sposób wykonania nieznany
user użytkownika człowiek pracuje w systemie
manual ręczne człowiek bez systemu
service usługowe system sam, automatycznie
script skryptowe wyliczenie według wzoru (expr="…" result=zmienna)
rule reguły biznesowej wynik z tabeli decyzyjnej (decision=ID result=zmienna)
send / receive wysyłania / odbioru message="…"
call wywołania process=ID
sub ID "…" + blok podproces własny start i end w bloku
eventsub ID "…" + blok podproces zdarzeniowy blok zaczyna start z wyzwalaczem

Flagi czynności: loop (pętla), parallel / sequential (wiele instancji), compensation.

Bramki

xor (wykluczająca), and (równoległa), or (inkluzywna), eventgw (oparta na zdarzeniach). Etykieta bramki rozdzielającej to pytanie: xor kompletny "Czy wniosek kompletny?".

Baseny i linie

pool biblioteka "Biblioteka uczelniana"     # basen z blokiem: uczestnik i jego proces
  lane czytelnik "Czytelnik"                # linie mogą się zagnieżdżać
    start s "Potrzeba książki"
  lane bibliotekarz "Bibliotekarz"
    user k "Sprawdzenie katalogów"
pool dostawca "Dostawca"                    # bez bloku: basen zamknięty

Przepływy

flow a -> b -> c                            # łańcuch przepływów sekwencji
flow g -> d "tak" when="kwota > 1000"       # jeden przepływ: etykieta i warunek FEEL
flow g -> e "nie" default                   # przepływ domyślny
message wyslanie -> dostawca "Zamówienie"   # przepływ komunikatów między basenami

Wiersz z etykietą albo atrybutami ma dokładnie jedną strzałkę.

Dane i artefakty

data wniosek "Wniosek" state="złożony"      # obiekt danych (stan w atrybucie)
store katalog "Katalog"                     # magazyn danych
reads k katalog                             # czynność czyta dane
writes k wniosek                            # czynność zapisuje dane
note n1 "Termin wg regulaminu, § 5" on=k    # adnotacja
group g1 "Obsługa w czytelni" members="a b c"

Tabela decyzyjna

decision limit "Limit wypożyczeń" hit=first
  | wiek: number | konto: string || limit: number || uwagi       |
  | < 18         | -             || 5             || niepełnoletni |
  | -            | "pracownik"   || 30            ||             |
  | -            | -             || 10            || pozostali   |

Nagłówek: wejścia nazwa: typ (string, number, boolean, date), potem ||, potem wyniki; opcjonalnie || i uwagi. Komórki wejść to testy FEEL: - (dowolnie), < 18, [18..65], "student", "pracownik", not("gość"). Polityka trafień hit=: unique (domyślna), first, any, priority, collect.

Formularz

form f-wniosek "Wniosek"
  text "## Wniosek o udostępnienie\nWypełnij wszystkie pola."
  field tytul "Tytuł" type=textfield required
  field cel "Cel" type=select options="naukowy:Naukowy, prywatny:Prywatny"
  field liczba "Liczba stron" type=number min=1

Typy pól: textfield, textarea, number, checkbox, select, radio, datetime.

Model wykonywalny (Camunda 8)

Nagłówek z flagą executable. Zadania użytkownika: form=. Zadania reguły biznesowej: decision= i result=. Zadania skryptowe: expr= i result=. Każde wyjście bramki xor/or z kilkoma wyjściami: when="…" albo default. Wyrażenia FEEL piszesz bez znaku = na początku.

Symulacja

simulate cases=200 seed=1 arrival="exp(2h)"
resource archiwisci "Archiwiści" count=2
variable strony "unif(10, 200)"

Atrybuty: czynność by=zasób duration="tri(10m, 20m, 1h)" assign="zgoda=bern(0.8)", zdarzenie oczekujące delay="exp(3d)", przepływ p=0.3. Rozkłady: fixed, unif, tri, norm, lnorm, exp, bern, cat(a=0.7, b=0.3). Jednostki: s, m, h, d.

Polecenia

Polecenie Co robi
tok check plik.tok --lang pl sprawdza model; --json dla programów, --level basic dla poziomu podstawowego
tok fmt plik.tok -w porządkuje zapis (forma kanoniczna)
tok bpmn plik.tok / tok svg plik.tok plik BPMN z układem / rysunek
tok export plik.tok -o wynik/ BPMN, SVG, DMN i formularze
tok import model.bpmn BPMN 2.0 XML na tok
tok eval plik.tok DECYZJA nazwa=wartość … wynik tabeli decyzyjnej
tok sim plik.tok --seed 1 --lang pl symulacja; --log log.csv, --cases-csv sprawy.csv

Zapis w tok i symbol na diagramie

Każdy symbol BPMN, który rysuje tok svg, z wierszem tok, który go tworzy. Wielkie litery w zapisie (ID, ACTIVITY, P) zastępujesz identyfikatorami ze swojego modelu, a w miejsce przykładowych wartości ("M", P1D) wpisujesz własne. Kolumna Camunda 8 mówi, czy silnik wykonuje element w modelu wykonywalnym (spotkanie 7); kody C1… zgłasza wtedy tok check.

Zdarzenia początkowe

Symbol Zapis w tok Element Camunda 8
zdarzenie początkowe start ID zdarzenie początkowe wykonuje
zdarzenie początkowe: wiadomość start ID message="M" zdarzenie początkowe: wiadomość wykonuje
zdarzenie początkowe: czas start ID timer=P1D zdarzenie początkowe: czas wykonuje
zdarzenie początkowe: warunek start ID condition="x > 1" zdarzenie początkowe: warunek wykonuje w podprocesach zdarzeniowych
zdarzenie początkowe: sygnał start ID signal="S" zdarzenie początkowe: sygnał wykonuje
zdarzenie początkowe: wielokrotne start ID message="A" signal="B" zdarzenie początkowe: wielokrotne nie wykonuje (C104)
zdarzenie początkowe: równoległe wielokrotne start ID message="A" message="B" parallel zdarzenie początkowe: równoległe wielokrotne nie wykonuje (C105)

Zdarzenia początkowe podprocesów zdarzeniowych

Symbol Zapis w tok Element Camunda 8
przerywające zdarzenie początkowe podprocesu zdarzeniowego: wiadomość eventsub … / start ID message="M" przerywające zdarzenie początkowe podprocesu zdarzeniowego: wiadomość wykonuje
przerywające zdarzenie początkowe podprocesu zdarzeniowego: czas eventsub … / start ID timer=P1D przerywające zdarzenie początkowe podprocesu zdarzeniowego: czas wykonuje
przerywające zdarzenie początkowe podprocesu zdarzeniowego: warunek eventsub … / start ID condition="x > 1" przerywające zdarzenie początkowe podprocesu zdarzeniowego: warunek wykonuje
przerywające zdarzenie początkowe podprocesu zdarzeniowego: sygnał eventsub … / start ID signal="S" przerywające zdarzenie początkowe podprocesu zdarzeniowego: sygnał wykonuje
przerywające zdarzenie początkowe podprocesu zdarzeniowego: błąd eventsub … / start ID error="E" przerywające zdarzenie początkowe podprocesu zdarzeniowego: błąd wykonuje
przerywające zdarzenie początkowe podprocesu zdarzeniowego: eskalacja eventsub … / start ID escalation="X" przerywające zdarzenie początkowe podprocesu zdarzeniowego: eskalacja wykonuje
przerywające zdarzenie początkowe podprocesu zdarzeniowego: kompensacja eventsub … / start ID compensate przerywające zdarzenie początkowe podprocesu zdarzeniowego: kompensacja wykonuje
przerywające zdarzenie początkowe podprocesu zdarzeniowego: wielokrotne eventsub … / start ID message="A" signal="B" przerywające zdarzenie początkowe podprocesu zdarzeniowego: wielokrotne nie wykonuje (C104)
przerywające zdarzenie początkowe podprocesu zdarzeniowego: równoległe wielokrotne eventsub … / start ID message="A" message="B" parallel przerywające zdarzenie początkowe podprocesu zdarzeniowego: równoległe wielokrotne nie wykonuje (C105)
nieprzerywające zdarzenie początkowe podprocesu zdarzeniowego: wiadomość eventsub … / start ID message="M" noninterrupting nieprzerywające zdarzenie początkowe podprocesu zdarzeniowego: wiadomość wykonuje
nieprzerywające zdarzenie początkowe podprocesu zdarzeniowego: czas eventsub … / start ID timer=P1D noninterrupting nieprzerywające zdarzenie początkowe podprocesu zdarzeniowego: czas wykonuje
nieprzerywające zdarzenie początkowe podprocesu zdarzeniowego: warunek eventsub … / start ID condition="x > 1" noninterrupting nieprzerywające zdarzenie początkowe podprocesu zdarzeniowego: warunek wykonuje
nieprzerywające zdarzenie początkowe podprocesu zdarzeniowego: sygnał eventsub … / start ID signal="S" noninterrupting nieprzerywające zdarzenie początkowe podprocesu zdarzeniowego: sygnał wykonuje
nieprzerywające zdarzenie początkowe podprocesu zdarzeniowego: eskalacja eventsub … / start ID escalation="X" noninterrupting nieprzerywające zdarzenie początkowe podprocesu zdarzeniowego: eskalacja wykonuje
nieprzerywające zdarzenie początkowe podprocesu zdarzeniowego: wielokrotne eventsub … / start ID message="A" signal="B" noninterrupting nieprzerywające zdarzenie początkowe podprocesu zdarzeniowego: wielokrotne nie wykonuje (C104)
nieprzerywające zdarzenie początkowe podprocesu zdarzeniowego: równoległe wielokrotne eventsub … / start ID message="A" message="B" parallel noninterrupting nieprzerywające zdarzenie początkowe podprocesu zdarzeniowego: równoległe wielokrotne nie wykonuje (C105)

Zdarzenia pośrednie

Symbol Zapis w tok Element Camunda 8
zdarzenie pośrednie przechwytujące: wiadomość catch ID message="M" zdarzenie pośrednie przechwytujące: wiadomość wykonuje
zdarzenie pośrednie przechwytujące: czas catch ID timer=P1D zdarzenie pośrednie przechwytujące: czas wykonuje
zdarzenie pośrednie przechwytujące: warunek catch ID condition="x > 1" zdarzenie pośrednie przechwytujące: warunek wykonuje
zdarzenie pośrednie przechwytujące: sygnał catch ID signal="S" zdarzenie pośrednie przechwytujące: sygnał wykonuje
zdarzenie pośrednie przechwytujące: wielokrotne catch ID message="A" signal="B" zdarzenie pośrednie przechwytujące: wielokrotne nie wykonuje (C104)
zdarzenie pośrednie przechwytujące: równoległe wielokrotne catch ID message="A" message="B" parallel zdarzenie pośrednie przechwytujące: równoległe wielokrotne nie wykonuje (C105)
zdarzenie pośrednie przechwytujące: łącznik catch ID link="L" zdarzenie pośrednie przechwytujące: łącznik wykonuje
zdarzenie pośrednie throw ID zdarzenie pośrednie wykonuje
zdarzenie pośrednie rzucające: wiadomość throw ID message="M" zdarzenie pośrednie rzucające: wiadomość wykonuje
zdarzenie pośrednie rzucające: sygnał throw ID signal="S" zdarzenie pośrednie rzucające: sygnał wykonuje
zdarzenie pośrednie rzucające: eskalacja throw ID escalation="X" zdarzenie pośrednie rzucające: eskalacja wykonuje
zdarzenie pośrednie rzucające: kompensacja throw ID compensate zdarzenie pośrednie rzucające: kompensacja wykonuje
zdarzenie pośrednie rzucające: wielokrotne throw ID message="A" signal="B" zdarzenie pośrednie rzucające: wielokrotne nie wykonuje (C104)
zdarzenie pośrednie rzucające: łącznik throw ID link="L" zdarzenie pośrednie rzucające: łącznik wykonuje

Zdarzenia graniczne

Symbol Zapis w tok Element Camunda 8
przerywające zdarzenie graniczne: wiadomość boundary ID on=ACTIVITY message="M" przerywające zdarzenie graniczne: wiadomość wykonuje
przerywające zdarzenie graniczne: czas boundary ID on=ACTIVITY timer=P1D przerywające zdarzenie graniczne: czas wykonuje
przerywające zdarzenie graniczne: warunek boundary ID on=ACTIVITY condition="x > 1" przerywające zdarzenie graniczne: warunek wykonuje
przerywające zdarzenie graniczne: sygnał boundary ID on=ACTIVITY signal="S" przerywające zdarzenie graniczne: sygnał wykonuje
przerywające zdarzenie graniczne: błąd boundary ID on=ACTIVITY error="E" przerywające zdarzenie graniczne: błąd wykonuje
przerywające zdarzenie graniczne: eskalacja boundary ID on=ACTIVITY escalation="X" przerywające zdarzenie graniczne: eskalacja wykonuje
przerywające zdarzenie graniczne: wielokrotne boundary ID on=ACTIVITY message="A" signal="B" przerywające zdarzenie graniczne: wielokrotne nie wykonuje (C104)
przerywające zdarzenie graniczne: równoległe wielokrotne boundary ID on=ACTIVITY message="A" message="B" parallel przerywające zdarzenie graniczne: równoległe wielokrotne nie wykonuje (C105)
zdarzenie graniczne: anulowanie boundary ID on=TRANSACTION cancel zdarzenie graniczne: anulowanie nie wykonuje (C101)
zdarzenie graniczne: kompensacja service ID compensate=HANDLER zdarzenie graniczne: kompensacja wykonuje
nieprzerywające zdarzenie graniczne: wiadomość boundary ID on=ACTIVITY message="M" noninterrupting nieprzerywające zdarzenie graniczne: wiadomość wykonuje
nieprzerywające zdarzenie graniczne: czas boundary ID on=ACTIVITY timer=P1D noninterrupting nieprzerywające zdarzenie graniczne: czas wykonuje
nieprzerywające zdarzenie graniczne: warunek boundary ID on=ACTIVITY condition="x > 1" noninterrupting nieprzerywające zdarzenie graniczne: warunek wykonuje
nieprzerywające zdarzenie graniczne: sygnał boundary ID on=ACTIVITY signal="S" noninterrupting nieprzerywające zdarzenie graniczne: sygnał wykonuje
nieprzerywające zdarzenie graniczne: eskalacja boundary ID on=ACTIVITY escalation="X" noninterrupting nieprzerywające zdarzenie graniczne: eskalacja wykonuje
nieprzerywające zdarzenie graniczne: wielokrotne boundary ID on=ACTIVITY message="A" signal="B" noninterrupting nieprzerywające zdarzenie graniczne: wielokrotne nie wykonuje (C104)
nieprzerywające zdarzenie graniczne: równoległe wielokrotne boundary ID on=ACTIVITY message="A" message="B" parallel noninterrupting nieprzerywające zdarzenie graniczne: równoległe wielokrotne nie wykonuje (C105)

Zdarzenia końcowe

Symbol Zapis w tok Element Camunda 8
zdarzenie końcowe end ID zdarzenie końcowe wykonuje
zdarzenie końcowe: wiadomość end ID message="M" zdarzenie końcowe: wiadomość wykonuje
zdarzenie końcowe: błąd end ID error="E" zdarzenie końcowe: błąd wykonuje
zdarzenie końcowe: eskalacja end ID escalation="X" zdarzenie końcowe: eskalacja wykonuje
zdarzenie końcowe: sygnał end ID signal="S" zdarzenie końcowe: sygnał wykonuje
zdarzenie końcowe: kompensacja end ID compensate zdarzenie końcowe: kompensacja wykonuje
zdarzenie końcowe: wielokrotne end ID message="A" signal="B" zdarzenie końcowe: wielokrotne nie wykonuje (C104)
zdarzenie końcowe: anulowanie end ID cancel zdarzenie końcowe: anulowanie nie wykonuje (C101)
zdarzenie końcowe: zakończenie wszystkiego end ID terminate zdarzenie końcowe: zakończenie wszystkiego wykonuje

Czynności

Symbol Zapis w tok Element Camunda 8
zadanie task ID zadanie wykonuje
zadanie użytkownika user ID zadanie użytkownika wykonuje
zadanie ręczne manual ID zadanie ręczne wykonuje
zadanie usługowe service ID zadanie usługowe wykonuje
zadanie skryptowe script ID zadanie skryptowe wykonuje
zadanie reguły biznesowej rule ID zadanie reguły biznesowej wykonuje
zadanie wysyłania send ID zadanie wysyłania wykonuje
zadanie odbioru receive ID zadanie odbioru wykonuje
zadanie odbioru rozpoczynające proces receive ID message="M" instantiate zadanie odbioru rozpoczynające proces nie wykonuje (C106)
podproces osadzony sub ID (block) podproces osadzony wykonuje
podproces zdarzeniowy eventsub ID (block) podproces zdarzeniowy wykonuje
transakcja transaction ID (block) transakcja nie wykonuje (C100)
podproces ad hoc adhoc ID (block) podproces ad hoc wykonuje
czynność wywołująca call ID process=P czynność wywołująca wykonuje
czynność wywołująca zadanie globalne call ID task=GLOBAL czynność wywołująca zadanie globalne nie wykonuje (C108)

Znaczniki czynności

Symbol Zapis w tok Element Camunda 8
zadanie ze znacznikiem pętli task ID loop zadanie ze znacznikiem pętli nie wykonuje (C103)
zadanie wielokrotne równoległe task ID parallel zadanie wielokrotne równoległe wykonuje
zadanie wielokrotne sekwencyjne task ID sequential zadanie wielokrotne sekwencyjne wykonuje
zadanie kompensujące service ID compensation zadanie kompensujące wykonuje

Bramki

Symbol Zapis w tok Element Camunda 8
bramka wykluczająca xor ID bramka wykluczająca wykonuje
bramka inkluzywna or ID bramka inkluzywna wykonuje
bramka równoległa and ID bramka równoległa wykonuje
bramka złożona complex ID bramka złożona nie wykonuje (C102)
bramka oparta na zdarzeniach eventgw ID bramka oparta na zdarzeniach wykonuje
bramka oparta na zdarzeniach rozpoczynająca proces eventgw ID instantiate bramka oparta na zdarzeniach rozpoczynająca proces nie wykonuje (C107)
równoległa bramka oparta na zdarzeniach rozpoczynająca proces eventgw ID instantiate parallel równoległa bramka oparta na zdarzeniach rozpoczynająca proces nie wykonuje (C107)

Dane

Symbol Zapis w tok Element Camunda 8
obiekt danych data ID obiekt danych tylko model
kolekcja obiektów danych data ID collection kolekcja obiektów danych tylko model
dane wejściowe input ID dane wejściowe tylko model
dane wyjściowe output ID dane wyjściowe tylko model
składnica danych store ID składnica danych tylko model

Połączenia

Symbol Zapis w tok Element Camunda 8
przepływ sekwencji flow A -> B przepływ sekwencji wykonuje
przepływ warunkowy flow A -> B when="feel" przepływ warunkowy wykonuje
przepływ domyślny flow G -> B default przepływ domyślny wykonuje
przepływ wiadomości message A -> B przepływ wiadomości wykonuje
powiązanie note ID "Text" on=ID powiązanie tylko model
powiązanie danych writes ACTIVITY DATA powiązanie danych tylko model

Artefakty

Symbol Zapis w tok Element Camunda 8
adnotacja tekstowa note ID "Text" adnotacja tekstowa tylko model

Baseny i linie

Symbol Zapis w tok Element Camunda 8
basen pool ID "Label" (block) basen wykonuje
basen z dwiema liniami lane ID "Label" basen z dwiema liniami wykonuje
basen zamknięty pool ID "Label" (no block) basen zamknięty tylko model
basen z krotnością uczestników pool ID "Label" min=2 max=5 basen z krotnością uczestników nie wykonuje (C123)

Konwersacje

Symbol Zapis w tok Element Camunda 8
konwersacja conversation ID "Label" pools="P Q" konwersacja nie wykonuje (C120)
podkonwersacja subconversation ID "Label" pools="P Q" (block) podkonwersacja nie wykonuje (C120)
wywołanie konwersacji callconversation ID "Label" pools="P Q" collaboration=ID wywołanie konwersacji nie wykonuje (C121)
łącze konwersacji pools= of a conversation łącze konwersacji nie wykonuje (C120)

Choreografie

Symbol Zapis w tok Element Camunda 8
zadanie choreografii choreo ID "Label" from=P to=Q message="M" zadanie choreografii nie wykonuje (C122)
podchoreografia subchoreo ID "Label" pools="P Q" from=P (block) podchoreografia nie wykonuje (C122)
wywołanie choreografii callchoreo ID "Label" pools="P Q" from=P choreography=ID wywołanie choreografii nie wykonuje (C122)