Ohjelmointikielten syntaksista ja semantiikasta

Koko: px
Aloita esitys sivulta:

Download "Ohjelmointikielten syntaksista ja semantiikasta"

Transkriptio

1 Ohjelmointikielten syntaksista ja semantiikasta Tässä osassa esitellään käsitteet syntaksi ja semantiikka sekä tutustutaan ohjelmointikielen syntaksin kuvaamismenetelmiin. Esimerkiksi Sebestan ([Seb]) luvuissa 3 ja 4 ja Harsun kirjan [Har] luvussa 2 käsitellään seuraavassa esitettäviä asioita. 1. Kielen syntaksi ja semantiikka käsitteinä Ohjelmointikieltä määriteltäessä tarvitaan täsmällinen ja helposti ymmärrettävä kuvaus kielestä. Tämä on tärkeää sekä kieltä toteutettaessa että käytettäessä kieltä ohjelmointiin. On kuvattava kielen rakenne ja kielen konstruktioiden merkitys. Ensin mainittu koskee kielen syntaksia ja jälkimmäinen sen semantiikkaa. Kielen syntaksi (syntax) on sen rakenne. Syntaksi määrittelee ne säännöt, joiden perusteella kielen lailliset ilmaukset voidaan muodostaa. Semantiikka (semantics) määrittelee puolestaan näiden ilmauksien merkityksen. Esimerkiksi C-kielen if-lauseen syntaksi (ilman else -osaa) on if(<expression>) <statement> Tämän lauseen semantiikka on puolestaan seuraava: Jos lausekkeen <expression> arvo ei ole nolla, niin lause <statement> suoritetaan. Jos lausekkeen arvo on nolla, lausetta ei suoriteta. Ohjelmointikielen syntaksin formaalia määritelmää kutsutaan (analogisesti luonnollisen kielen kanssa) kieliopiksi (grammar). Kielten syntaksin formaaliin esittämiseen käytetään yleisesti kontekstista riippumattomia (context-free, kontekstivapaita, yhteysriippumattomia jne) kielioppeja. Sen sijaan semantiikan formaaliin kuvaamiseen ei ole olemassa yhtä yleisesti hyväksyttyä tapaa. Tässä käsitellään pääasiassa syntaksin esittämistä mainittujen kielioppien avulla.

2 2. BNF -kieliopit Tunnetuin formaali kielioppi kehitettiin vuonna 1960 kuvaamaan ALGOL -kielen syntaksia; kielioppi nimettiin kehittäjiensä mukaan BNF:ksi (Backus-Naur Form). Hieman aiemmin (vuonna 1959) kieliteoreetikko Noam Chomsky oli kehittänyt kontekstista riippumattoman kieliopin. Voidaan osoittaa, että itse asiassa molemmat kieliopit ovat ekvivalentit, ts. ne määrittelevät täsmälleen saman asian, ainoa ero on merkintätapa. Tästä syystä termejä "kontekstista riippumaton kielioppi" ja "BNF - kielioppi" käytetään synonyymeina. Tässä käytetään enimmäkseen termiä "BNF - kielioppi", koska kielen syntaksi kuvataan BNF:n avulla. Nimitystä "kontekstista riippumaton kielioppi" käytetään, koska tällaisella kieliopilla kuvataan kieli, jonka määrittelyt eivät saa riippua siitä yhteydestä, missä ne esitetään. BNF -kielioppi muodostetaan äärellisestä joukosta kielioppisääntöjä, jotka yhdessä määrittelevät (formaalin) kielen. Tässä pyritään luonnollisesti kuvaamaan ohjelmointikieliä. Huomaa, että syntaktisesti kuvataan ainoastaan muodollisesti oikein muodostettuja ohjelmia, semanttisesti tällaiset voivat olla täysin mielettömiä. Aluksi tarvitaan määrittely kielelle: Määritelmä. Kieli on joukko äärellisen pituisia jonkin aakkoston sanoja (merkkijonoja). Tämä määrittely pitää siis sisällään sen, että aakkosto on kiinnitettävä etukäteen ja saadaan muodostaa ainoastaan äärellisen mittaisia sanoja. Määrittelyn perusteella mikä tahansa ohjelmointikieli (esimerkiksi FORTRAN, C tai Java) on kieli, aakkostona on yleensä ASCII- tai UNICODE-merkistö. Kielen pienimmät perusosaset eli lekseemit (tekstialkiot, leksikaaliset sanat, lexemes) jätetään usein pois kielen formaalista kuvauksesta yksinkertaisuuden vuoksi; nämä voidaan luetella sanakirjamaisesti erillään syntaktisesta kuvauksesta. Ohjelmointikielen lekseemeihin kuuluvat tunnisteet (identifiers), literaalit (literals), operaattorit (operators),

3 erikoissanat (special words, key words) ja erikoissymbolit (special symbols). Literaalit ovat erityyppisten vakioiden arvoja. Ne voivat olla siis esimerkiksi kokonaislukuvakioita, merkkijonovakioita jne. Lekseemien kategorioita kutsutaan alkionimiksi (sanaset, tokens). Lekseemit ovat siis alkionimien ilmentymiä. Varatut sanat ovat erikoissanojen erikoistapaus. Kielen leksikaalinen rakenne on kuitenkin läheisesti sidoksissa syntaktisen rakenteeseen. Syntaksin tarkistus tapahtuu yleensä niin, että kielen selausvaiheessa (scanning phase) kerätään lekseemit ja jäsentelyvaiheessa (parsing) tarkistetaan varsinainen syntaktinen rakenne. Esimerkiksi C-kielen lauseessa if( luku < 0) luku++; lekseemi alkionimi if erikoissana ( erikoissymboli luku tunniste < erikoissymboli 0 literaali ) erikoissymboli + operaattori ; erikoissymboli Kielen kuvauksessa tarvitaan jonkinlainen metakieli, jonka avulla kuvataan kohdekieltä. Näin ollen on tärkeää erottaa metakielen ja kuvattavan kielen symbolit toisistaan. Kontekstista riippumaton kielioppi koostuu joukosta kielioppisääntöjä, joiden vasemmalla puolella esiintyy ainoastaan määriteltävään rakenteen nimi, vasemman ja oikean puolen erotinmerkkinä toimii symboli ::= ja oikealla puolella voi esiintyä symboleita ja rakenteen nimiä. Rakenteiden nimiä, jotka yleensä esitetään kulmasulkeiden sisällä (<rakenne>), nimitetään välisymboleiksi eli nonterminaaleiksi, koska ne hajaantuvat edelleen pienempiin osiin. Kielen lekseemejä kutsutaan loppusymboleiksi eli terminaaleiksi, sillä ne eivät enää hajaannu pienempiin osiin.

4 Kielioppisääntöjä sanotaan myös produktioiksi, koska ne tuottavat kieleen kuuluvat merkkijonot johtamalla ne säännöistä. Puhtaassa BNF:ssä käytetään ainoastaan seuraavia metasymboleja: < > ::= Kolmen ylimmän symbolin merkitys on kerrottu yllä ja symboli ilmaisee vaihtoehtoa: Tällä symbolilla erotettuja termejä voidaan jompaakumpaa käyttää johdossa. Rakenteiden määrittely voi olla rekursiivista, ts. sama rakenteen nimi voi esiintyä säännössä sekä oikealla että vasemmalla puolella. Esimerkiksi kymmenjärjestelmän etumerkittömät luvut voitaisiin määritellä syntaktisesti seuraavasti: <luku> ::= <luku><numero> <numero> <numero> ::= Huomaa kuitenkin, että esimerkiksi on laillisesti johdettu luku (ohjelmointikielet myös yleensä sallivat lukujen esittämisen näin). Tällä yksinkertaisella merkintätavalla voidaan kuvata ohjelmointikielten syntakseja. Mukavuuden vuoksi usein käytetään laajennettua BNF:ää (extended BNF, EBNF), johon on lisätty metasymbolit [ ] { } Näiden merkitys on seuraava: [] tarkoittaa sulkujen sisällä olevan lausekkeen vapaaehtoista valintaa, ts. määrittelyssä

5 <sana> ::= x[y] sana voi olla x tai xy. Edelleen {} tarkoittaa sulkujen sisällä olevan lausekkeen esiintymistä 0 tai useampi kertaa, ts. nyt määrittelyssä <sana> ::= x{y} sana voi olla x, xy, xyy, xyyy, jne. Laajennetussa BNF:ssä voidaan myös käyttää sulkuja ryhmittelyyn. Muitakin helpottavia merkintöjä saatetaan käyttää EBNF:ksi nimitettävissä esityksissä. Esimerkki. C-kielen if -lause voidaan kuvata seuraavasti: <if_stmt> ::= if(<expr>) <stmt>[else <stmt>]; Tässä määrittelyssä pitää luonnollisesti antaa myöhemmin säännöt välisymboleille <expr> ja <stmt>. Valintatilanteessa voidaan käyttää myös metakielessä sulkuja; esimerkkinä Pascal - kielen for-lause <for_stmt> ::= for <var> := <expr> (to downto) <expr> do <stmt>; Kielen kaikki syntaktisesti oikeat lauseet voidaan johtaa kielioppisäännöistä; johtaminen tapahtuu lähtien liikkeelle jostakin kieliopin säännöstä ja korvaamalla välisymboleita joillakin määrittelyillään. Kontekstista riippumattoman kieliopin tapauksessa kaikki vaihtoehtoiset määrittelyt sallitaan kaikissa yhteyksissä.

6 Esimerkiksi jossakin ohjelmointikielessä sijoituslause yhteen- ja kertolaskua sisältäville aritmeettisille operaatioille voitaisiin määritellä seuraavasti: <assign> ::= <id> = <expr> <id> ::= X Y Z <expr> ::= <id> + <expr> <id> * <expr> (<expr>) <id> Tällöin lause X = X*(Y+Z) voitaisiin johtaa seuraavasti: <assign> -> <id> = <expr> -> X = <expr> -> X = X*<expr> -> X = X*(<expr>) -> X = X*(<id> + <expr>) -> X = X*(Y + <expr>) -> X = X*(Y + <id>) -> X = X*(Y + Z) Lauseen johtaminen voidaan myös esittää graafisesti johtopuuna (parse tree). Tällöin nähdään lauseiden hierarkkinen rakenne selvemmin. Esimerkiksi yllä olevan sijoituslauseen johtopuu olisi

7 Kielioppia sanotaan monikäsitteiseksi (ambiguous), mikäli samalla lauseella on useita erilaisia johtopuita. Jos sijoituslauseen kielioppia muutettaisiin hieman, esimerkiksi muotoon <assign> ::= <id> = <expr> <id> ::= X Y Z <expr> ::= <id> + <expr> <expr> * <expr> (<expr>) <id> seurauksena olisi monikäsitteinen kielioppi, nimittäin esimerkiksi lauseella X = X + Y*Z on kaksi erilaista johtopuuta (muodosta ne!). Tämä on ongelmallista, sillä kääntäjät pohjaavat usein semanttisen tulkinnan syntaktiseen muotoon. Esimerkiksi tässä tapauksessa kielioppi ei kerro, suoritetaanko laskutoimitus muodossa (X+Y)*Z vai (kuten aritmeettisten sääntöjen nojalla on oikein) X+(Y*Z). Vaikka kielioppi ei

8 olisikaan monikäsitteinen, sama lause voidaan yleensä johtaa eri tavoin; tällöin kuitenkin näitä kaikkia vastaa sama jäsennyspuu. 3. Syntaksikaaviot BNF:n ja EBNF:n säännöt voidaan esittää myös graafisessa muodossa ns. syntaksikaaviona (syntax graph, syntax diagram) avulla. Tällöin käytetään suunnattua polkua, jossa kieliopin loppusymbolit ja välisymbolit merkitään solmuiksi. Loppusymbolien nimet kirjoitetaan ovaaleihin ja välisymbolit suorakaiteisiin seuraavasti Muotonsa vuoksi syntaksikaavioita kutsutaan myös ratapihakaavioiksi. Vaihtoehtoinen toiminto esitetään kirjoittamalla vaihtoehdot rinnakkain, esimerkiksi säännöt X1 X2 ja {YN} kirjoitetaan Näin saadaan esimerkiksi Pascal-kielen case-lause

9 <case_stmt> ::= CASE <expression> OF <case_list> [;] END <case_list> ::= {<const_list>: <stmt>;}<const_list>: <stmt> <const_list> ::= <const> {, <const>} muunnettua syntaksikaavioksi Huomaa, että kielioppisääntö sisältää vielä kolme välisymbolia (expression, stmt, const), joille tulisi myös antaa säännöt. Seuraavassa listauksessa on esimerkki syntaktisesti oikeasta Pascal-kielisestä case-lauseesta Case SELECTION of 1 : Begin Writeln('Selection one'); End; 2 : Begin Writeln('Selection two'); End; 3,4 : Begin Writeln('Selection three'); End; End; Edellä SELECTION tunnistetaan lausekkeeksi ja jäsennetään välisymbolilla expression. Vakiot 1, 2, 3 ja 4 tunnistetaan ensin ensin välisymboliin const_list kuuluviksi ja lopuksi ne jäsennetään välisymbolilla const. Erikoissana Begin aloittaa ja End lopettaa lauseen, joten näiden muodostamat kokonaisuudet jäsennetään välisymbolilla stmt.

10 Edellä kuvatun graafisen esityksen etuja on mm. se, että syntaksidiagrammia voidaan käyttää varsin suoraviivaisesti kirjoitettaessa jäsentäjä (parser, syntax analyzer) kieliopille. 4. Jäsentäjät Seuraavaksi käsitellään lyhyesti erilaisia tapoja konstruoida jäsentäjä. Ohjelmointikieli voi olla käännettävä, tulkattava tai hybridi. Käännettävästä kielestä muodostetaan erityisen ohjelman, kääntäjän (compiler) avulla konekielinen ohjelma, joka sitten suoritetaan. Tulkattavalla kielellä kirjoitetun ohjelman ajaa erillinen tulkki (interpreter) suoraan ohjelmointikielellä kirjoitetusta koodista. Hybridisysteemissä kääntäjä muodostaa ohjelmasta välimuodon, joka tulkataan. Esimerkiksi Java on hybridikieli: alkuperäinen ohjelma käännetään tavukoodiksi, jonka Javan virtuaalikone suorittaa. Kaikki käännettävät kielet tarvitsevat jäsentäjän osana kääntäjää. Lähes poikkeuksetta kääntäjät jakavat syntaksianalyysin leksikaaliseen analyysiin ja varsinaiseen jäsentämiseen. Leksikaalinen analyysi toimii jäsentämisen esioperaationa ja on oikeastaan osa jäsentämistä. Leksikaalinen analysoija on pääasiassa hahmontunnistaja: se poimii ohjelmasta lekseemit ja tunnistaa niiden tyypin, ts. mistä alkionimestä on kysymys. Yleensä alkionimille käytetään (nimettyjä) kokonaislukutunnistetta jäsentäjän sisällä. Esimerkkinä ohjelmointikielen sijoituslause luku = toinen_luku + 25; lekseemi alkionimi luku IDENT (tunniste) = ASSIGN_OP (operaattori) toinen_luku IDENT (tunniste) + PLUS_OP (operaattori) 25 INT_LIT (literaali) ; SEMICOLON (erikoissymboli)

11 Tässä ei puututa lähemmin leksikaalisen analyysin toteutukseen; periaatteessa kysymys on kuitenkin varsin suoraviivaisesta hahmontunnistusongelmasta. Seuraavassa oletetaan, että käytössä on funktio, joka hakee jäsennettävästä merkkijonosta seuraavan lekseemin ja sijoittaa sen globaaliin muuttujaan sekä paluuarvonaan (kokonaisluku) antaa alkionimen tyyppikoodin. Jäsentäjän tehtävä on konstruoida syötteenä saamalleen ohjelmalle jäsennyspuu; yksinkertaisimmillaan jäsentäjä toimii vain syntaksin tarkastajana, ts. se tutkii ainoastaan, onko ohjelma syntaktisesti oikein muodostettu. Virhetilanteessa jäsentäjän on luonnollisesti raportoitava asianmukaisesti havaitusta virheestä. Jäsentäjät jaetaan kahteen pääluokkaan sen mukaan, miten jäsennyspuu rakennetaan. Osittavat (ylätasolta lähtevät) jäsentäjät (top-down parsers) etenevät puun juuresta lehtiin päin, kun taas kokoavat (alatasolta lähtevät) jäsentäjät (bottom-up parsers) rakentavat puun päinvastaisessa järjestyksessä. Kaikki yleisesti käytettävät jäsentäjät toimivat kuitenkin siinä suhteessa samalla periaatteella, että ne tutkivat ainoastaan yhden lekseemin eteenpäin kerrallaan. Kokoavien jäsentäjien ideana on sovittaa käsiteltävän merkkijonon loppuosa (oikea puoli) jonkin kielioppisäännön oikeaan puoleen ja tämä redusoidaan sitten kyseisen säännön vasemmaksi puoleksi, minkä vuoksi jäsennystä kutsutaan myös LRjäsennykseksi. Sebestan kirjan [Seb] luvussa 4.5 on käsitelty tarkemmin tällaisia jäsentäjiä. Osittavat jäsentäjät toimivat päinvastoin: ne päättelevät merkkijonon vasemmasta päästä lähtien, onko tutkittava lauseke loppu- vai välisymboli ja redusoivat välisymbolit sovittaen ne sopivan kielioppisäännön vasemmaksi puoleksi. Tällöin jäsennystä sanotaan LL-jäsennykseksi. (Ks myös [Har], 2.4) (E)BNF:n tai vastaavan syntaksikaavion avulla esitetylle kieliopille luonnollisimmin rakentuu jäsentäjä, joka noudattaa osittavaa ns. rekursiivisesti etenevää (rekursiivisesti laskeutuvaa, recursive descent) algoritmia. EBNF sopii erityisen hyvin rekursiivisesti etenevän jäsentäjän konstruoimiseen. Tällaisessa jäsentäjässä on kokoelma (yleensä rekursiivisia) funktioita, jotka tuottavat jäsennyspuun ylhäältä lähtien. Tarvitaan leksikaalinen analysoija (aiemmin mainittu funktio ) ja jokaista kieliopin välisymbolia kohti oma funktio, joka käsittelee kyseisen välisymbolin. Esimerkki valaisee asiaa. Rakennetaan aiemmin esitetylle Pascal -kielen case -lauseelle rekursiivisesti etenevä jäsentäjä. Oletetaan, että ohjelmassa on funktio,

12 joka hakee jäsennettävästä merkkijonosta seuraavan lekseemin ja sijoittaa sen globaaliin muuttujaan sym. Oletetaan lisäksi, että välisymboleille "expression", "const" ja "stmt" on kullekin oma funktio, joka huolehtii kyseisen kielioppisäännön tarkastamisesta. Oletetaan vielä, että virhetilanteessa kutsutaan metodia error(). Tällöin pseudokoodi yllä olevan case -lauseen jäsentämiseksi voisi olla PROGRAM CASE_STATEMENT String sym if( sym!= "CASE") error() else expression() ; if( sym!= "OF") error() else case_list() if(sym!= "END") error() function case_list() const_list() if(sym!= ":") error() else stmt() if(sym == ";") if(sym!= "END") case_list() else if(sym!= "END") error()

13 function const_list() const() if(sym ==",") const_list() else if(sym!= ":") error() function expression() // Parse expression according to rule const() // Parse const according to rule stmt () // Parse statement according to rule END PROGRAM CASE_STATEMENT Rekursiivisesti etenevä menetelmä on varsin tehokas, mutta sisältää erään rajoituksen: kielioppisäännöt eivät saa sisältää vasemmanpuoleista rekursiota. Esimerkiksi säännön <expr> ::= <expr> + <term> <term> ::= muuntaminen jäsentäjäksi johtaisi seuraavan kaltaiseen ohjelmaan:

14 PROGRAM EXPR String sym expr(); function expr() expr() ; if( sym == "+") term() else error() function term() // Parse term END PROGRAM EXPR Nyt huomataan välittömästi, että funktion expr() kutsuminen johtaa päättymättömään rekursioon. Ahon, Sethin ja Ullmanin kirjassa ([Aho]) kääntäjiä ja niiden toteutusalgoritmeja käsitellään laajasti. Tässä on ainoastaan pyritty antamaan pintapuolinen kuva kielen syntaksin ja jäsennysprosessin välisestä yhteydestä. 4. Semantiikka Palataan vielä lopuksi lyhyesti ohjelmointikielten semantiikkaan. Usein puhutaan staattisesta ja dynaamisesta semantiikasta. Näistä oikeastaan ainoastaan dynaaminen semantiikka on varsinaista semantiikkaa, ts. ohjelmointikielen merkitysoppia. Staattisen semantiikan ongelmat eivät liity merkitykseen vaan koskevat paremminkin ohjelmien sallittua muotoa (ts. lähestyvät syntaktisia kysymyksiä). Staattisen semantiikan kysymykset ovat sellaisia muotoseikkoja, joita on vaikea tai mahdoton kuvata BNF:n avulla. Esimerkiksi vaatimus siitä, että muuttuja on määriteltävä ennen arvon sijoittamista siihen, on tällainen ominaisuus. Staattisen semantiikan nimitys johtuu siitä, että sen vaatimukset voidaan tarkistaa jo käännösaikana. Varsinainen eli dynaaminen semantiikka on varsin hankala aihe. Ei nimittäin ole yleisesti hyväksyttyä formaalia järjestelmää kuvaamaan ohjelmien merkitysoppia.

15 Luonnollisesti ohjelmointikielen määrittelyn yhteydessä sen konstruktioiden merkitys olisi tarkasti kuvattava. Yleensä tämä kuitenkin tapahtuu luonnollista kieltä käyttämällä eikä formaalisti. Usein semantiikka jaetaan tarkastelunäkökulman perusteella operationaaliseen, denotationaaliseen ja aksiomaattiseen semantiikkaan. Tässä ei paneuduta ohjelmointikielten merkitysoppiin syvällisemmin vaan tyydytään kuvaamaan kyseiset käsitteet. Operationaalinen semantiikka pyrkii kuvaamaan annetun ohjelman merkityksen suorittamalla ohjelman joko reaalisessa tai virtuaalisessa tietokoneessa; koneen tilat ohjelman suorituksen aikana määrittelevät tällöin ohjelman merkityksen. Formaalia operationaalista semantiikkaa käytettiin ohjelmointikielen PL/I merkitysopin kuvaamiseen jo 1960-luvulla. Tämä semantiikan laji pohjautuu algoritmeihin eikä niinkään matemaattiseen esitykseen; operationaalinen semantiikka voi olla hyödyllinen tapa kuvata merkitysoppi kielen käyttäjille ja toteuttajille, kunhan esitystapa pidetään riittävän selkeänä ja yksinkertaisena. Aksiomaattinen semantiikka kehitettiin, kun pyrittiin konstruoimaan menetelmä todistaa ohjelmien korrektisuutta. Nimensä mukaisesti aksiomaattinen semantiikka pohjautuu matemaattiseen logiikkaan. Aksiomaattisen semantiikan tuntemus voi olla hyödyksi ohjelmoijalle, jonka on todistettava aukottomasti ohjelmansa korrektius. Myös denotationaalinen semantiikka perustuu matematiikkaan, nimittäin rekursiivisten funktioiden teoriaan. Yleisesti katsotaan, että tämä semantiikan muoto kuvaa käytettävistä menetelmistä tarkimmin ohjelmien merkitysopin. Denotationaalisen semantiikan avulla lähes mikä tahansa ohjelmointikielen piirre voidaan kuvata matemaattisen funktion avulla. Denotationaalista semantiikkaa voidaan käyttää hyödyksi ohjelmointikielten suunnittelussa; ohjelmoijan kannalta sitä ei voitane pitää erityisen käyttökelpoisena. Sebesta ([Seb]) käsittelee hieman perusteellisemmin semantiikan kysymyksiä kirjansa luvussa 3.5. (Ks. myös [Har], 2.5 ja 2.6)

16 Lähteet [Aho] Aho, A.V., Sethi, R. & Ullman, J.D. Compilers: Principles, Techniques and Tools. Addison-Wesley [Har] Harsu, Maarit. Ohjelmointikielet, Periaatteet, käsitteet, valintaperusteet, Talentum [Seb] Sebesta, Robert W. Concepts of Programming Languages 10th edition, Pearson 2013.

815338A Ohjelmointikielten periaatteet

815338A Ohjelmointikielten periaatteet 815338A Ohjelmointikielten periaatteet 2015-2016 III Ohjelmointikielten syntaksi ja semantiikka Sisältö 1. Syntaksi ja semantiikan käsitteet 2. BNF-kielioppi 3. Syntaksikaaviot 4. Jäsentäjät 5. Semantiikka

Lisätiedot

815338A Ohjelmointikielten periaatteet Harjoitus 2 vastaukset

815338A Ohjelmointikielten periaatteet Harjoitus 2 vastaukset 815338A Ohjelmointikielten periaatteet 2015-2016. Harjoitus 2 vastaukset Harjoituksen aiheena on BNF-merkinnän käyttö ja yhteys rekursiivisesti etenevään jäsentäjään. Tehtävä 1. Mitkä ilmaukset seuraava

Lisätiedot

FORMAALI SYSTEEMI (in Nutshell): aakkosto: alkeismerkkien joukko kieliopin määräämä syntaksi: sallittujen merkkijonojen rakenne, formaali kuvaus

FORMAALI SYSTEEMI (in Nutshell): aakkosto: alkeismerkkien joukko kieliopin määräämä syntaksi: sallittujen merkkijonojen rakenne, formaali kuvaus FORMAALI SYSTEEMI (in Nutshell): Formaali kieli: aakkosto: alkeismerkkien joukko kieliopin määräämä syntaksi: sallittujen merkkijonojen rakenne, formaali kuvaus esim. SSM:n tai EBNF:n avulla Semantiikka:

Lisätiedot

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

TIEA241 Automaatit ja kieliopit, syksy 2015. Antti-Juhani Kaijanaho. 3. joulukuuta 2015 TIEA241 Automaatit ja, syksy 2015 Antti-Juhani Kaijanaho TIETOTEKNIIKAN LAITOS 3. joulukuuta 2015 Sisällys Formaalisti Määritelmä Nelikko G = (V, Σ, P, S) on kontekstiton kielioppi (engl. context-free

Lisätiedot

11.4. Context-free kielet 1 / 17

11.4. Context-free kielet 1 / 17 11.4. Context-free kielet 1 / 17 Määritelmä Tyypin 2 kielioppi (lauseyhteysvapaa, context free): jos jokainenp :n sääntö on muotoa A w, missäa V \V T jaw V. Context-free kielet ja kieliopit ovat tärkeitä

Lisätiedot

Ongelma(t): Miten jollakin korkeamman tason ohjelmointikielellä esitetty algoritmi saadaan suoritettua mikro-ohjelmoitavalla tietokoneella ja siinä

Ongelma(t): Miten jollakin korkeamman tason ohjelmointikielellä esitetty algoritmi saadaan suoritettua mikro-ohjelmoitavalla tietokoneella ja siinä Ongelma(t): Miten jollakin korkeamman tason ohjelmointikielellä esitetty algoritmi saadaan suoritettua mikro-ohjelmoitavalla tietokoneella ja siinä olevilla komponenteilla? Voisiko jollakin ohjelmointikielellä

Lisätiedot

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

TIEA241 Automaatit ja kieliopit, syksy Antti-Juhani Kaijanaho. 9. lokakuuta 2016 TIEA241 Automaatit ja, syksy 2016 Antti-Juhani Kaijanaho TIETOTEKNIIKAN LAITOS 9. lokakuuta 2016 Sisällys Kontekstiton kielioppi Kontekstiton kielioppi koostuu joukosta päätemerkkejä (engl. terminal symbols),

Lisätiedot

8. Kieliopit ja kielet

8. Kieliopit ja kielet 8. Kieliopit ja kielet Suomen kielen sanoja voidaan yhdistellä monella eri tavalla. Kielioppi määrää sen, milloin sanojen yhdistely antaa oikein muodostetun lauseen. "Mies räpyttää siipiään" on kieliopillisesti

Lisätiedot

Yhteydettömät kieliopit [Sipser luku 2.1]

Yhteydettömät kieliopit [Sipser luku 2.1] Yhteydettömät kieliopit [ipser luku 2.1] Johdantoesimerkkinä tarkastelemme kieltä L = { a n b m a n n > 0, m > 0 }, joka on yhteydetön (mutta ei säännöllinen). Vastaavan kieliopin ytimenä on säännöt eli

Lisätiedot

TIEA241 Automaatit ja kieliopit, kevät Antti-Juhani Kaijanaho. 2. helmikuuta 2012

TIEA241 Automaatit ja kieliopit, kevät Antti-Juhani Kaijanaho. 2. helmikuuta 2012 TIEA241 Automaatit ja, kevät 2012 Antti-Juhani Kaijanaho TIETOTEKNIIKAN LAITOS 2. helmikuuta 2012 Sisällys Sisällys Chomskyn hierarkia kieli säännöllinen kontekstiton kontekstinen rekursiivisesti lueteltava

Lisätiedot

Jäsennys. TIEA341 Funktio ohjelmointi 1 Syksy 2005

Jäsennys. TIEA341 Funktio ohjelmointi 1 Syksy 2005 Jäsennys TIEA341 Funktio ohjelmointi 1 Syksy 2005 Muistutus: Laskutehtävä ja tulos data Laskutehtava = Luku Double Yhteen Laskutehtava Laskutehtava Vahennys Laskutehtava Laskutehtava Tulo Laskutehtava

Lisätiedot

ICS-C2000 Tietojenkäsittelyteoria Kevät 2016

ICS-C2000 Tietojenkäsittelyteoria Kevät 2016 ICS-C2000 Tietojenkäsittelyteoria Kevät 2016 Kierros 6, 22. 26. helmikuuta Huom: arviointiviikolla 15. 19.2. ei ole laskuharjoituksia! Demonstraatiotehtävien ratkaisut D1: (a) Osoita, että seuraava yhteydetön

Lisätiedot

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

TIEA241 Automaatit ja kieliopit, syksy Antti-Juhani Kaijanaho. 30. marraskuuta 2015 TIEA241 Automaatit ja kieliopit, syksy 2015 Antti-Juhani Kaijanaho TIETOTEKNIIKAN LAITOS 30. marraskuuta 2015 Sisällys t Väitöstilaisuus 4.12.2015 kello 12 vanhassa juhlasalissa S212 saa tulla 2 demoruksia

Lisätiedot

Attribuuttikieliopit

Attribuuttikieliopit TIEA241 Automaatit ja kieliopit, kevät 2011 (IV) Antti-Juhani Kaijanaho TIETOTEKNIIKAN LAITOS 3. toukokuuta 2011 Sisällys t Chomskyn hierarkia kieli säännöllinen kontekstiton kontekstinen rekursiivisesti

Lisätiedot

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

uv n, v 1, ja uv i w A kaikilla 2.8 Säännöllisten kielten rajoituksista Kardinaliteettisyistä on oltava olemassa (paljon) ei-säännöllisiä kieliä: kieliä on ylinumeroituva määrä, säännöllisiä lausekkeita vain numeroituvasti. Voidaanko

Lisätiedot

Luku 3. Syntaktisia kysymyksiä. 3.1 Lausekkeet

Luku 3. Syntaktisia kysymyksiä. 3.1 Lausekkeet Luku 3 Syntaktisia kysymyksiä Syntaksi eli kielioppi käsittelee ohjelmien muodollista oikeellisuutta pohtimatta merkitysopillisia eli semanttisia kysymyksiä. Kieliopilliset ominaisuudet ovat (useimmiten)

Lisätiedot

5.5 Jäsenninkombinaattoreista

5.5 Jäsenninkombinaattoreista 5.5. JÄSENNINKOMBINAATTOREISTA 67 type Env α = FiniteMap String α data EnvT m α = MkE (Env Integer m (Env Integer, α)) instance Transformer EnvT where promote mp = MkE $ λenv mp λr return $(env, r) instance

Lisätiedot

TIES542 kevät 2009 Denotaatio

TIES542 kevät 2009 Denotaatio TIES542 kevät 2009 Denotaatio Antti-Juhani Kaijanaho 27.1.2009 (korjauksia 28.1.2009) Denotationaalisessa merkitysopissa kukin (ohjelmointi)kielen konstrktiolle määritellään matemaattinen otus, jota sanotaan

Lisätiedot

Vasen johto S AB ab ab esittää jäsennyspuun kasvattamista vasemmalta alkaen:

Vasen johto S AB ab ab esittää jäsennyspuun kasvattamista vasemmalta alkaen: Vasen johto S AB ab ab esittää jäsennyspuun kasvattamista vasemmalta alkaen: S A S B Samaan jäsennyspuuhun päästään myös johdolla S AB Ab ab: S A S B Yhteen jäsennyspuuhun liittyy aina tasan yksi vasen

Lisätiedot

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

TIEA241 Automaatit ja kieliopit, kevät 2011 (IV) Antti-Juhani Kaijanaho. 19. tammikuuta 2012 TIEA241 Automaatit ja kieliopit, kevät 2011 (IV) Antti-Juhani Kaijanaho TIETOTEKNIIKAN LAITOS 19. tammikuuta 2012 Sisällys Sisällys Muistathan A B -konstruktion 0 k 1 i 2 s 3 s 4 a 5 0 k 1 o 2 i 3 r 4

Lisätiedot

Säännöllisten kielten sulkeumaominaisuudet

Säännöllisten kielten sulkeumaominaisuudet Säännöllisten kielten sulkeumaominaisuudet Osoitamme nyt, että säännöllisten kielten joukko on suljettu yhdisteen, konkatenaation ja tähtioperaation suhteen. Toisin sanoen jos A ja B ovat säännöllisiä,

Lisätiedot

8. Kieliopit ja kielet 1 / 22

8. Kieliopit ja kielet 1 / 22 8. Kieliopit ja kielet 1 / 22 Luonnollinen kieli Suomen kielen sanoja voidaan yhdistellä monella eri tavalla. Kielioppi määrää sen, milloin sanojen yhdistely antaa oikein muodostetun lauseen. "Mies räpyttää

Lisätiedot

TIEA241 Automaatit ja kieliopit, kevät Antti-Juhani Kaijanaho. 12. kesäkuuta 2013

TIEA241 Automaatit ja kieliopit, kevät Antti-Juhani Kaijanaho. 12. kesäkuuta 2013 TIEA241 Automaatit ja kieliopit, kevät 2012 Antti-Juhani Kaijanaho TIETOTEKNIIKAN LAITOS 12. kesäkuuta 2013 Sisällys t Chomskyn hierarkia (ja vähän muutakin) kieli säännöllinen LL(k) LR(1) kontekstiton

Lisätiedot

2. Yhteydettömät kielet

2. Yhteydettömät kielet 2. Yhteydettömät kielet Yhteydettömät eli kontekstittomat kielet (context-free language, CFL) ovat säännöllisiä kieliä laajempi luokka formaaleja kieliä. Ne voidaan esittää yhteydettömillä kieliopeilla

Lisätiedot

Aloitus. TIEA241 Automaatit ja kieliopit, kevät 2011 (IV) Antti-Juhani Kaijanaho. 14. maaliskuuta 2011 TIETOTEKNIIKAN LAITOS. Aloitus.

Aloitus. TIEA241 Automaatit ja kieliopit, kevät 2011 (IV) Antti-Juhani Kaijanaho. 14. maaliskuuta 2011 TIETOTEKNIIKAN LAITOS. Aloitus. TIEA241 Automaatit ja kieliopit, kevät 2011 (IV) Antti-Juhani Kaijanaho TIETOTEKNIIKAN LAITOS 14. maaliskuuta 2011 Sisällys Sisällys Kurssin käytännöt Kurssin sivuilla http://users.jyu.fi/~antkaij/opetus/auki/2011/

Lisätiedot

TIEA241 Automaatit ja kieliopit, kevät Antti-Juhani Kaijanaho. 16. helmikuuta 2012

TIEA241 Automaatit ja kieliopit, kevät Antti-Juhani Kaijanaho. 16. helmikuuta 2012 TIEA241 Automaatit ja kieliopit, kevät 2012 Antti-Juhani Kaijanaho TIETOTEKNIIKAN LAITOS 16. helmikuuta 2012 Sisällys t Sisällys t Chomskyn hierarkia kieli säännöllinen kontekstiton kontekstinen rekursiivisesti

Lisätiedot

tään painetussa ja käsin kirjoitetussa materiaalissa usein pienillä kreikkalaisilla

tään painetussa ja käsin kirjoitetussa materiaalissa usein pienillä kreikkalaisilla 2.5. YDIN-HASKELL 19 tään painetussa ja käsin kirjoitetussa materiaalissa usein pienillä kreikkalaisilla kirjaimilla. Jos Γ ja ovat tyyppilausekkeita, niin Γ on tyyppilauseke. Nuoli kirjoitetaan koneella

Lisätiedot

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

TIEA241 Automaatit ja kieliopit, syksy Antti-Juhani Kaijanaho. 3. lokakuuta 2016 TIEA241 Automaatit ja kieliopit, syksy 2016 Antti-Juhani Kaijanaho TIETOTEKNIIKAN LAITOS 3. lokakuuta 2016 Sisällys n tunnistin Jay : An Efficient Context-Free Parsing Algorithm. Communications of the

Lisätiedot

jäsentäminen TIEA241 Automaatit ja kieliopit, syksy 2015 Antti-Juhani Kaijanaho 26. marraskuuta 2015 TIETOTEKNIIKAN LAITOS

jäsentäminen TIEA241 Automaatit ja kieliopit, syksy 2015 Antti-Juhani Kaijanaho 26. marraskuuta 2015 TIETOTEKNIIKAN LAITOS TIEA241 Automaatit ja kieliopit, syksy 2015 Antti-Juhani Kaijanaho TIETOTEKNIIKAN LAITOS 26. marraskuuta 2015 Sisällys Tunnistamis- ja jäsennysongelma Olkoon G = (N, Σ, P, S) kontekstiton kielioppi ja

Lisätiedot

MS-A0402 Diskreetin matematiikan perusteet

MS-A0402 Diskreetin matematiikan perusteet MS-A040 Diskreetin matematiikan perusteet Osa : Relaatiot ja funktiot Riikka Kangaslampi 017 Matematiikan ja systeemianalyysin laitos Aalto-yliopisto Relaatiot Relaatio Määritelmä 1 Relaatio joukosta A

Lisätiedot

Lisää pysähtymisaiheisia ongelmia

Lisää pysähtymisaiheisia ongelmia Lisää pysähtymisaiheisia ongelmia Lause: Pysähtymättömyysongelma H missä H = { w111x w validi koodi, M w ei pysähdy syötteellä x } ei ole rekursiivisesti lueteltava. Todistus: Pysähtymisongelman komplementti

Lisätiedot

Yhteydettömän kieliopin jäsennysongelma

Yhteydettömän kieliopin jäsennysongelma Yhteydettömän kieliopin jäsennysongelma Yhteydettömän kieliopin jäsennysongelmalla tarkoitetaan laskentaongelmaa Annettu: yhteydetön kielioppi G, merkkijono w Kysymys: päteekö w L(G). Ongelma voidaan periaatteessa

Lisätiedot

Kontekstittomat jäsennysmenetelmät

Kontekstittomat jäsennysmenetelmät Kontekstittomat jäsennysmenetelmät Yleistä, kontekstittomat kieliopit, kokoava ja osittava jäsentäminen Lili Aunimo lili.aunimo@helsinki.fi Helsingin yliopisto Kieliteknologia Lili Aunimo Kontekstittomat

Lisätiedot

811120P Diskreetit rakenteet

811120P Diskreetit rakenteet 811120P Diskreetit rakenteet 2016-2017 1. Algoritmeista 1.1 Algoritmin käsite Algoritmi keskeinen laskennassa Määrittelee prosessin, joka suorittaa annetun tehtävän Esimerkiksi Nimien järjestäminen aakkosjärjestykseen

Lisätiedot

ITKP102 Ohjelmointi 1 (6 op)

ITKP102 Ohjelmointi 1 (6 op) ITKP102 Ohjelmointi 1 (6 op) Tentaattori: Antti-Jussi Lakanen 7. huhtikuuta 2017 Vastaa kaikkiin tehtäviin. Tee jokainen tehtävä erilliselle konseptiarkille. Kirjoittamasi luokat, funktiot ja aliohjelmat

Lisätiedot

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

T Syksy 2002 Tietojenkäsittelyteorian perusteet Harjoitus 8 Demonstraatiotehtävien ratkaisut T-79.148 Syksy 2002 Tietojenkäsittelyteorian perusteet Harjoitus 8 Demonstraatiotehtävien ratkaisut 4. Tehtävä: Laadi algoritmi, joka testaa onko annetun yhteydettömän kieliopin G = V, Σ, P, S tuottama

Lisätiedot

Algoritmit 1. Luento 3 Ti Timo Männikkö

Algoritmit 1. Luento 3 Ti Timo Männikkö Algoritmit 1 Luento 3 Ti 17.1.2017 Timo Männikkö Luento 3 Algoritmin analysointi Rekursio Lomituslajittelu Aikavaativuus Tietorakenteet Pino Algoritmit 1 Kevät 2017 Luento 3 Ti 17.1.2017 2/27 Algoritmien

Lisätiedot

S BAB ABA A aas bba B bbs c

S BAB ABA A aas bba B bbs c T-79.148 Kevät 2003 Tietojenkäsittelyteorian perusteet Harjoitus 8 Demonstraatiotehtävien ratkaisut 4. Tehtävä: Laadi algoritmi, joka testaa onko annetun yhteydettömän kieliopin G = V, Σ, P, S) tuottama

Lisätiedot

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

Säännölliset kielet. Sisällys. Säännölliset kielet. Säännölliset operaattorit. Säännölliset kielet TIEA241 Automaatit ja kieliopit, kesä 2013 Antti-Juhani Kaijanaho TIETOTEKNIIKAN LAITOS 24. toukokuuta 2013 Sisällys Formaalit kielet On tapana sanoa, että merkkijonojen joukko on (formaali) kieli. Hieman

Lisätiedot

Rekursiiviset palautukset [HMU 9.3.1]

Rekursiiviset palautukset [HMU 9.3.1] Rekursiiviset palautukset [HMU 9.3.1] Yleisesti sanomme, että ongelma P voidaan palauttaa ongelmaan Q, jos mistä tahansa ongelmalle Q annetusta ratkaisualgoritmista voidaan jotenkin muodostaa ongelmalle

Lisätiedot

Muodolliset kieliopit

Muodolliset kieliopit Muodolliset kieliopit Luonnollisen kielen lauseenmuodostuksessa esiintyy luonnollisia säännönmukaisuuksia. Esimerkiksi, on jokseenkin mielekästä väittää, että luonnollisen kielen lauseet koostuvat nk.

Lisätiedot

Chomskyn hierarkia ja yhteysherkät kieliopit

Chomskyn hierarkia ja yhteysherkät kieliopit Chomskyn hierarkia ja yhteysherkät kieliopit Laskennan teorian opintopiiri Tuomas Hakoniemi 21. helmikuuta 2014 Käsittelen tässä laskennan teorian opintopiirin harjoitustyössäni muodollisten kielioppien

Lisätiedot

Ei-yhteydettömät kielet [Sipser luku 2.3]

Ei-yhteydettömät kielet [Sipser luku 2.3] Ei-yhteydettömät kielet [Sipser luku 2.3] Yhteydettömille kielille pätee samantapainen pumppauslemma kuin säännöllisille kielille. Siinä kuitenkin pumpataan kahta osamerkkijonoa samaan tahtiin. Lause 2.25

Lisätiedot

Laskennan mallit (syksy 2010) Harjoitus 8, ratkaisuja

Laskennan mallit (syksy 2010) Harjoitus 8, ratkaisuja 582206 Laskennan mallit (syksy 2010) Harjoitus 8, ratkaisuja 1. Tarkastellaan yhteydetöntä kielioppia S SAB ε A aa a B bb ε Esitä merkkijonolle aa kaksi erilaista jäsennyspuuta ja kummallekin siitä vastaava

Lisätiedot

Rajoittamattomat kieliopit (Unrestricted Grammars)

Rajoittamattomat kieliopit (Unrestricted Grammars) Rajoittamattomat kieliopit (Unrestricted Grammars) Laura Pesola Laskennanteorian opintopiiri 13.2.2013 Formaalit kieliopit Sisältävät aina Säännöt (esim. A -> B C abc) Muuttujat (A, B, C, S) Aloitussymboli

Lisätiedot

815338A Ohjelmointikielten periaatteet Harjoitus 3 vastaukset

815338A Ohjelmointikielten periaatteet Harjoitus 3 vastaukset 815338A Ohjelmointikielten periaatteet 2015-2016. Harjoitus 3 vastaukset Harjoituksen aiheena ovat imperatiivisten kielten muuttujiin liittyvät kysymykset. Tehtävä 1. Määritä muuttujien max_num, lista,

Lisätiedot

jäsentämisestä TIEA241 Automaatit ja kieliopit, syksy 2015 Antti-Juhani Kaijanaho 27. marraskuuta 2015 TIETOTEKNIIKAN LAITOS

jäsentämisestä TIEA241 Automaatit ja kieliopit, syksy 2015 Antti-Juhani Kaijanaho 27. marraskuuta 2015 TIETOTEKNIIKAN LAITOS TIEA241 Automaatit ja kieliopit, syksy 2015 Antti-Juhani Kaijanaho TIETOTEKNIIKAN LAITOS 27. marraskuuta 2015 Sisällys Rekursiivisesti etenevä engl. recursive descent parsing Tehdään kustakin välikesymbolista

Lisätiedot

ALKEIS-kielen semantiikan aksiomaattinen määrittely

ALKEIS-kielen semantiikan aksiomaattinen määrittely ALKEIS-kielen semantiikan aksiomaattinen määrittely Antti Jokipii antti.jokipii@republica.fi Antti Vuorenmaa anvuoren@cc.jyu.fi Eero Lempinen eerolem@cc.jyu.fi Pete Räsänen peter@cc.jyu.fi Tiivistelmä

Lisätiedot

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

TIEA241 Automaatit ja kieliopit, kevät 2011 (IV) Antti-Juhani Kaijanaho. 29. huhtikuuta 2011 TIEA241 Automaatit ja kieliopit, kevät 2011 (IV) Antti-Juhani Kaijanaho TIETOTEKNIIKAN LAITOS 29. huhtikuuta 2011 Sisällys Chomskyn hierarkia kieli säännöllinen kontekstiton kontekstinen rekursiivisesti

Lisätiedot

Syntaksi. TIE448 Kääntäjätekniikka, syksy Antti-Juhani Kaijanaho. 22. syyskuuta 2009 TIETOTEKNIIKAN LAITOS. Syntaksi. Aluksi.

Syntaksi. TIE448 Kääntäjätekniikka, syksy Antti-Juhani Kaijanaho. 22. syyskuuta 2009 TIETOTEKNIIKAN LAITOS. Syntaksi. Aluksi. TIE448 Kääntäjätekniikka, syksy 2009 Antti-Juhani Kaijanaho TIETOTEKNIIKAN LAITOS 22. syyskuuta 2009 Sisällys Sisällys Seuraava deadline Vaihe B tiistai 6.10. klo 10 selaaja ja jäsentäjä toimivat Kääntäjän

Lisätiedot

811120P Diskreetit rakenteet

811120P Diskreetit rakenteet 811120P Diskreetit rakenteet 2018-2019 1. Algoritmeista 1.1 Algoritmin käsite Algoritmi keskeinen laskennassa Määrittelee prosessin, joka suorittaa annetun tehtävän Esimerkiksi Nimien järjestäminen aakkosjärjestykseen

Lisätiedot

815338A Ohjelmointikielten periaatteet 2014-2015. Harjoitus 7 Vastaukset

815338A Ohjelmointikielten periaatteet 2014-2015. Harjoitus 7 Vastaukset 815338A Ohjelmointikielten periaatteet 2014-2015. Harjoitus 7 Vastaukset Harjoituksen aiheena on funktionaalinen ohjelmointi Scheme- ja Haskell-kielillä. Voit suorittaa ohjelmat osoitteessa https://ideone.com/

Lisätiedot

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

TIEA241 Automaatit ja kieliopit, kevät 2011 (IV) Antti-Juhani Kaijanaho. 31. maaliskuuta 2011 TIEA241 Automaatit ja kieliopit, kevät 2011 (IV) Antti-Juhani Kaijanaho TIETOTEKNIIKAN LAITOS 31. maaliskuuta 2011 Sisällys Sisällys Chomskyn hierarkia kieli säännöllinen kontekstiton kontekstinen rekursiivisesti

Lisätiedot

Täydentäviä muistiinpanoja kontekstittomien kielioppien jäsentämisestä

Täydentäviä muistiinpanoja kontekstittomien kielioppien jäsentämisestä Täydentäviä muistiinpanoja kontekstittomien kielioppien jäsentämisestä Antti-Juhani Kaijanaho 30. marraskuuta 2015 1 Yksiselitteiset operaattorikieliopit 1.1 Aritmeettiset lausekkeet Tällä kurssilla on

Lisätiedot

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

TIEA241 Automaatit ja kieliopit, kevät 2011 (IV) Antti-Juhani Kaijanaho. 31. maaliskuuta 2011 TIEA241 Automaatit ja kieliopit, kevät 2011 (IV) Antti-Juhani Kaijanaho TIETOTEKNIIKAN LAITOS 31. maaliskuuta 2011 Sisällys Sisällys Chomskyn hierarkia kieli säännöllinen kontekstiton kontekstinen rekursiivisesti

Lisätiedot

jäsennyksestä TIEA241 Automaatit ja kieliopit, syksy 2016 Antti-Juhani Kaijanaho 29. syyskuuta 2016 TIETOTEKNIIKAN LAITOS Kontekstittomien kielioppien

jäsennyksestä TIEA241 Automaatit ja kieliopit, syksy 2016 Antti-Juhani Kaijanaho 29. syyskuuta 2016 TIETOTEKNIIKAN LAITOS Kontekstittomien kielioppien TIEA241 Automaatit ja kieliopit, syksy 2016 Antti-Juhani Kaijanaho TIETOTEKNIIKAN LAITOS 29. syyskuuta 2016 Sisällys Harjoitustehtävätilastoa Tilanne 29.9.2016 klo 8:41 (lähes kaikki kommentoitu) passed

Lisätiedot

PERL. TIE Principles of Programming Languages. Ryhmä 4: Joonas Lång & Jasmin Laitamäki

PERL. TIE Principles of Programming Languages. Ryhmä 4: Joonas Lång & Jasmin Laitamäki PERL TIE-20306 Principles of Programming Languages Ryhmä 4: Joonas Lång & Jasmin Laitamäki 1. Johdanto Perl on ohjelmointikielten perhe, johon kuuluu Perl 5 ja Perl 6. Kielet ovat kuitenkin erilliset ohjelmointikielet

Lisätiedot

ELM GROUP 04. Teemu Laakso Henrik Talarmo

ELM GROUP 04. Teemu Laakso Henrik Talarmo ELM GROUP 04 Teemu Laakso Henrik Talarmo 23. marraskuuta 2017 Sisältö 1 Johdanto 1 2 Ominaisuuksia 2 2.1 Muuttujat ja tietorakenteet...................... 2 2.2 Funktiot................................

Lisätiedot

Todistus: Aiemmin esitetyn mukaan jos A ja A ovat rekursiivisesti lueteltavia, niin A on rekursiivinen.

Todistus: Aiemmin esitetyn mukaan jos A ja A ovat rekursiivisesti lueteltavia, niin A on rekursiivinen. Lause: Tyhjyysongelma ei ole osittain ratkeava; ts. kieli ei ole rekursiivisesti lueteltava. L e = { w { 0, 1 } L(M w ) = } Todistus: Aiemmin esitetyn mukaan jos A ja A ovat rekursiivisesti lueteltavia,

Lisätiedot

Sisällys. 3. Muuttujat ja operaatiot. Muuttujat ja operaatiot. Muuttujat. Operaatiot. Imperatiivinen laskenta. Muuttujat. Esimerkkejä: Operaattorit.

Sisällys. 3. Muuttujat ja operaatiot. Muuttujat ja operaatiot. Muuttujat. Operaatiot. Imperatiivinen laskenta. Muuttujat. Esimerkkejä: Operaattorit. 3. Muuttujat ja operaatiot Sisällys Imperatiivinen laskenta. Muuttujat. Nimi ja arvo. Muuttujan nimeäminen. Muuttujan tyyppi.. Operandit. Arvon sijoitus muuttujaan. Aritmeettiset operaattorit. Arvojen

Lisätiedot

TIEA241 Automaatit ja kieliopit, kesä Antti-Juhani Kaijanaho. 10. kesäkuuta 2013

TIEA241 Automaatit ja kieliopit, kesä Antti-Juhani Kaijanaho. 10. kesäkuuta 2013 TIEA241 Automaatit ja kieliopit, kesä 2013 etenevä Antti-Juhani Kaijanaho TIETOTEKNIIKAN LAITOS 10. kesäkuuta 2013 Sisällys etenevä etenevä Chomskyn hierarkia (ja muutakin) kieli säännöllinen LL(k) LR(1)

Lisätiedot

3. Muuttujat ja operaatiot 3.1

3. Muuttujat ja operaatiot 3.1 3. Muuttujat ja operaatiot 3.1 Sisällys Imperatiivinen laskenta. Muuttujat. Nimi ja arvo. Muuttujan nimeäminen. Muuttujan tyyppi. Operaattorit. Operandit. Arvon sijoitus muuttujaan. Aritmeettiset operaattorit.

Lisätiedot

1. Algoritmi 1.1 Sisällys Algoritmin määritelmä. Aiheen pariin johdatteleva esimerkki. Muuttujat ja operaatiot (sijoitus, aritmetiikka ja vertailu). Algoritmista ohjelmaksi. 1.2 Algoritmin määritelmä Ohjelmointi

Lisätiedot

Jäsennysalgoritmeja. TIE448 Kääntäjätekniikka, syksy Antti-Juhani Kaijanaho. 29. syyskuuta 2009 TIETOTEKNIIKAN LAITOS. Jäsennysalgoritmeja

Jäsennysalgoritmeja. TIE448 Kääntäjätekniikka, syksy Antti-Juhani Kaijanaho. 29. syyskuuta 2009 TIETOTEKNIIKAN LAITOS. Jäsennysalgoritmeja TIE448 Kääntäjätekniikka, syksy 2009 Antti-Juhani Kaijanaho TIETOTEKNIIKAN LAITOS 29. syyskuuta 2009 Sisällys Sisällys Seuraava deadline Vaihe B tiistai 6.10. klo 10 selaaja ja jäsentäjä toimivat Kääntäjän

Lisätiedot

T Syksy 2004 Logiikka tietotekniikassa: perusteet Laskuharjoitus 7 (opetusmoniste, kappaleet )

T Syksy 2004 Logiikka tietotekniikassa: perusteet Laskuharjoitus 7 (opetusmoniste, kappaleet ) T-79144 Syksy 2004 Logiikka tietotekniikassa: perusteet Laskuharjoitus 7 (opetusmoniste, kappaleet 11-22) 26 29102004 1 Ilmaise seuraavat lauseet predikaattilogiikalla: a) Jokin porteista on viallinen

Lisätiedot

4. Lausekielinen ohjelmointi 4.1

4. Lausekielinen ohjelmointi 4.1 4. Lausekielinen ohjelmointi 4.1 Sisällys Konekieli, symbolinen konekieli ja lausekieli. Lausekielestä konekieleksi: - Lähdekoodi, tekstitiedosto ja tekstieditorit. - Kääntäminen ja tulkinta. - Kääntäminen,

Lisätiedot

811120P Diskreetit rakenteet

811120P Diskreetit rakenteet 811120P Diskreetit rakenteet 2016-2017 ari.vesanen (at) oulu.fi 5. Rekursio ja induktio Rekursio tarkoittaa jonkin asian määrittelyä itseensä viittaamalla Tietojenkäsittelyssä algoritmin määrittely niin,

Lisätiedot

811120P Diskreetit rakenteet

811120P Diskreetit rakenteet 811120P Diskreetit rakenteet 2016-2017 4. Joukot, relaatiot ja funktiot Osa 3: Funktiot 4.3 Funktiot Olkoot A ja B joukkoja. Funktio joukosta A joukkoon B on sääntö, joka liittää yksikäsitteisesti määrätyn

Lisätiedot

etunimi, sukunimi ja opiskelijanumero ja näillä

etunimi, sukunimi ja opiskelijanumero ja näillä Sisällys 1. Algoritmi Algoritmin määritelmä. Aiheen pariin johdatteleva esimerkki. ja operaatiot (sijoitus, aritmetiikka ja vertailu). Algoritmista ohjelmaksi. 1.1 1.2 Algoritmin määritelmä Ohjelmointi

Lisätiedot

A ja B pelaavat sarjan pelejä. Sarjan voittaja on se, joka ensin voittaa n peliä.

A ja B pelaavat sarjan pelejä. Sarjan voittaja on se, joka ensin voittaa n peliä. Esimerkki otteluvoiton todennäköisyys A ja B pelaavat sarjan pelejä. Sarjan voittaja on se, joka ensin voittaa n peliä. Yksittäisessä pelissä A voittaa todennäköisyydellä p ja B todennäköisyydellä q =

Lisätiedot

Automaatit. Muodolliset kielet

Automaatit. Muodolliset kielet Automaatit Automaatit ovat teoreettisia koneita, jotka käsittelevät muodollisia sanoja. Automaatti lukee muodollisen sanan kirjain kerrallaan, vasemmalta oikealle, ja joko hyväksyy tai hylkää sanan. Täten

Lisätiedot

Hahmon etsiminen syotteesta (johdatteleva esimerkki)

Hahmon etsiminen syotteesta (johdatteleva esimerkki) Hahmon etsiminen syotteesta (johdatteleva esimerkki) Unix-komennolla grep hahmo [ tiedosto ] voidaan etsia hahmon esiintymia tiedostosta (tai syotevirrasta): $ grep Kisaveikot SM-tulokset.txt $ ps aux

Lisätiedot

TIEA241 Automaatit ja kieliopit, kesä Antti-Juhani Kaijanaho. 26. kesäkuuta 2013

TIEA241 Automaatit ja kieliopit, kesä Antti-Juhani Kaijanaho. 26. kesäkuuta 2013 ja ja TIEA241 Automaatit ja kieliopit, kesä 2012 Antti-Juhani Kaijanaho TIETOTEKNIIKAN LAITOS 26. kesäkuuta 2013 Sisällys ja ja on yksi vanhimmista tavoista yrittää mallittaa mekaanista laskentaa. Kurt

Lisätiedot

arvostelija JavaCC Petri Kärki Helsinki 15. huhtikuuta 2005 Seminaarityö HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos

arvostelija JavaCC Petri Kärki Helsinki 15. huhtikuuta 2005 Seminaarityö HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos hyväksymispäivä arvosana arvostelija JavaCC Petri Kärki Helsinki 15. huhtikuuta 2005 Seminaarityö HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos Sisältö i 1 Johdanto 1 2 JavaCC 1 2.1 Selaaja...................................

Lisätiedot

Algebralliset tietotyypit ym. TIEA341 Funktio ohjelmointi 1 Syksy 2005

Algebralliset tietotyypit ym. TIEA341 Funktio ohjelmointi 1 Syksy 2005 Algebralliset tietotyypit ym. TIEA341 Funktio ohjelmointi 1 Syksy 2005 Tällä luennolla Algebralliset tietotyypit Hahmonsovitus (pattern matching) Primitiivirekursio Esimerkkinä binäärinen hakupuu Muistattehan...

Lisätiedot

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

ICS-C2000 Tietojenkäsittelyteoria. Tähän mennessä: säännölliset kielet. Säännöllisten kielten pumppauslemma M := ICS-C2000 Tietojenkäsittelyteoria Luento 5: Säännöllisten kielten pumppauslemma; yhteydettömät kieliopit Aalto-yliopisto Perustieteiden korkeakoulu Tietotekniikan laitos Alue ja aiheet: Orposen prujun

Lisätiedot

Täydentäviä muistiinpanoja jäsennysalgoritmeista

Täydentäviä muistiinpanoja jäsennysalgoritmeista äydentäviä muistiinpanoja jäsennysalgoritmeista Antti-Juhani Kaijanaho 7. helmikuuta 2012 1 simerkki arleyn algoritmin soveltamisesta arkastellaan kielioppia G : + () c ja sovelletaan arleyn algoritmia

Lisätiedot

Palautetta viime luennosta

Palautetta viime luennosta Palautetta viime luennosta Kuka saa ja kenen täytyy suorittaa 5op kokonaisuus? Sivuaineopiskelijat suorittavat jos heidän sivuainekokonaisuuteen on merkitty niin Kokonaisuuksia on useita eri tiedekunnittain,

Lisätiedot

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

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

Lisätiedot

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

Äärellisten automaattien ja säännöllisten kielten ekvivalenssi Äärellisten automaattien ja säännöllisten kielten ekvivalenssi Osoitamme seuraavan keskeisen tuloksen: Lause 1.8: [Sipser Thm. 1.54] Kieli on säännöllinen, jos ja vain jos jokin säännöllinen lauseke esittää

Lisätiedot

Ohjelmoinnin peruskurssien laaja oppimäärä

Ohjelmoinnin peruskurssien laaja oppimäärä Ohjelmoinnin peruskurssien laaja oppimäärä Luento 8: Pienen ohjelmointikielen tulkki (ohjelmoitava laskin) (mm. SICP 4-4.1.5 osin) Riku Saikkonen 15. 11. 2012 Sisältö 1 Nelilaskintulkki, globaalit muuttujat

Lisätiedot

on rekursiivisesti numeroituva, mutta ei rekursiivinen.

on rekursiivisesti numeroituva, mutta ei rekursiivinen. 6.5 Turingin koneiden pysähtymisongelma Lause 6.9 Kieli H = { M pysähtyy syötteellä w} on rekursiivisesti numeroituva, mutta ei rekursiivinen. Todistus. Todetaan ensin, että kieli H on rekursiivisesti

Lisätiedot

2) Aliohjelma, jonka toiminta perustuu sivuvaikutuksiin: aliohjelma muuttaa parametrejaan tai globaaleja muuttujia, tulostaa jotakin jne.

2) Aliohjelma, jonka toiminta perustuu sivuvaikutuksiin: aliohjelma muuttaa parametrejaan tai globaaleja muuttujia, tulostaa jotakin jne. Proseduurit Proseduuri voi olla 1) Funktio, joka palauttaa jonkin arvon: real function sinc(x) real x sinc = sin(x)/x... y = sinc(1.5) 2) Aliohjelma, jonka toiminta perustuu sivuvaikutuksiin: aliohjelma

Lisätiedot

815338A Ohjelmointikielten periaatteet Harjoitus 6 Vastaukset

815338A Ohjelmointikielten periaatteet Harjoitus 6 Vastaukset 815338A Ohjelmointikielten periaatteet 2015-2016. Harjoitus 6 Vastaukset Harjoituksen aiheena on funktionaalinen ohjelmointi Scheme- ja Haskell-kielillä. Voit suorittaa ohjelmat osoitteessa https://ideone.com/

Lisätiedot

Vaihtoehtoinen tapa määritellä funktioita f : N R on

Vaihtoehtoinen tapa määritellä funktioita f : N R on Rekursio Funktio f : N R määritellään yleensä antamalla lauseke funktion arvolle f (n). Vaihtoehtoinen tapa määritellä funktioita f : N R on käyttää rekursiota: 1 (Alkuarvot) Ilmoitetaan funktion arvot

Lisätiedot

811312A Tietorakenteet ja algoritmit Kertausta kurssin alkuosasta

811312A Tietorakenteet ja algoritmit Kertausta kurssin alkuosasta 811312A Tietorakenteet ja algoritmit 2017-2018 Kertausta kurssin alkuosasta II Perustietorakenteet Pino, jono ja listat tunnettava Osattava soveltaa rakenteita algoritmeissa Osattava päätellä operaatioiden

Lisätiedot

Rekursio. Funktio f : N R määritellään yleensä antamalla lauseke funktion arvolle f (n). Vaihtoehtoinen tapa määritellä funktioita f : N R on

Rekursio. Funktio f : N R määritellään yleensä antamalla lauseke funktion arvolle f (n). Vaihtoehtoinen tapa määritellä funktioita f : N R on Rekursio Funktio f : N R määritellään yleensä antamalla lauseke funktion arvolle f (n). Vaihtoehtoinen tapa määritellä funktioita f : N R on käyttää rekursiota: Rekursio Funktio f : N R määritellään yleensä

Lisätiedot

ICS-C2000 Tietojenkäsittelyteoria

ICS-C2000 Tietojenkäsittelyteoria ICS-C2000 Tietojenkäsittelyteoria Luento 5: Säännöllisten kielten pumppauslemma; yhteydettömät kieliopit Aalto-yliopisto Perustieteiden korkeakoulu Tietotekniikan laitos Kevät 2016 Alue ja aiheet: Orposen

Lisätiedot

JOHDATUS TEKOÄLYYN TEEMU ROOS

JOHDATUS TEKOÄLYYN TEEMU ROOS JOHDATUS TEKOÄLYYN TEEMU ROOS LUONNOLLISEN KIELEN KÄSITTELY (NATURAL LANGUAGE PROCESSING, NLP) TEKOÄLYSOVELLUKSET, JOTKA LIITTYVÄT IHMISTEN KANSSA (TAI IHMISTEN VÄLISEEN) KOMMUNIKAATIOON, OVAT TEKEMISISSÄ

Lisätiedot

Matematiikan tukikurssi

Matematiikan tukikurssi Matematiikan tukikurssi Kurssikerta 7 1 Useamman muuttujan funktion raja-arvo Palautetaan aluksi mieliin yhden muuttujan funktion g(x) raja-arvo g(x). x a Tämä raja-arvo kertoo, mitä arvoa funktio g(x)

Lisätiedot

14.1 Rekursio tyypitetyssä lambda-kielessä

14.1 Rekursio tyypitetyssä lambda-kielessä Luku 14 Rekursiiviset tyypit Edellisessä luvussa esitetyt tietue- ja varianttityypit eivät yksinään riitä kovin mielenkiintoisten tietorakenteiden toteuttamiseen. Useimmissa ohjelmissa tarvitaan erilaisia

Lisätiedot

4. Lausekielinen ohjelmointi 4.1

4. Lausekielinen ohjelmointi 4.1 4. Lausekielinen ohjelmointi 4.1 Sisällys Konekieli, symbolinen konekieli ja lausekieli. Hyvä ohjelmointitapa. Lausekielestä konekieleksi: - Lähdekoodi, tekstitiedosto ja tekstieditorit. - Kääntäminen

Lisätiedot

4 Matemaattinen induktio

4 Matemaattinen induktio 4 Matemaattinen induktio Joidenkin väitteiden todistamiseksi pitää näyttää, että kaikilla luonnollisilla luvuilla on jokin ominaisuus P. Esimerkkejä tällaisista väitteistä ovat vaikkapa seuraavat: kaikilla

Lisätiedot

AS-0.1103 C-ohjelmoinnin peruskurssi 2013: C-kieli käytännössä ja erot Pythoniin

AS-0.1103 C-ohjelmoinnin peruskurssi 2013: C-kieli käytännössä ja erot Pythoniin AS-0.1103 C-ohjelmoinnin peruskurssi 2013: C-kieli käytännössä ja erot Pythoniin Raimo Nikkilä Aalto-yliopiston sähkötekniikan korkeakoulu - Automaation tietotekniikan tutkimusryhmä 17. tammikuuta 2013

Lisätiedot

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

(0 1) 010(0 1) Koska kieli on yksinkertainen, muodostetaan sen tunnistava epädeterministinen q 0 q 1 q 2 q3 T-79.48 Tietojenkäsittelyteorian perusteet Tentti 25..23 mallivastaukset. Tehtävä: Kuvaa seuraavat kielet sekä säännölisten lausekkeiden että determinististen äärellisten automaattien avulla: (a) L = {w

Lisätiedot

Ehto- ja toistolauseet

Ehto- ja toistolauseet Ehto- ja toistolauseet 1 Ehto- ja toistolauseet Uutena asiana opetellaan ohjelmointilauseet / rakenteet, jotka mahdollistavat: Päätösten tekemisen ohjelman suorituksen aikana (esim. kyllä/ei) Samoja lauseiden

Lisätiedot

ITKP102 Ohjelmointi 1 (6 op)

ITKP102 Ohjelmointi 1 (6 op) ITKP102 Ohjelmointi 1 (6 op) Tentaattori: Antti-Jussi Lakanen 20. huhtikuuta 2018 Vastaa kaikkiin tehtäviin. Tee kukin tehtävä omalle konseptiarkille. Noudata ohjelmointitehtävissä kurssin koodauskäytänteitä.

Lisätiedot

ITKP102 Ohjelmointi 1 (6 op)

ITKP102 Ohjelmointi 1 (6 op) ITKP102 Ohjelmointi 1 (6 op) Tentaattori: Antti-Jussi Lakanen 22. huhtikuuta 2016 Vastaa kaikkiin tehtäviin. Tee jokainen tehtävä erilliselle konseptiarkille! Kirjoittamasi luokat, funktiot ja aliohjelmat

Lisätiedot

Tehtävä 2: Säännölliset lausekkeet

Tehtävä 2: Säännölliset lausekkeet Tehtävä 2: Säännölliset lausekkeet Kun tietokoneohjelmalla luetaan käyttäjän syötettä, olisi syöte aina syytä tarkistaa. Syötteessä voi olla vääriä merkkejä tai merkkejä väärillä paikoilla (syntaktinen

Lisätiedot

Rekursiiviset tyypit

Rekursiiviset tyypit Rekursiiviset tyypit TIES542 Ohjelmointikielten periaatteet, kevät 2007 Antti-Juhani Kaijanaho Jyväskylän yliopisto Tietotekniikan laitos 20. helmikuuta 2007 Hiloista Kiintopisteet (Ko)rekursio Rekursiiviset

Lisätiedot