Skip to content

The program takes a string input and determines if it's accepted by a given deterministic finite automata.

Notifications You must be signed in to change notification settings

Mylanos/Finite-state-machine-simulator

Repository files navigation

proj1

Zadanie

Naimplementujte program v jazyku swift, ktorý pre zadaný vstupný reťazec a deterministický konečný automat odsimuluje prechod stavmi nutnými pre prijatie reťazca. Pokiaľ reťazec je akceptovaný končeným automatom, vypíše sa na stdout postupnosť stavov. Pokiaľ reťazec nie je akceptovaný tak program končí chybou.

Spustenie programu

Program je možné spustiť pomocou príkazu swift run proj1 <vstupny_retazec> <nazov_suboru> v domovskom priečinku programu (priečinok obsahujúci súbor Package.swift).

  • <vstupny_retazec> - obsahuje jednotlivé symboly oddelené , (čiarkou), napr:
    • a,b,c obsahuje tri symboly,
    • Prvy,Druhy,Treti,+1š_,Symbol s medzerou obsahuje päť symbolov.
  • <nazov_suboru> - cesta k súboru obsahujúceho reprezentáciu konečného automatu uloženú vo formáte JSON.

JSON atribúty

  • states - pole reťazcov obsahujúce jednotlivé stavy,
  • symbols - pole reťazcov obsahujúce jednotlivé symboly,
  • transitions - pole prechodov, kde každý prechod ($pa \rightarrow q$) obsahuje atribúty:
    • from - aktualny stav $q$,
    • with - aktualny symbol $a$,
    • to - nový stav $q$,
  • initialState - počiatočný stav,
  • finalStates - pole koncových stavov.

Konečný automat č. 1

  • Jazyk automatu: $L=a^*$
{
  "states" : [
    "A"
  ],
  "symbols" : [
    "a"
  ],
  "transitions" : [
    {
      "with" : "a",
      "to" : "A",
      "from" : "A"
    }
  ],
  "initialState" : "A",
  "finalStates" : [
    "A"
  ]
}

Konečný automat č. 2

  • Jazyk automatu: $L=(ab)^+c^+$
{
  "states" : [
    "S",
    "AB",
    "C"
  ],
  "symbols" : [
    "a",
    "b",
    "c"
  ],
  "transitions" : [
    {
      "with" : "a",
      "to" : "AB",
      "from" : "S"
    },
    {
      "with" : "b",
      "to" : "AB",
      "from" : "S"
    }, {
      "with" : "a",
      "to" : "AB",
      "from" : "AB"
    },
    {
      "with" : "b",
      "to" : "AB",
      "from" : "AB"
    },
    {
      "with" : "c",
      "to" : "C",
      "from" : "AB"
    },
    {
      "with" : "c",
      "to" : "C",
      "from" : "C"
    }
  ],
  "initialState" : "S",
  "finalStates" : [
    "C"
  ]
}

Výstup programu

Program na stdout vypíše jednotlivé stavy, ktorými prešiel počas simulácie vstupného reťazca na konečenom automate. Za každým stavom bude symbol nového riadku LF (\n) a to vrátane posledného symbolu. Ukážkový výstup pre vstupný reťazec aaa a ukážkový automat č. 1 je:

A
A
A
A
 

Pre reťazec abc a automat č. 2 sa očakáva výstup:

S
AB
AB
C
 

Chybové stavy

Pri detekovaní chyby sa program správne ukončí, na stderr vypíše informácie o chybe a vráti chybový kód podľa následujúcej tabuľky:

Typ chyby Návratový kód
Vstupný reťacez nie je akceptovaný automatom 6
Nesprávne arumenty 11
Chyba pri práci so súborom 12
Chyba pri dekódovaní automatu 20
Automat obsahuje nedefinovaný stav 21
Automat obsahuje nedefinovaný symbol 22
Automat nie je deterministický 23
Iná chyba 99

Kostra programu

Pre riešenie využite kostru programu s doporučenou štruktúrou modulov. Každý modul má pripavený samostatný priečinok v priečinku Sources.

Moduly

Potrebné implementovať:

  • FiniteAutomata - knižnica pre reprezentáciu a dekódovanie končeného automatu
  • proj1 - modul obsahujúci hlavný kód pre beh programu
  • Simulator - knižnica pre simuláciu konečného automatu

Preimplementovaný modul:

  • MyFiniteAutomatas - Príklady končených automatov, vstupov a výstupu použitých v testoch

Testovanie

V kostre sú pripravené aj štyri testovacie sady, ktoré je možné spustiť pomocou príkazu swift test v domovskom priečinku projektu. Sady sa nachádzajú v priečinku Tests/proj1Tests:

  • FiniteAutomataTests - dve sady testov pre simulátor,
  • proj1Tests - dve sady testov pre výslednú binárku.

Doporučuje sa doplniť si aj vlastné testy.

GitLab CI/CD

V kostre je priložený aj súbor .gitlab-ci.yml, ktorý automatický spúšta testy po každom pushnutí do repozitára na gitlabe. Pokiaľ budete využívať službu gitlab tak Vám to môže pomôcť odhaliť chyby hneď ako sa vyskytnú.

Mac Xcode

Pre vytvorenie projektu pre Xcode .xcodeproj na systéme MacOS je potrebné použíť príkaz swift package generate-xcodeproj v domovskom priečinku projektu.

Odovzdanie

Odovzdáva sa xlogin00.zip s Vaším loginom, ktorý bude obsahovať:

  • Package.swift
  • Sources/
  • Tests/

About

The program takes a string input and determines if it's accepted by a given deterministic finite automata.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages