Esimerkki 1: Kahviautomaatti.



Samankaltaiset tiedostot
Automaattiteoria diskreetin signaalinkäsittelyn perusmallit ja -menetelmät ( diskreettien I/O-kuvausten yleinen teoria)

ICS-C2000 Tietojenkäsittelyteoria

TIEA241 Automaatit ja kieliopit, syksy Antti-Juhani Kaijanaho. 5. marraskuuta 2015

Automaatit. Muodolliset kielet

TIEA241 Automaatit ja kieliopit, kevät Antti-Juhani Kaijanaho. 12. tammikuuta 2012

vaihtoehtoja TIEA241 Automaatit ja kieliopit, syksy 2016 Antti-Juhani Kaijanaho 13. lokakuuta 2016 TIETOTEKNIIKAN LAITOS

TIEA241 Automaatit ja kieliopit, kesä Antti-Juhani Kaijanaho. 22. toukokuuta 2013

Se mistä tilasta aloitetaan, merkitään tyhjästä tulevalla nuolella. Yllä olevassa esimerkissä aloitustila on A.

δ : (Q {q acc, q rej }) (Γ k {, }) Q (Γ k {, }) {L, R}.

Koottu lause; { ja } -merkkien väliin kirjoitetut lauseet muodostavat lohkon, jonka sisällä lauseet suoritetaan peräkkäin.

Ohjelmoinnin perusteet Y Python

TIEA241 Automaatit ja kieliopit, syksy Antti-Juhani Kaijanaho. 3. joulukuuta 2015

C-ohjelma. C-ohjelma. C-ohjelma. C-ohjelma. C-ohjelma. C-ohjelma. Operaatioiden suoritusjärjestys

Kyselytutkimus opiskelijoiden ajankäytöstä tietojenkäsittelyteorian peruskurssilla

TAITAJA 2007 ELEKTRONIIKKAFINAALI KILPAILIJAN TEHTÄVÄT. Kilpailijan nimi / Nro:

Tietueet. Tietueiden määrittely

uv n, v 1, ja uv i w A kaikilla

TIEA241 Automaatit ja kieliopit, syksy Antti-Juhani Kaijanaho. 9. lokakuuta 2016

Muuttujien roolit Kiintoarvo cin >> r;

ICS-C2000 Tietojenkäsittelyteoria

Laskennan mallit (syksy 2010) Harjoitus 4, ratkaisuja

ICS-C2000 Tietojenkäsittelyteoria Kevät 2016

TIEA241 Automaatit ja kieliopit, kevät 2011 (IV) Antti-Juhani Kaijanaho. 19. tammikuuta 2012

TIEA241 Automaatit ja kieliopit, syksy Antti-Juhani Kaijanaho. 12. marraskuuta 2015

ICS-C2000 Tietojenkäsittelyteoria. Tähän mennessä: säännölliset kielet. Säännöllisten kielten pumppauslemma M :=

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python

815338A Ohjelmointikielten periaatteet Harjoitus 2 vastaukset

M =(K, Σ, Γ,, s, F ) Σ ={a, b} Γ ={c, d} = {( (s, a, e), (s, cd) ), ( (s, e, e), (f, e) ), (f, e, d), (f, e)

Yhteydettömän kieliopin jäsennysongelma

Laskennan perusmallit (LAP)

TIEA241 Automaatit ja kieliopit, syksy Antti-Juhani Kaijanaho. 12. lokakuuta 2016

Laskennan teoria (kevät 2006) Harjoitus 3, ratkaisuja

Harjoitus 3 (viikko 39)

Hahmon etsiminen syotteesta (johdatteleva esimerkki)

Laskennan rajoja. TIEA241 Automaatit ja kieliopit, kesä Antti-Juhani Kaijanaho. 20. kesäkuuta 2013 TIETOTEKNIIKAN LAITOS.

(0 1) 010(0 1) Koska kieli on yksinkertainen, muodostetaan sen tunnistava epädeterministinen q 0 q 1 q 2 q3

Ohjelmassa henkilön etunimi ja sukunimi luetaan kahteen muuttujaan seuraavasti:

Merkkijono määritellään kuten muutkin taulukot, mutta tilaa on varattava yksi ylimääräinen paikka lopetusmerkille:

TIEA241 Automaatit ja kieliopit, syksy Antti-Juhani Kaijanaho. 19. syyskuuta 2016

// // whiledemov1.c // #include <stdio.h> int main(void){ int luku1 = -1; int luku2 = -1;

ICS-C2000 Tietojenkäsittelyteoria Kevät 2016

Turingin koneen laajennuksia

3.3 KIELIOPPIEN JÄSENNYSONGELMA Ratkaistava tehtävä: Annettu yhteydetön kielioppi G ja merkkijono x. Onko

Ohjelmoinnin perusteet Y Python

System.out.printf("%d / %d = %.2f%n", ekaluku, tokaluku, osamaara);

Ohjelmoinnin perusteet Y Python

1. luento. Ohjelmointi (C) T0004 Syksy luento. 1. luento. 1. luento. 1. luento. kurssin sisältö ja tavoitteet työmuodot.

1.1 Pino (stack) Koodiluonnos. Graafinen esitys ...

Joukot. Georg Cantor ( )

T /2 Tietojenkäsittelyteorian perusteet T/Y

1. Universaaleja laskennan malleja

UML -mallinnus TILAKAAVIO

Sisällys. Kaavioiden rakenne. Kaavioiden piirto symboleita yhdistelemällä. Kaavion osan toistaminen silmukalla. Esimerkkejä. 2.2

System.out.printf("%d / %d = %.2f%n", ekaluku, tokaluku, osamaara);

Laskennan rajoja. Sisällys. Meta. Palataan torstaihin. Ratkeavuus. Meta. Universaalikoneet. Palataan torstaihin. Ratkeavuus.

Säännölliset kielet. Sisällys. Säännölliset kielet. Säännölliset operaattorit. Säännölliset kielet

9. Matemaattisista koneista.

2 Yhtälöitä ja epäyhtälöitä

JavaScript alkeet Esimerkkikoodeja moniste 2 ( Metropolia)

Luento 2: Viivan toteutus

TIEA241 Automaatit ja kieliopit, syksy Antti-Juhani Kaijanaho. 16. marraskuuta 2015

Laskennan rajoja. TIEA241 Automaatit ja kieliopit, syksy Antti-Juhani Kaijanaho. 10. joulukuuta 2015 TIETOTEKNIIKAN LAITOS.

T Syksy 2002 Tietojenkäsittelyteorian perusteet Harjoitus 8 Demonstraatiotehtävien ratkaisut

Luku 6. Dynaaminen ohjelmointi. 6.1 Funktion muisti

Esimerkki: Laskin (alkua) TIEA341 Funktio ohjelmointi 1 Syksy 2005

Ohjelmoinnin perusteet Y Python

Äärellisten automaattien ja säännöllisten kielten ekvivalenssi

Muuttujatyypit ovat Boolean, Byte, Integer, Long, Double, Currency, Date, Object, String, Variant (oletus)

TIEA241 Automaatit ja kieliopit, kevät 2011 (IV) Antti-Juhani Kaijanaho. 16. toukokuuta 2011

on rekursiivisesti numeroituva, mutta ei rekursiivinen.

Luku 3. Listankäsittelyä. 3.1 Listat

TIEA241 Automaatit ja kieliopit, kevät 2011 (IV) Antti-Juhani Kaijanaho. 31. maaliskuuta 2011

Rekursiivinen Derives on periaatteessa aivan toimiva algoritmi, mutta erittäin tehoton. Jos tarkastellaan esim. kieliopinpätkää

Täydentäviä muistiinpanoja Turingin koneiden vaihtoehdoista

Listarakenne (ArrayList-luokka)

TIEP114 Tietokoneen rakenne ja arkkitehtuuri, 3 op. Assembly ja konekieli

Ohjelmoinnin peruskurssi Y1

Jos sekaannuksen vaaraa ei ole, samastamme säännöllisen lausekkeen ja sen esittämän kielen (eli kirjoitamme R vaikka tarkoitammekin L(R)).

Tiedostot. Tiedostot. Tiedostot. Tiedostot. Tiedostot. Tiedostot

UML- mallinnus: Tilakaavio

Laskennan mallit

Tietotekniikan valintakoe

Algoritmit 1. Demot Timo Männikkö

Algoritmit 1. Demot Timo Männikkö

Ohjausrakenteet. Valinta:

TIEA241 Automaatit ja kieliopit, kevät 2011 (IV) Antti-Juhani Kaijanaho. 31. maaliskuuta 2011

Ohjelmoinnin perusteet Y Python

TIEA241 Automaatit ja kieliopit, kevät Antti-Juhani Kaijanaho. 26. tammikuuta 2012

Yllä osoitettiin, että säännöllisten kielten joukko on suljettu yhdisteen

UML-kielen formalisointi Object-Z:lla

9.5. Turingin kone. Turingin koneen ohjeet. Turingin kone on järjestetty seitsikko

S BAB ABA A aas bba B bbs c

5.3 Ratkeavia ongelmia

Ohjelmoinnin perusteet Y Python

Säännöllisen kielen tunnistavat Turingin koneet

Pinoautomaatit. TIEA241 Automaatit ja kieliopit, kesä Antti-Juhani Kaijanaho. 6. kesäkuuta 2013 TIETOTEKNIIKAN LAITOS. Pinoautomaatit.

TIEA241 Automaatit ja kieliopit, kesä Antti-Juhani Kaijanaho. 29. toukokuuta 2013

Algoritmit 1. Demot Timo Männikkö

Muunnelmia Turingin koneista sekä muita vaihtoehtoisia malleja

Transkriptio:

Esimerkki 1: Kahviautomaatti. ÄÄRELLISET AUTOAATIT JA SÄÄNNÖLLISET KIELET 2.1 Tilakaaviot ja tilataulut Tarkastellaan aluksi tietojenkäsittelyjärjestelmiä, joilla on vain äärellisen monta mahdollista tilaa. Tällaisen järjestelmän toiminta voidaan kuvata äärellisenä automaattina t. äärellisenä tilakoneena engl. finite automaton, finite state machine). Äärellisillä automaateilla on useita vaihtoehtoisia esitystapoja: tilakaaviot, tilataulut,... > 0, 4 Em. tilakaavion esittämä automaatti ratkaisee päätösongelman riittävätkö annetut rahat kahvin ostamiseen? Äärellisiä automaatteja voidaan yleensäkin käyttää yksinkertaisten päätösongelmien ratkaisujen mallintamiseen. Automaattimallista on muitakin kuin binäärivasteisten järjestelmien kuvaamiseen tarkoitettuja versioita ns. oore- ja ealy-automaatit), mutta niitä ei käsitellä tällä kurssilla. Esimerkki 2: C-kielen etumerkittömät reaaliluvut. Tilakaavioiden merkinnät: q q q 7 q 0 q 0 q 1 q 2 q 3 q f q 4 q 6 q 1 a q 2 a q1 q2 q 5 Käytetyt lyhenteet: digit = {0, 1,...,9, exp = {E, e.

Äärellisen automaatin esitys tilatauluna: automaatin uusi tila vanhan tilan ja syötemerkin funktiona. Esim. reaalilukuautomaatin tilataulu: digit. exp + q 0 q 1 q 7 q 1 q 1 q 2 q 4 q 2 q 3 q 4 q 3 q 3 q 4 q 4 q 6 q 5 q 5 q 5 q 6 q 6 q 6 q 7 q 3 K: itä tilataulun tyhjät paikat tarkoittavat? V: Tilataulun tyhjät paikat, tai vastaavasti tilakaavion puuttuvat kaaret, kuvaavat automaatin virhetilanteita. Jos automaatti ohjautuu tällaiseen paikkaan, syötejono ei kuulu automaatin hyväksymään joukkoon. uodollisesti automaatissa ajatellaan olevan erityinen virhetila, jota ei vain selkeyden vuoksi merkitä näkyviin. Esim. reaalilukuautomaatin täydellinen kaavioesitys olisi: ja reaalilukuautomaatin täydellinen tauluesitys olisi: digit. exp + q 0 q 1 error., q 0 q 1 q 7 error error error q 1 q 1 q 2 q 4 error error....... q 6 q 6 error error error error error error error error error error

2.2 Äärellisiin automaatteihin perustuva ohjelmointi Annetun äärellisen automaatin pohjalta on helppo laatia automaatin toimintaa vastaava ohjelma. Esim. reaalilukuautomaattiin perustuva syötejonon syntaksitestaus: #include <stdio.h> #include <ctype.h> main) { int q, c; q = 0; while c = getchar)) = \n ) switch q) { case 0: if isdigitc)) q = 1; else if c ==. ) q = 7; case 1: if isdigitc)) q = 1; else if c ==. ) q = 2; else if c == E c == e ) q = 4;... case 99: if q == 2 q == 3 q == 6) printf"syöte ON REAALILUKU.\n"); else printf"syöte EI OLE REAALILUKU.\n"); Semanttisten toimintojen liittäminen äärellisiin automaatteihin Esimerkki. Kahdeksanjärjestelmän lukuja tunnistava automaatti ja siihen perustuva syöteluvun arvonmääritys muuttaminen kymmenjärjestelmään ). d q 0 q 1 q 2 d d Lyhennysmerkintä d = {0, 1,...,7.

Pelkän syntaksitestin toteutus: #include <stdio.h> #include <ctype.h> main) { int q, c; q = 0; while c = getchar)) = \n ) { switch q) { case 0: if c == + c == - ) q = 1; else if 0 <= c c <= 7 ) q = 2; case 1: if 0 <= c c <= 7 ) q = 2; case 2: if 0 <= c c <= 7 ) q = 2; case 99: if q == 2) printf"syöte OK.\n"); else printf"virheellinen LUKU.\n"); Täydennys syöteluvun arvon laskevilla operaatioilla luvun muuttaminen kymmenjärjestelmään ): #include <stdio.h> int mainvoid) { int q, c; int sgn, val; /* SE: sgn = etumerkki */ sgn = 1; val = 0; /* SE: val = itseisarvo */ q = 0; while c = getchar)) = \n ) { switch q) { case 0: if c == + ) q = 1; else if c == - ) { sgn = -1; /* SE */ q = 1; else if 0 <= c c <= 7 ) { val = c - 0 ; /* SE */ q = 2;

case 1: if 0 <= c c <= 7 ) { val = c - 0 ; /* SE */ q = 2; case 2: if 0 <= c c <= 7 ) { val = 8 * val + c - 0 ); /* SE */ q = 2; case 99: if q == 2) { printf"luvun ARVO ON %d.\n", sgn*val);/*se*/ exit0); else { printf"virheellinen SYÖTE.\n"); /* SE */ exit1); 2.3 Äärellisen automaatin käsitteen formalisointi ekanistinen malli: q 1 q 2 Äärellinen automaatti koostuu äärellistilaisesta ohjausyksiköstä, jonka toimintaa säätelee automaatin siirtymäfunktio δ, sekä merkkipaikkoihin jaetusta syötenauhasta ja nämä yhdistävästä nauhapäästä, joka kullakin hetkellä osoittaa yhtä syötenauhan merkkiä. q 0 δ Automaatin toiminta : Automaatti käynnistetään erityisessä alkutilassa q 0, siten että tarkasteltava syöte on kirjoitettuna syötenauhalle ja nauhapää osoittaa sen ensimmäistä merkkiä. Yhdessä toiminta-askelessa automaatti lukee nauhapään kohdalla olevan syötemerkin, päättää ohjausyksikön tilan ja luetun merkin perusteella siirtymäfunktion mukaisesti ohjausyksikön uudesta tilasta, ja siirtää nauhapäätä yhden merkin eteenpäin. Automaatti pysähtyy, kun viimeinen syötemerkki on käsitelty. Jos ohjausyksikön tila tällöin kuuluu erityiseen hyväksyvien) lopputilojen joukkoon, automaatti hyväksyy syötteen, muuten hylkää sen. Automaatin tunnistama kieli on sen hyväksymien merkkijonojen joukko.

Täsmällinen muotoilu: Äärellinen automaatti on viisikko = Q, Σ, δ, q 0, F), missä Q on automaatin tilojen äärellinen joukko; Σ on automaatin syöteaakkosto; δ : Q Σ Q on automaatin siirtymäfunktio; q 0 Q on automaatin alkutila; F Q on automaatin hyväksyvien) lopputilojen joukko. Esimerkki. Reaalilukuautomaatin formaali esitys: = {q 0,...,q 7, error, {0,1,...,9,.,E,e,, δ, q 0, {q 2, q 3, q 6 ), missä δ on kuten aiemmin taulukossa; esim. δq 0, 0) = δq 0, 1) = = δq 0, 9) = q 1, δq 0,.) = q 7, δq 0, E) = δq 0, e) = error, δq 1,.) = q 2, δq 1, E) = δq 1, e) = q 4, jne. Tilanne q, w) johtaa suoraan tilanteeseen q, w ), merkitään q, w) q, w ), Automaatin tilanne on pari q, w) Q Σ ; erityisesti automaatin alkutilanne syötteellä x on pari q 0, x). Intuitio: q on automaatin tila ja w on syötemerkkijonon jäljellä oleva, so. nauhapäästä oikealle sijaitseva osa. jos on w = aw a Σ) ja q = δq, a). Tällöin sanotaan myös, että tilanne q, w ) on tilanteen q, w) välitön seuraaja. Intuitio: automaatti ollessaan tilassa q ja lukiessaan nauhalla olevan merkkijonon w = aw ensimmäisen merkin a siirtyy tilaan q ja siirtää nauhapäätä yhden askelen eteenpäin, jolloin nauhalle jää merkkijono w. Jos automaatti on yhteydestä selvä, relaatiota voidaan merkitä yksinkertaisesti q, w) q, w ).

Tilanne q, w) johtaa tilanteeseen q, w ) t. tilanne q, w ) on tilanteen q, w) seuraaja, merkitään q, w) q, w ), jos on olemassa välitilannejono q 0, w 0 ), q 1, w 1 ),..., q n, w n ), n 0, siten että q, w) = q 0, w 0 ) q 1, w 1 ) q n, w n ) = q, w ) Erikoistapauksena n = 0 saadaan q, w) q, w) millä tahansa tilanteella q, w). Jälleen, jos automaatti on yhteydestä selvä, merkitään yksinkertaisesti q, w) q, w ). Automaatti hyväksyy merkkijonon x Σ, jos on voimassa muuten hylkää x:n. q 0, x) q f, ε) jollakin q f F; Toisin sanoen: automaatti hyväksyy x:n, jos sen alkutilanne syötteellä x johtaa, syötteen loppuessa, johonkin hyväksyvään lopputilanteeseen. Automaatin tunnistama kieli määritellään: L) = {x Σ q 0, x) q f, ε) jollakin q f F. Esimerkki: merkkijonon 0.25E2 käsittely reaalilukuautomaatilla: q 0, 0.25E2) q 1,.25E2) q 2, 25E2) q 3, 5E2) q 3, E2) q 4, 2) q 6, ε). Koska q 6 F = {q 2, q 3, q 6, on siis 0.25E2 L). q 7 q 0 q 1 q 2 q 3 q 4 q 6 q 5