TIEA241 Automaatit ja kieliopit, syksy 2016 Antti-Juhani Kaijanaho TIETOTEKNIIKAN LAITOS 9. lokakuuta 2016
Sisällys
Opettajat Vastuuopettaja (luennot, ohjaukset, tehtäväpalaute) Antti-Juhani Kaijanaho, antti-juhani.kaijanaho@jyu.fi yliopistonopettaja, filosofian tohtori väitöskirja Evidence-based programming language design: a philosophical and methodological exploration (2015) Debian-kehittäjä 1999 2014 teen samalla yliopistopedagogisia opintoja, jotka saattavat osin vaikuttaa kurssin kulkuun Tuntiopettaja (ohjaukset, tehtäväpalaute) Pyry Kotilainen, pyry.j.p.kotilainen@student.jyu.fi
Kirjallisuutta Luentojen pohjana: Michael Sipser: Introduction to the Theory of Computation. Second Edition, International Edition. Thompson 2006. John E. Hopcroft, Rajeev Motwani, Jeffrey D. Ullman: Introduction to Automata Theory, Languages, and Computation. Third Edition, Pearson International Edition. Addison Wesley, 2007. Alfred V. Aho, Monica S. Lam, Ravi Sethi, Jeffrey D. Ullman: Compilers Principles, Techniques, & Tools. Second Edition. Addison Wesley, 2007. Täydentävää lukemista Pekka Orponen: Laskennan teoria. Luentomoniste. http://users.ics.tkk.fi/orponen/ lectures/lte.pdf Scott Aaronson: Quantum Computing Since Democritus. Cambridge University Press, 2013. Luvut 1 4.
Neuvoja opintoihin tee joka päivä ainakin vähän uskalla mennä epämukavuusalueelle en osaa ei ole syy keskeyttää; se on syy jatkaa opiskelemista pyydä apua tarvittaessa, (mm.) siitä meille maksetaan
Esitietovaatimuksista Odotan, että kykenet omatoimisesti oppimaan uusien ohjelmien ja teknisten työkalujen käytön laatimaan yksinkertaisia toimivia tietokoneohjelmia käyttämään ohjelmointikielten peruskirjastoissa tarjottavia perustietorakenteita (merkkijonot, taulukot, joukot, mapit) Kurssilla opiskelua helpottaa, jos kykenet lukemaan logiikan ja joukko-opin kaavoja laatimaan yksinkertaisia matemaattisia todistuksia jollakin matematiikan alalla
Cognitive apprenticeship suom. (virheellisesti) kisällioppiminen kurssilla osin käytössä ensimmäistä kertaa antakaa palautetta! opetusmetodit metodi englanniksi tällä kurssilla mallinnus modeling luennoilla (osan aikaa) valmennus coaching ohjaukset ja Slack apupyörät scaffolding harjoitustehtävien rakenne (osin), ohjaukset ja Slack itsenäistäminen fading harjoitustehtävien rakenne (osin), harjoitustyö, välikokeet, tentit
Kurssin käytännöt Kurssin sivuilla http://users.jyu.fi/~antkaij/opetus/auki/2016/
Tehtävien tulkinnasta Harjoitustehtävät, tenttikysymykset ym. Joskus tehtävät saattavat olla moniselitteisiä. Seuraavanlaiset tulkinnat eivät todennäköisesti ole oikeita: tulkinta tekee tehtävästä liian helpon tulkinnan johdosta tehtävän tekemisessä ei tarvita opiskeltavana tai tentittävänä olevia tietoja tai taitoja Jos joudut valitsemaan useasta tulkinnasta etkä ole varma, mikä niistä on oikein: Jos mahdollista, kysy opettajalta. välikokeessa tai tentissä ei sallittua Valitse jokin tulkinta ja selosta se vastauksessasi.
engl. regular expression käytössä myös lyhenteet regex ja RE suomeksi periaatteessa säännöllinen lauseke suomennosta ei tavallisesti käytetä tällä kurssilla tarkoittaa erästä tiettyä regexpien varianttia, johon palataan myöhemmin tapa kuvata merkkijonon tunnistus- tai hakutehtäviä toteutus löytyy useimmista ohjelmointikielistä tai niiden vakiokirjastoista tarkka syntaksi ja ilmaisuvoima vaihtelee
Regexpien keskeiset käytännön variantit basic POSIX regular expressions (POSIX BRE) mm. grep, POSIX-kirjastot suosittelen välttämään extened POSIX regular expressions (POSIX ERE) mm. egrep, POSIX-kirjastot Perl 5 regular expressions (perlre) useimmat muut toteutukset, mm. JavaScript, Java pieniä eroja toki toteutusten välillä
Regexpien perusominaisuuksia 2 Jokainen regexp on merkkijono, joka luokittelee kaikki merkkijonot kahteen luokkaan: merkkijonot, joka täsmää regexpiin (engl. match) 1 kaikki muut merkkijonot Regexpiä ja testattavaa merkkijonoa verrataan vasemmalta oikealle. Pääsääntönä jokainen regexpin merkki täsmää itseensä: esimerkiksi regexp kissa täsmää vain ja ainoastaan merkkijonoon kissa. Kaikki poikkeukset johtuvat regexpissä olevasta erikoismerkistä. Muiden muasssa: Piste. täsmää mihin tahansa yhteen merkkiin: k.ssa täsmää mm. merkkijonoihin kassa, kissa ja k9ssa. Kenoviivan \ ja sitä seuraavan erikoismerkin yhdistelmä täsmää kyseiseen erikoismerkkiin: esim. k\.ssa täsmää vain ja ainoastaan merkkijonoon k.ssa. 1 Usein sama asia sanotaan niin, että regexp täsmää merkkijonoon. 2 Yhteisiä kaikille varianteille.
Merkkiluokat I 3 Hakasululla [ alkaa ja hakasululla ] päättyy ns. merkkiluokka (engl. bracketed character classs). Molemmat hakasulut ovat erikoismerkkejä. Pääsääntö: merkkiluokka täsmää mihin tahansa sen sisällä lueteltuun merkkiin. Esimerkiksi k[ai]ssa täsmää vain ja ainoastaan merkkijonoihin kassa ja kissa Useimmat erikoismerkit voidaan luetella merkkiluokassa sellaisenaan 3 Siltä osin kuin yhteistä kaikille varianteille.
Merkkiluokat II 4 Poikkeus: jos merkkiluokan sisältö alkaa sirkumfleksillä ^, luokka täsmää mihin tahansa merkkiin, joka ei ole lueteltu merkkiluokan sisällä sirkumfleksin jälkeen: esimerkiksi k[^ai]ssa täsmää mm. merkkijonoihin kessa ja k8ssa. Poikkeus: kahden merkin välissä oleva yhdysviiva - tarkoittaa, että merkkiluokka sisältää kyseiset merkit sekä kaikki kyseisten merkkien välissä (yleensä Unicode-järjestyksessä) olevat merkit: esimerkiksi p[0-9] täsmää vain ja ainoastaan merkkijonoihin p0, p1, p2, p3, p4, p5, p6, p7, p8 ja p9. 4 Siltä osin kuin yhteistä kaikille varianteille.
Valinta ja toisto 5 Pystyviiva tarkoittaa vaihtoehtoisuutta: esim. kissa koira lintu täsmää vain ja ainoastaan merkkijonoihin kissa, koira ja lintu. Merkin toistomäärät voidaan ilmaista kirjoittamalla merkin perään: aaltosulkeisiin tietty toistomäärä: a{3} on sama kuin aaa aaltosulkeisiin pilkulla erotetut ala- ja yläraja: a{2,4} on sama kuin aa aaa aaaa toisen tai molemmat rajat voi jättää tyhjäksi (alarajan oletus on 0, ylärajan oletus on ääretön) plussa + tarkoittaa samaa kuin {1,} tähti * tarkoittaa samaa kuin {0,} kysymysmerkki? tarkoittaa samaa kuin {0,1} 5 Yhteistä POSIX ERE:ille ja Perl-regexpeille. POSIX BRE:ssä on eri syntaksi.
Ryhmittely 6 Pystyviiva vaikuttaa sekä vasemmalle että oikealle niin pitkälle kuin mahdollista. Kysymysmerkki, tähti ja plussa vaikuttavat vasemmalle niin lyhyesti kuin mahdollista. Kaarisulkeita ( ja ) käytetään ryhmittelyyn: esim. k(issa oira) lintu tarkoittaa samaa kuin kissa koira lintu. 6 Yhteistä POSIX ERE:ille ja Perl-regexpeille. POSIX BRE:ssä on eri syntaksi.
Takaisinviittaukset 7 Kaarisuljeryhmiin voi viitata myöhemmin regexpissä. Ryhmät numeroidaan vasemmalta oikealle avaavien sulkeiden järjestyksessä. Kenoviiva, jonka perässä on muistipaikan numero, on takaisinviittaus. Regexp, jossa on takaisinviittaus, täsmää vain jos viitatun kaarisuljeryhmän sisältämä aliregexp täsmäsi samansisältöiseen alimerkkijonoon kuin takaisinviittaus. Esimerkiksi (a+)b\1 täsmää merkkijonoihin aba, aabaa ja aaabaaa mutta ei esimerkiksi merkkijonoon abaa. 7 Vain Perl-regexpit ja sitä matkivat regexp-variantit
Merkkijonon osan tunnistus 8 Monasti kiinnostaa, löytyykö merkkijonosta osamerkkijono, johon regexp täsmää. esim. grep ja egrep tulostavat kaikki rivit, joilta löytyy regexpiin täsmäävä osamerkkijono. Jos regexp alkaa sirkumfleksillä ^, osamerkkijonoa etsitään vain merkkijonon (tai rivin) alusta. Jos regexp päättyy dollarimerkkiin $, osamerkkijonoa etsitään vain merkkijonon (tai rivin) lopusta. Haasteita tulee, jos halutaan tietää, mikä osamerkkijono täsmäsi. Sivuutetaan tämä tällä kurssilla. 8 Yhteistä kaikille varianteille.
Tämän kurssin ongelma tärkeää asiaa alan keskeistä teoriaa runsaasti sovelluksia tosin yleensä piilotettu kirjastojen ja apuohjelmien sisään tilaisuus tutustua alan perinteiseen tutkimusotteeseen olemme yliopistossa tärkeys vaikea nähdä opiskelijan roolissa havaittu joka vuosi! itsekin tajusin kurssin tärkeyden vasta valmistumisen jälkeen
Yksi näkökulma Kaksi kolmasosaa kurssin sisällöstä vastaa mm. seuraavaan kysymykseen: Miten regexp-moottorin voisi toteuttaa? Loput kurssista vastaa seuraavaan kysymykseen? Mitä on klassinen tietojenkäsittelytiede? 9 9 Nykyään puhutaan yleisemmin tietojenkäsittelyteoriasta, engl. theoretical computer science
Kolme laskennan mallia kuvitteellisia (abstrakteja) koneita eli automaatteja lukevat syötteen vastaavat kyllä tai ei merkkijonotulostus ym. mahdollista mutta sivuutetaan tällä kurssilla interaktiivisuus sivuutetaan tällä kurssilla erona käytettävissä oleva muisti
Automaatit 10 äärelliset automaatit etukäteen rajattu muistin kapasiteetti pinoautomaatit äärellinen muisti lisäksi LIFO-periaatteella toimiva rajoittamaton pinomuisti Turingin koneet / RA-koneet äärellinen muisti lisäksi rajoittamaton nauhamuisti / hajasaantimuisti 10 Korjattu 9.10.2016 klo 8:40. Korjaus merkitty punaisella.
Äärelliset automaatit tehokas merkkijonohaku, jos haku kohdistetaan isoon valmistelemattomaan aineistoon hakuehto on monimutkaisempi kuin pelkkä sana tai fraasi regexpit (takaisinviittauksia lukuunottamatta) käännettävissä äärellisiksi automaateiksi verkkoprotokollien mallinnukseen Ks. esim. RFC 3501, sivu 15 pelin NPC:iden toiminnan ohjelmointi 11 variantteja käytössä mm. suomen kielen oikeinkirjoituksen tarkistimissa 11 Ks. esim. Alexander Nareyek: AI in Computer Games. Queue 1 (10), 59 65, 2004.
Turingin koneet vanhin laskennan matemaattinen malli (1936) käsin laskennan matemaattinen malli laadittu ratkaisemaan ns. Entscheidungproblem, ratkeavuusongelma Mitä menetelmää noudattamalla ihminen voi ratkaista minkä tahansa matemaattisen ongelman? Turing vastasi: haluttua menetelmää ei ole. Turingin teesi: mikä tahansa käsin laskettava lukuteoreettinen funktio voidaan laskea jollakin Turingin koneella ei matemaattisesti todistettavissa Kaikki lukuteoreettiset funktiot, jotka voidaan laskea tietokoneella, voidaan laskea Turingin koneella. ei matemaattisesti todistettavissa yleisesti hyväksytty tietotekniikan perusolettamus!
Kieliopit Noam Chomsky esitteli 1950-luvulla ns. lauserakennekieliopit kielioppi on joukko uudelleenkirjoitussääntöjä, joka tuottaa merkkijonoja säännöille esitetyt rajoitteet muodostavat kielioppien hierarkian (Chomskyn hierarkia): tyypin 0 kieliopit eli yleiset kieliopit tyypin 1 kieliopit eli kontekstiset kieliopit tyypin 2 kieliopit eli kontekstittomat kieliopit tyypin 3 kieliopit eli säännölliset kieliopit
Kontekstittomat kieliopit Käytetään yleisesti ohjelmointikielten syntaksin kuvaamiseen BNF, EBNF, ratakiskot jne ovat tapoja kirjoittaa kontekstiton kielioppi
Automaatit ja kieliopit Voidaan osoittaa ekvivalenssit: Kielioppityyppi yleinen kielioppi (tyyppi 0) kontekstiton kielioppi (tyyppi 2) säännollinen kielioppi (tyyppi 3) Automaattityyppi Turingin kone pinoautomaatti äärellinen automaatti