Ohjelmointikielten syntaksista ja semantiikasta
|
|
- Aarno Kokkonen
- 6 vuotta sitten
- Katselukertoja:
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 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ätiedot815338A 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ätiedotFORMAALI 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ätiedotTIEA241 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ätiedot11.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ätiedotOngelma(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ätiedotTIEA241 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ätiedot8. 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ätiedotYhteydettö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ätiedotTIEA241 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ätiedotJä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ätiedotICS-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ätiedotTIEA241 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ätiedotAttribuuttikieliopit
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ätiedotuv 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ätiedotLuku 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ätiedot5.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ätiedotTIES542 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ätiedotVasen 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ätiedotTIEA241 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ätiedotSää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ätiedot8. 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ätiedotTIEA241 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ätiedot2. 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ätiedotAloitus. 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ätiedotTIEA241 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ätiedottää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ätiedotTIEA241 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ätiedotjä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ätiedotMS-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ätiedotLisää 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ätiedotYhteydettö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ätiedotKontekstittomat 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ätiedot811120P 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ätiedotITKP102 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ätiedotT 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ätiedotAlgoritmit 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ätiedotS 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ätiedotSää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ätiedotRekursiiviset 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ätiedotMuodolliset 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ätiedotChomskyn 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ätiedotEi-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ätiedotLaskennan 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ätiedotRajoittamattomat 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ätiedot815338A 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ätiedotjä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ätiedotALKEIS-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ätiedotTIEA241 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ätiedotSyntaksi. 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ätiedot811120P 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ätiedot815338A 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ätiedotTIEA241 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ätiedotTä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ätiedotTIEA241 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ätiedotjä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ätiedotPERL. 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ätiedotELM 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ätiedotTodistus: 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ätiedotSisä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ätiedotTIEA241 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ätiedot3. 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ätiedot1. 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ätiedotJä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ätiedotT 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ätiedot4. 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ätiedot811120P 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ätiedot811120P 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ätiedotetunimi, 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ätiedotA 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ätiedotAutomaatit. 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ätiedotHahmon 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ätiedotTIEA241 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ätiedotarvostelija 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ätiedotAlgebralliset 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ätiedotICS-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ätiedotTä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ätiedotPalautetta 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ätiedotJos 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 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ätiedotOhjelmoinnin 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ätiedoton 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ätiedot2) 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ätiedot815338A 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ätiedotVaihtoehtoinen 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ätiedot811312A 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ätiedotRekursio. 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ätiedotICS-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ätiedotJOHDATUS 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ätiedotMatematiikan 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ätiedot14.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ätiedot4. 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ätiedot4 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ätiedotAS-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
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ätiedotEhto- 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ätiedotITKP102 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ätiedotITKP102 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ätiedotTehtä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ätiedotRekursiiviset 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