S if b then S else S S s. (b) Muodosta (a)-kohdan kieliopin kanssa ekvivalentti, so. saman kielen tuottava yksiselitteinen.

Samankaltaiset tiedostot
S if b then S else S S s. (b) Muodosta (a)-kohdan kieliopin kanssa ekvivalentti, so. saman kielen tuottava yksiselitteinen.

ICS-C2000 Tietojenkäsittelyteoria Kevät 2016

Yhteydettömät kieliopit [Sipser luku 2.1]

X 2 = k 21X 1 + U 2 s + k 02 + k 12. (s + k 02 + k 12 )U 1 + k 12 U 2. s 2 + (k 01 + k 21 + k 02 + k 12 ) s + k

HY / Matematiikan ja tilastotieteen laitos Tilastollinen päättely II, kevät 2017 Harjoitus 4 Ratkaisuehdotuksia. Tehtäväsarja I

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

Mat Sovellettu todennäköisyyslasku. Tilastolliset testit. Avainsanat:

815338A Ohjelmointikielten periaatteet Harjoitus 2 vastaukset

Laskennan mallit (syksy 2010) Harjoitus 8, ratkaisuja

S Piirianalyysi 2 Tentti

Yhteydettömän kieliopin jäsennysongelma

T Syksy 2006 Tietojenkäsittelyteorian perusteet T Harjoitus 7 Demonstraatiotehtävien ratkaisut

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

Merkkijonot (strings) (Müldnerin kirjan luku 9) Luennon sisältö. Merkeistä. Merkkien luokittelufunktiot. Merkkijonot Komentoriviparametrit

Merkkijonot (strings) luku 9)

KUINKA PALJON VAROISTA OSAKKEISIIN? Mika Vaihekoski, professori. Lappeenrannan teknillinen yliopisto

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

Tietorakenteet ja algoritmit

Moduli 5: Kehittyneitä piirteitä

Attribuuttikieliopit

2. Yhteydettömät kielet

Ohjelmoinnin peruskurssien laaja oppimäärä

ICS-C2000 Tietojenkäsittelyteoria

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

Intensiteettitaso ja Doplerin ilmiö

Y56 Laskuharjoitukset 3 palautus ma klo 16 mennessä

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

POSITIIVISEN LINSSIN POLTTOVÄLI

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

Loppukurssin järjestelyt C:n edistyneet piirteet

Perusteet. Pasi Sarolahti Aalto University School of Electrical Engineering. C-ohjelmointi Kevät Pasi Sarolahti

Tiedostot. Tiedostot. Tiedostot. Tiedostot. Tiedostot. Tiedostot

tietueet eri tyyppisiä tietoja saman muuttujan arvoiksi

Tietorakenteet ja algoritmit

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

12. laskuharjoituskierros, vko 16, ratkaisut

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

Chomskyn hierarkia ja yhteysherkät kieliopit

1.3 Lohkorakenne muodostetaan käyttämällä a) puolipistettä b) aaltosulkeita c) BEGIN ja END lausekkeita d) sisennystä

S BAB ABA A aas bba B bbs c

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

Loppukurssin järjestelyt

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

Perusteet. Pasi Sarolahti Aalto University School of Electrical Engineering. C-ohjelmointi Kevät Pasi Sarolahti

5.5 Jäsenninkombinaattoreista

RATKAISUT: 8. Momentti ja tasapaino

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

Proseduurit, funktiot ja herättimet - esimerkkeinä Oracle, SQL Server, MySQL ja OCELOT. Jouni Huotari S2008

PROSEDUURIT, FUNKTIOT JA HERÄTTIMET - ESIMERKKEINÄ ORACLE, SQL SERVER, MYSQL JA OCELOT JOUNI HUOTARI K2009

Tietueet. Tietueiden määrittely

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

Ohjelmoinnin peruskurssien laaja oppimäärä

1.3Lohkorakenne muodostetaan käyttämällä a) puolipistettä b) aaltosulkeita c) BEGIN ja END lausekkeita d) sisennystä

= r, s. Jokaisella diedriryhmällä on vastaavanlainen esitys ryhmän O(2) < GL 2 (R) aliryhmänä. r 2 (C) r 2 (B) r 2 (A) s s

Makrojen mystinen maailma lyhyt oppimäärä

Kertausosa. 2. Kuvaan merkityt kulmat ovat samankohtaisia kulmia. Koska suorat s ja t ovat yhdensuuntaisia, kulmat ovat yhtä suuria.

Binäärioperaatiot Tiedostot ja I/O

Viikkotehtävät IV, ratkaisut

Luennon sisältö Tyypit int, char, float, double signed, unsigned short, long Vakiot const Rakenteet if, for, while, switch, do-while Syöttö ja tulostu

C-kielessä taulukko on joukko peräkkäisiä muistipaikkoja, jotka kaikki pystyvät tallettamaan samaa tyyppiä olevaa tietoa.

7.lk matematiikka. Geometria 1. Janne Koponen versio 2.0

Sosiaalihuollon kertomusmerkintä

RATKAISUT: 17. Tasavirtapiirit

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

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

6.3. AVR_rauta. EEPROM-muisti pva

Rakenteiset tietotyypit Moniulotteiset taulukot

Ohjeet. AS C-ohjelmoinnin peruskurssi Aalto-yliopiston sahkotekniikan korkeakoulu Tentti , Raimo Nikkila

4.3 Liikemäärän säilyminen

Tilastotieteen jatkokurssi 8. laskuharjoitusten ratkaisuehdotukset (viikot 13 ja 14)

Perusteet. Pasi Sarolahti Aalto University School of Electrical Engineering. C-ohjelmointi Kevät Pasi Sarolahti

Triathlon Training Programme 12-week Sprint Beginner

Täydentäviä muistiinpanoja jäsennysalgoritmeista

#include <stdio.h> // io-toiminnot. //#define KM_MAILISSA int main( ){

Binäärioperaatiot Tiedostot ja I/O

S SÄHKÖTEKNIIKKA JA ELEKTRONIIKKA

Kahdeksansolmuinen levyelementti

10 Suoran vektorimuotoinen yhtälö

Kääntäjän virheilmoituksia

Kahdeksansolmuinen levyelementti

12. ARKISIA SOVELLUKSIA

Tietorakenteet ja algoritmit

Luku 16 Markkinatasapaino

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

Kirjasto Relaatiotietokannat Kevät Auvinen Annemari Niemi Anu Passoja Jonna Pulli Jari Tersa Tiina

Rajoittamattomat kieliopit (Unrestricted Grammars)

Esimerkki 1: Kahviautomaatti.

Ohjelmoinnin peruskurssien laaja oppimäärä

Laskennan teoria

815338A Ohjelmointikielten periaatteet Harjoitus 7 Vastaukset

TIETORAKENTEET JA ALGORITMIT

C++11 seminaari, kevät Johannes Koskinen

C-kurssi syksy ltö. Luennon sisält. Luento 2: tyypit, rakenteet, makrot Tyypit. signed, unsigned short,, long Vakiot const Rakenteet

Luennon sisält. ltö. C-kurssi syksy ääreet: int ja char. Yksinkertaiset tyypit. Kokonaisluvut. Merkit

SMG-4200 Sähkömagneettisten järjestelmien lämmönsiirto Harjoituksen 1 ratkaisuehdotukset

Tietorakenteet ja algoritmit

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

r u u R Poistetut tehtavat, kunjännitestabiiliusja jännitteensäätö yhdistettiin:

1. Mitä seuraava ohjelma tulostaa? Vastaukseksi riittää yksi rivi joka esittää tulosteen. (6 p)

gallup gallup potentiaali ja voima potentiaali ja voima potentiaali ja voima potentiaali ja voima

Transkriptio:

T-79.148 yky 2003 Tietojenkäittelyteorian peruteet Harjoitu 7 Demontraatiotehtävien ratkaiut 4. Tehtävä: Ooita, että yhteydettömien kielten luokka on uljettu yhdite-, katenaatioja ulkeumaoperaatioiden uhteen, o. jo kielet L 1, L 2 Σ ovat yhteydettömiä, niin amoin ovat myö kielet L 1 L 2, L 1 L 2 ja L 1. Vatau: Olkoon L 1 ja L 2 yhteydettömiä kieliä. Määritellään nyt kieliopit G 1 = (V 1, Σ 1, R 1, 1 ) ja G 2 = (V 2, Σ 2, R 2, 2 ), iten, että L(G 1 ) = L 1 ja L(G 2 ) = L 2. Vaaditaan liäki, että (V 1 Σ 1 ) (V 2 Σ 2 ) =, eli kieliopeia ei eiinny amoja välikkeitä. Koka kieliopin välikkeet voidaan tarvittaea nimetä uudelleen, ei tämä aeta oleellita rajoituta. 5. Tehtävä: Unioni: Olkoon uui välike ja G = (V 1 V 2, Σ 1 Σ 2, R 1 R 2 1 2,. Nyt L(G) = L(G 1 ) L(G 2 ) = L 1 L 2. Näin on, koka :tä voidaan johtaa vain 1 tai 2, joita voidaan edelleen johtaa vain anoja jotka kuuluvat jompaan kumpaan aiemmita kielitä (ääntöjen ekaannukelta vältytään, koka välikejoukot ovat pitevieraita). Katenaatio: Tällä kertaa uui kielioppi G = (V 1 V 2, Σ 1 Σ 2, R 1 R 2 1 2,. Nyt L(G) = L 1 L 2. Kleenen tähti: Tällä kertaa uui kielioppi G = (V 1, Σ 1, R 1 ɛ 1,. Nyt L(G) = L 1 (a) Ooita, että euraava yhteydetön kielioppi on monielitteinen: ele. (b) Muodota (a)-kohdan kieliopin kana ekvivalentti, o. aman kielen tuottava ykielitteinen kielioppi. Vatau: Yhteydetön kielioppi G on monielitteinen, mikäli on olemaa ana w L(G) iten, että w:llä on ainakin kaki erilaita jäennypuuta. Tehtävän kieliopille ykinkertaiin tällainen ana on: if b then if b then ele, joka voidaan jäentää euraavati: ele 1

ele Yleenä ohjelmointikieliä halutaan ele-laue liittää lähinpään mahdollieen if-laueeeen. Ylläolevita puita enimmäinen vataa tätä käytäntöä. Määritellään kielioppi euraavati: G = (V, Σ, P, ) V =, B, U,, b, if, then, ele Σ =, b, if, then, ele P = B U B if b then B ele B U if b then B ele U Tää välikeellä B aadaan johdettua vain ohjelmia, joia kaikilla if-laueilla on ekä then- että ele-haarat. Välikkeellä U johdetaan itten if-laueet, joita puuttuu elehaara. 6. Tehtävä:Laadi rekuriivieti etenevä jäentäjä edelliten harjoituten tehtävän 6 kieliopille. Vatau: Alla oleva C-ohjelma toteuttaa rekuriivien jäentäjän kieliopille: C ; C a begin C end for n time do Tää on ykinkertaitettu hieman edellien lakuharjoitukerran 6. tehtävän kielioppia korvaamalla erilliet numerot terminaalilla n, joka tarkoittaa mitä tahana numeroa. Tärkeimmät ohjelmaa eiintyvät funktiot ovat: C(), () toteuttavat kieliopin varinaiet äännöt lex() lukee yötteetä euraavan lekeemin ja tallettaa en globaaliin muuttujaan current tok. expect(int token) yrittää lukea yötteetä lekeemin token. Mikäli lukeminen epäonnituu annetaan virheilmoitu. conume token() merkitään tämänhetkinen lekeemi käytetyki. Tämä (tai jokin muu vataava funktio) tarvitaan iki, että joiain tapaukia täytyy yötettä lukea yki lekeemi eteenpäin ennen kuin tiedetään, mitä ääntöä täytyy käyttää. Käytännöä ohjelmointikielten jäentäjät toteutetaan yleenä käyttäen lex- ja yacc-työkaluja 1. Näitä lex muodotaa tilakonepohjaien elaajan, joka tunnitaa äännölliillä lauekkeilla määritellyt lekeemit, ja yacc tekee pinoautomaattipohjaien jäentimen annetulle yhteydettömälle kieliopille. 1 Tai niiden johdannaiia. 2

#include <tdio.h> #include <tdlib.h> #include <ctype.h> /* Define the alphabet */ enum TOKEN DO, FOR, END, BEGIN, TIME, OP, C, NUMBER, ERROR ; cont char* token[] = "do", "for", "end", "begin", "time", "a", ";", "NUMBER", NULL ; /* A global variable holding the current token */ int current_tok = ERROR; /* Maximum length of a token */ #define TOKEN_LEN 128 /* declare function correponding to nonterminal */ void (void); void C(void); int lex(void); void conume_token(void); void error(char *t); void expect(int token); void C(void) (); lex(); if (current_tok == C) printf("c => ; C\n"); ele printf("c => \n"); void (void) lex(); witch (current_tok) cae OP: printf(" => a\n"); cae BEGIN: expect(end); printf(" => begin C end\n"); cae FOR: expect(number); 3

expect(time); expect(do); (); printf(" => for N time do \n"); default: error("pare error"); /* int lex(void) return the next token of the input. */ int lex(void) tatic char token_text[token_len]; int po = 0, c, i, next_token = ERROR; /* I there an exiting token already? */ if (current_tok!= ERROR) return current_tok; /* kip whitepace */ do while (c!= EOF && ipace(c)); if (c!= EOF) ungetc(c, tdin); /* read token */ while (c!= EOF && c!= ; &&!ipace(c) && po < TOKEN_LEN) token_text[po++] = c; if (c == ; ) if (po == 0) /* emicolon a token */ next_token = C; ele /* trailing emicolon, leave it for future */ ungetc( ;, tdin); token_text[po] = \0 ; /* trailing zero */ /* identify token */ if (idigit(token_text[0])) /* number? */ next_token = NUMBER; ele /* not a number */ for (i = DO; i < NUMBER; i++) if (!trcmp(token[i], token_text)) next_token = i; current_tok = next_token; return next_token; 4

void conume_token(void) current_tok = ERROR; void error(char *t) printf(t); exit(1); /* try to read a token from input */ void expect(int token) int next_tok = lex(); if (next_tok == token) return; ele error("pare error"); int main(void) int i; return 0; 5