L models. Vaatimusmäärittely. Ryhmä Rajoitteiset



Samankaltaiset tiedostot
L models. Vaatimusmäärittely. Ryhmä Rajoitteiset

L models. Käyttöohje. Ryhmä Rajoitteiset

13. Loogiset operaatiot 13.1

13. Loogiset operaatiot 13.1

Alkuarvot ja tyyppimuunnokset (1/5) Alkuarvot ja tyyppimuunnokset (2/5) Alkuarvot ja tyyppimuunnokset (3/5)

Java-kielen perusteet

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

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

Loogiset konnektiivit

Aki Taanila LINEAARINEN OPTIMOINTI

Java-kielen perusteita

Java-kielen perusteet

Tyyppejä ja vähän muutakin. TIEA341 Funktio ohjelmointi 1 Syksy 2005

Ehto- ja toistolauseet

Python-ohjelmointi Harjoitus 2

L models. Tekninen määrittely. Ryhmä Rajoitteiset

L m o d els. Tekninen määrittely. Ryhmä Rajoitteiset

Tietotyypit ja operaattorit

T Logiikka tietotekniikassa: perusteet Kevät 2008 Laskuharjoitus 5 (lauselogiikka ) A ( B C) A B C.

815338A Ohjelmointikielten periaatteet Harjoitus 4 vastaukset

Johdatus logiikkaan I Harjoitus 4 Vihjeet

7. Näytölle tulostaminen 7.1

Ohjausjärjestelmien jatkokurssi. Visual Basic vinkkejä ohjelmointiin

LAUSEKKEET JA NIIDEN MUUNTAMINEN

LOAD R1, =2 Sijoitetaan rekisteriin R1 arvo 2. LOAD R1, 100

YHTÄLÖ kahden lausekkeen merkitty yhtäsuuruus

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

ITKP102 Ohjelmointi 1 (6 op)

Nimitys Symboli Merkitys Negaatio ei Konjuktio ja Disjunktio tai Implikaatio jos..., niin... Ekvivalenssi... jos ja vain jos...


Ohjelmointiharjoituksia Arduino-ympäristössä

T kevät 2007 Laskennallisen logiikan jatkokurssi Laskuharjoitus 1 Ratkaisut

LOGIIKKA johdantoa

T Kevät 2005 Logiikka tietotekniikassa: erityiskysymyksiä I Kertausta Ratkaisut

1 Logiikkaa. 1.1 Logiikan symbolit

Diskreetit rakenteet. 3. Logiikka. Oulun yliopisto Tietojenkäsittelytieteiden laitos 2015 / 2016 Periodi 1

5.1 Semanttisten puiden muodostaminen

2. Lisää Java-ohjelmoinnin alkeita. Muuttuja ja viittausmuuttuja (1/4) Muuttuja ja viittausmuuttuja (2/4)

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

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin peruskurssi Y1

Vertailulauseet. Ehtolausekkeet. Vertailulauseet. Vertailulauseet. if-lauseke. if-lauseke. Javan perusteet 2004

Kielioppia: toisin kuin Javassa

Ehto- ja toistolauseet

Ohjelmoinnin perusteet Y Python

Sisällys. 3. Pseudokoodi. Johdanto. Johdanto. Johdanto ja esimerkki. Pseudokoodi lauseina. Kommentointi ja sisentäminen.

Ohjelmoinnin peruskurssi Y1

Ratkaisu: Käytetään induktiota propositiolauseen A rakenteen suhteen. Alkuaskel. A = p i jollain i N. Koska v(p i ) = 1 kaikilla i N, saadaan

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

Ratkaisu: Yksi tapa nähdä, että kaavat A (B C) ja (A B) (A C) ovat loogisesti ekvivalentit, on tehdä totuustaulu lauseelle

Ohjelmointitaito (ict1td002, 12 op) Kevät Java-ohjelmoinnin alkeita. Tietokoneohjelma. Raine Kauppinen

Lmodels. Tekninen määrittely. Ryhmä Rajoitteiset

815338A Ohjelmointikielten periaatteet Harjoitus 2 vastaukset

Fortran 90/95. + sopii erityisesti numeriikkaan:

Ohjelmoinnin perusteet Y Python

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

Muuttujat ja kontrolli. Ville Sundberg

Kesälukio 2000 PK2 Tauluharjoituksia I Mallivastaukset

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

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

Yhtälönratkaisusta. Johanna Rämö, Helsingin yliopisto. 22. syyskuuta 2014

Harjoitustyö: virtuaalikone

3.3 Paraabeli toisen asteen polynomifunktion kuvaajana. Toisen asteen epäyhtälö

5. HelloWorld-ohjelma 5.1

Sisällys. 17. Ohjelmoinnin tekniikkaa. Aritmetiikkaa toisin merkiten. for-lause lyhemmin

Algebralliset tietotyypit ym. TIEA341 Funktio ohjelmointi 1 Syksy 2005

JAVA-PERUSTEET. JAVA-OHJELMOINTI 3op A JAVAN PERUSTEET LYHYT KERTAUS JAVAN OMINAISUUKSISTA JAVAN OMINAISUUKSIA. Java vs. C++?

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

Kirjoita käyttäen propositiosymboleita, konnektiiveja ja sulkeita propositiologiikan lauseiksi:

Sisällys. 16. Ohjelmoinnin tekniikkaa. Aritmetiikkaa toisin merkiten. Aritmetiikkaa toisin merkiten

2.2 Muunnosten käyttöön tutustumista

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

Java-kielen perusteet

Trigonometrian kaavat 1/6 Sisältö ESITIEDOT: trigonometriset funktiot

30A01000 Taulukkolaskenta ja analytiikka Luku 8: Lineaarinen optimointi ja sen sovellukset

16. Ohjelmoinnin tekniikkaa 16.1

Luku 5 Kertaus. Tehtävä 1 Kerratkaa oppimanne asiat yhdessä keskustellen.

Aluksi Kahden muuttujan lineaarinen epäyhtälö

Javascript 2: Ohjelmointikielen ominaisuudet. Jaana Holvikivi Metropolia

Demo 1: Simplex-menetelmä

5 Kertaus. Tehtävä 1 Kerratkaa oppimanne asiat yhdessä keskustellen.

16. Ohjelmoinnin tekniikkaa 16.1

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

Rajoittamattomat kieliopit (Unrestricted Grammars)

Tutoriaaliläsnäoloista

Racket ohjelmointia osa 2. Tiina Partanen Lielahden koulu 2014

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

MS-A0402 Diskreetin matematiikan perusteet

L models. Testisuunnitelma. Ryhmä Rajoitteiset

Logiikan kertausta. TIE303 Formaalit menetelmät, kevät Antti-Juhani Kaijanaho. Jyväskylän yliopisto Tietotekniikan laitos.

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

Kahden lausekkeen merkittyä yhtäsuuruutta sanotaan yhtälöksi.

Luku 3. Listankäsittelyä. 3.1 Listat

Matemaattinen Analyysi

Ohjelmoinnin peruskurssien laaja oppimäärä

Sopimuspohjainen olio-ohjelmointi

815338A Ohjelmointikielten periaatteet

Ohjelmoinnin peruskurssi Y1

etunimi, sukunimi ja opiskelijanumero ja näillä

ALGORITMI- MATEMATIIKKA. Keijo Ruohonen

Transkriptio:

Teknillinen Korkeakoulu T-76.5 Tietojenkäsittelyopin ohjelmatyö Lineaaristen rajoitteiden tyydyttämistehtävän ratkaisija L models Vaatimusmäärittely Ryhmä Rajoitteiset Versio Päivämäärä Tekijä Muutokset 0. 05.0.00 Vesa Salento Ensimmäinen versio, pohja asiakirjalle. 0. 08.0.00 Vesa Salento Lisätty enemmän vaatimuksia. 0..0.00 Joonas Kekoni Kielivaatimukset lisätty ja kappaleet ja korjattu. 0.4 5.0.00 Vesa Salento Lisätty käyttäjävaatimuksia ja korjattu sisällysluetteloa. 0.5 0.0.00 Vesa Salento Päivitetty sisältö ryhmäpalaverissa tulleiden kommenttien mukaiseksi. 0.6.0.00 Jouni Karppinen Dokumenttipohja otettu käyttöön. Vähän muotoilua. 0.7 5.0.00 Vesa Salento Päivitetty vaatimuksia ja termistöä..0 6.0.00 Jouni Karppinen & Mitro Kuha Dokumentti tarkastettu ja korjattu palautusta varten.

Sisällysluettelo Johdanto... Asiakastavoitteet... Määritykset.... Termistö... 4 Yleiskuva... 4. Käyttäjäryhmät... 4. Esimerkki rajoitustiedostosta... 5 Vaatimukset... 5. Kielivaatimukset... 5. Käyttäjävaatimukset... 4 5. Toiminnalliset vaatimukset... 5 5.4 Muut vaatimukset... 6 Liite A - Kielen formaali määritelmä... 7

Johdanto Ryhmän tavoitteena on rakentaa järjestelmä, jonka avulla voi ratkaista rajoitteita, jotka sisältävät sekä lineaarisia sekalukuyhtälöitä sekä loogisia rajoitteita. Järjestelmän tulee kyetä jäsentämään määritellyllä kielellä toteutettu ongelma sen suhteen, mitkä ovat annettujen muuttujien mahdolliset arvot, tai sen, että niitä ei ole. Ryhmän toteuttama järjestelmä ratkaisee ongelman muuttamalla lineaarisia ja loogisia yhtälöitä sisältävän ongelman lineaarisen optimoinnin tehtäväksi, jonka ratkaisemiseen käytetään tarkoitukseen tehtyä valmisohjelmaa tai komponenttia. Testikäyttöä varten komponentille rakennetaan myös käyttöliittymä. Käyttöliittymä on tarkoitettu vain testausta varten, ja itse järjestelmää on tarkoitus käyttää irrallisena komponenttina jo olemassa olevasta asiakkaan ohjelmasta käsin. Tästä syystä järjestelmälle ei tehdä myöskään käyttötapauskuvauksia. Asiakastavoitteet Projektin tavoitteena on tutkia, soveltuuko ratkaisumalli lineaaristen rajoitteiden lisäämiseen WeCoTin-konfigurointiohjelmaan, sekä tuottaa asiakkaalle komponentti, jonka he voivat tulevaisuudessa integroida WeCoTin-ohjelmistoon. Nykyään WeCoTin käyttää vain loogisia rajoitteita, mikä aiheuttaa rajoituksia numeerisen datan, kuten hinnan, toimitusajan sekä olosuhteista riippuvan tehon, käsittelyyn. Määritykset. Termistö Seuraavassa taulukossa on selitetty lyhyesti erikoistermistö, jota käytetään tämän asiakirjan eri kohdissa. Termi BNF CNF DNF Linearisointi Määrittely (Backus-Naur Form) Formaali matemaattinen tapa määritellä kielioppi. HUOM! ei yhteyttä CNF:ään ja DNF:ään. (Conjunctive Normal Form) Konjuktiivinen normaalimuoto. Muoto, jossa looginen lauseke on supistettu siten, että OR-operaatiot ovat AND-operaatioiden sisällä. NOT-operaatiot ovat terminaalien edessä. Esim. (a OR b OR NOT c) AND (d OR e). (Disjunctive Normal Form) Disjunktiivinen normaalimuoto. Muoto, jossa looginen lauseke on supistettu siten, että AND-operaatiot ovat OR-operaatioiden sisällä. NOT-operaatiot ovat terminaalien edessä. Esim. (a AND b) OR (c AND NOT d). Prosessi, jossa logiikkaa sisältävä kaava muutetaan lineaarisiksi operaatioiksi.

Termi Malli Nonterminaali Määrittely Rajoitteiden muodostama kokonaisuus, jolle pyritään löytämään vähintään yksi ratkaisu rajojen sisällä. Kieliopin osa, joka koostuu terminaaleista, nonterminaaleista tai molemmista. Esim. aliohjelma, kaava tai muuttujamäärittely. Säännöllinen lauseke Säännöllinen lauseke (regexp, regular expression) on merkkijonon määrittelemä kaava, jota voidaan käyttää toisten merkkijonojen osien erittelemiseen. Supistaminen Terminaali Prosessi, jossa tulkittu kieli muutetaan joko CNF- tai DNFmuotoon, sekä mahdolliset numeeriset lausekkeet muutetaan muotoon, jossa muuttujat varustettuina mahdollisilla kertoimilla ovat vertailuoperaation vasemmalla puolella ja vakio oikealla. Kieliopin osa, jota ei enää jaeta pienempiin osiin. Esim. muuttuja, vakio tai operaattori. Translaatio Prosessi, jossa kieli tulkitaan ohjelman sisäiseen tietorakenteeseen. Taulukko : Asiakirjassa käytetty erikoissanasto. 4 Yleiskuva 4. Käyttäjäryhmät Järjestelmällä on kahdenlaisia käyttäjiä. Ensimmäiset ovat henkilöitä, jotka syöttävät konfigurointilausekkeet järjestelmään, ja toiset ovat niitä, jotka käyttävät näitä lausekkeita ratkaistessaan ongelmia. 4. Esimerkki rajoitustiedostosta Järjestelmän pitää tukea kieltä, jolla voidaan kuvata vaikkapa seuraavanlainen rajoitusmääritelmä: 5 Vaatimukset # muuttujat määritellään ennen rajoitetta boolean kaksitaajuus, lahialue, ilta_tai_viikonloppu; # kokonais- ja liukulukumuuttujat, joilla on sama domain, # voidaan määrittää samalla kertaa integer C, CD, PC [0,]; float kuukausimaksu [5.5,00]; # rajoite (kaksitaajuus implies (C = 0)) and (not(kaksitaajuus or kaksitaajuus or kaksitaajuus ) implies (CD = 0)) and (lahialue implies (C = 0)) and (not(lahialue) implies (PC = 0)) and (ilta_tai_viikonloppu implies (CD = 0)) and (not(ilta_tai_viikonloppu) implies (PC = 0)) and (C + CD + PC = ) and (. * C +.5 * CD +.67 * PC <= kuukausimaksu) Vaatimukset voidaan jakaa neljään eri osaan. Ensimmäisenä ryhmänä on kielelle olevat

määritykset, joilla määritellään runko koko järjestelmälle. Seuraavana ryhmänä on käyttäjävaatimukset, joihin kuuluvat vaatimukset siitä, mitä käyttäjät haluavat kyetä tekemään järjestelmällä. Toiminnalliset vaatimukset kertovat eriteltynä, mitä toimintoja järjestelmän täytyy pystyä suorittamaan. Muihin vaatimuksiin on jätetty ne vaatimukset, jotka eivät sisälly em. ryhmiin. Kaikille vaatimuksille on annettu yksilöivä tunniste sekä prioriteettinumero, joka kertoo kuinka tärkeä vaatimus on. Seuraava taulukko sisältää tarkemman kuvauksen eri prioriteeteista. Prioriteetti Määritelmä Järjestelmän kannalta kriittinen vaatimus, jota ilman se ei voi toimia. Ilman tätä vaatimusta järjestelmän toiminta on huomattavasti suppeampi, kuin mikä olisi tarkoitus, ja siksi kaikki tämän prioriteetin vaatimukset pitää toteuttaa. Järjestelmän kannalta tärkeä vaatimus, joka olisi hyvä toteuttaa. Ilman tätä toiminnallisuus kärsii, mutta järjestelmää voidaan kuitenkin käyttää sen käyttötarkoitukseen. Kaikki tämän prioriteetin vaatimukset on tarkoitus toteuttaa. Järjestelmän kannalta lisätoiminta tai muuten vain käytettävyyttä helpottava vaatimus. Mikäli aikataulu sallii, niin nämä olisi tarkoitus toteuttaa. Taulukko : Prioriteettiluokkien kuvaukset. 5. Kielivaatimukset Kielen tavoitteena on kuvata lineaarisia ja loogisia rajoitteita, joita tuotteella voidaan ratkaista, sekä määritellä niiden muuttujat tyyppeineen ja rajoineen. Tunniste Vaatimus Prioriteetti LANG-REQ-0 Kielen pitää tukea seuraavia muuttujatyyppejä: totuusarvo (boolean), kokonaisluku (integer) ja liukuluku (float). LANG-REQ-0 Kaikille muuttujille pitää määritellä sekä nimi että muuttujatyyppi. LANG-REQ-0 Kaikkien käytettyjen muuttujien määrittely on pakollista. LANG-REQ-04 Samalla rivillä pitää voida määritellä useita muuttujia. LANG-REQ-05 Numeerisille muuttujille (integer, float) pitää määritellä rajat, jotka kertovat muuttujan kelvolliset arvot. LANG-REQ-06 Totuusarvotyyppisille muuttujille voidaan määritellä arvoksi tosi (true) tai epätosi (false), mutta tämä on vapaaehtoista. LANG-REQ-07 Loogisia ja numeerisia tyyppejä ei saa sekoittaa. Loogisella tyypillä ei ole numeerista arvoa, eikä numeerisella tyypillä loogista arvoa.

Tunniste Vaatimus Prioriteetti LANG-REQ-08 Kielen pitää mahdollistaa aritmeettisten lausekkeiden esittäminen seuraavilla operaatioilla: yhteenlasku (+), vähennyslasku (-) ja tulo (*). Kahden muuttujan kertomista ei tueta, sillä se ei ole lineaarinen operaatio. LANG-REQ-09 Kielen pitää tukea vakiolla jakamista (/). Muuttujalla jakamista ei tueta, sillä se ei ole lineaarinen operaatio. LANG-REQ-0 Kielen pitää tukea seuraavia loogisen tuloksen tuottavia aritmeettisia operaatioita: pienempi kuin (<), suurempi kuin (>), pienempi tai yhtäsuuri kuin (<=), suurempi tai yhtäsuuri kuin (>=), yhtäsuuri kuin (=) ja erisuuri kuin (!=). LANG-REQ- Kielen pitää tukea seuraavia loogisia operaatioita: konjunktio (AND), disjunktio (OR), negaatio (NOT), ehdoton tai (XOR), implikaatio (IMPLIES) ja ekvivalenssi (EQUIV). LANG-REQ- Kielen pitää tukea tavallisia aritmeettisten operaatioiden laskujärjestyssääntöjä, joissa tulo lasketaan ennen yhteenja vähennyslaskua. On sallittua kirjoittaa a+b*40<00, jolla tarkoitetaan samaa kuin a+(b*40)<00, sillä sulut eivät ole tässä pakollisia. LANG-REQ- Loogisilla operaatiolla noudatetaan seuraavia laskujärjestyssääntöjä: ensin negaatio (NOT), sitten konjunktio (AND), sen jälkeen disjunktio (OR) ja ehdoton tai (XOR) alkaen vasemmalta ja lopuksi ekvivalenssi (EQUIV) ja implikaatio (IMPLIES) alkaen vasemmalta. Esim. a AND (NOT b) voidaan kirjoittaa ilman sulkeita muodossa a AND NOT b. LANG-REQ-4 Kielen tulee tukea ketjudisjunktioita ja -konjunktioita. Lauseke voidaan kirjoittaa muodossa a AND b AND c sen sijaan, että se kirjoitettaisiin (a AND b) AND c tai a AND (b AND c). Taulukko : Järjestelmän kielivaatimukset. 5. Käyttäjävaatimukset Käyttäjävaatimukset tulevat käyttäjien tarpeista järjestelmälle. Ne ovat yleisiä toiminnallisuuksia, mitä käyttäjä haluaa tehdä järjestelmällä. 4

Tunniste Vaatimus Prioriteetti USER-REQ-0 Järjestelmän on tarjottava käyttöliittymä, josta käyttäjä voi syöttää järjestelmän ratkaistavaksi kieliopin mukainen malli. USER-REQ-0 Järjestelmän on tarjottava käyttäjälle mahdollisuus valita mallin ratkaisuun käytettävä ratkaisija. USER-REQ-0 Järjestelmän on mahdollistettava ratkaisijakohtaisten alustusasetusten asettaminen. USER-REQ-04 Järjestelmän on mahdollistettava ratkaisijakohtaisten alustusasetusten määrittäminen. USER-REQ-05 Järjestelmän on kyettävä ratkaisemaan kieliopin mukainen käyttäjän syöttämä malli. USER-REQ-06 Järjestelmän on kyettävä laskemaan muuttujille kelvollisten arvojen rajat kieliopin rajoitteiden puitteissa. USER-REQ-07 Käyttäjän on kyettävä valitsemaan muuttujille arvoja laskettujen rajojen puitteissa. USER-REQ-08 Käyttäjän on kyettävä muuttamaan muuttujille valittuja arvoja. USER-REQ-09 Käyttäjän muutettua muuttujien arvoja järjestelmän on kyettävä laskemaan tämän muutoksen jälkeen muiden muuttujien mahdolliset uudet rajat. USER-REQ-0 Käyttäjän on kyettävä muuttamaan jo tehtyjä valintoja, jolloin tilanne päivitetään muutosten mukaiseksi. USER-REQ- Järjestelmän on näytettävä käyttäjälle eri muuttujien mahdolliset arvot valittujen muiden muuttujien aiheuttamien rajojen perusteella. USER-REQ- Järjestelmän on mahdollistettava useamman eri muuttujan arvojen muuttaminen ennen tilanteen päivitystä. USER-REQ- Järjestelmän on kyettävä näyttämään ratkaisuun käytetty prosessoriaika käyttöliittymässä. USER-REQ-4 Järjestelmän on kyettävä näyttämään linearisoidun mallin koko valituilla muuttujien arvoilla (jäljellä olevien muuttujien ja yhtälöiden määrä). USER-REQ-5 Järjestelmän on kyettävä näyttämään jokin ratkaisu, mikäli sellainen on olemassa muuttujien valittujen arvojen puitteissa. USER-REQ-6 Järjestelmän käyttöliittymän on oltava englanniksi. Taulukko 4: Järjestelmän käyttäjävaatimukset. 5. Toiminnalliset vaatimukset Järjestelmän pitää kyetä lukemaan kieliopin mukaan määritelty malli, jäsentämään siitä jäsennyspuu sekä supistamaan se konjunktiiviseen ja disjunktiiviseen normaalimuotoon. 5

Osalle muuttujista on määritelty niiden arvot ja osa arvoista on käyttäjän valittavissa. Ohjelman pitää kyetä laskemaan niiden muuttujien arvoille mahdolliset rajat, joille ei ole vielä valittu mitään arvoa. Tunniste Vaatimus Prioriteetti FUNC-REQ-0 Järjestelmän on kyettävä jäsentämään kieliopin mukainen syöte jäsennyspuuksi. FUNC-REQ-0 Järjestelmän pitää kyetä tunnistamaan kieliopin vastainen syöte. FUNC-REQ-0 Järjestelmän on kerrottava, missä kohtaa mallissa on virhe, mikäli sille syötetään kieliopin vastainen syöte. FUNC-REQ-04 Järjestelmän pitää pystyä optimoimaan supistettua mallia, jotta sen ratkaiseminen voi tapahtua mahdollisimman nopeasti. FUNC-REQ-05 Järjestelmän pitää kyetä ratkaisemaan yhtä aikaa useampaa eri tehtävää. Taulukko 5: Järjestelmän toiminnalliset vaatimukset. 5.4 Muut vaatimukset Loput vaatimukset on esitetty taulukossa 6. Ne eivät sisälly mihinkään edellisistä vaatimusryhmistä, ja ovat siksi koottu omaan ryhmäänsä. Tunniste Vaatimus Prioriteetti MISC-REQ-0 Järjestelmän käyttämien ratkaisijoiden vaihtaminen pitää olla mahdollista. MISC-REQ-0 Järjestelmän käyttämä aika ratkaisun etsimiseen pitää olla rajoitettavissa. MISC-REQ-0 Järjestelmän ei pidä jumiutua millään syötteellä. MISC-REQ-04 Järjestelmän pitää toimia useammassa eri käyttöjärjestelmässä, joten se ei saa tukeutua mihinkään yksittäisen käyttöjärjestelmän erityisominaisuuteen. MISC-REQ-05 Käyttäjälle on tarjottava selainpohjainen käyttöliittymä järjestelmän testausta varten. Taulukko 6: Järjestelmän muut vaatimukset. 6

Liite A - Kielen formaali määritelmä Koska kieli on suurimmalta osaltaan asiakkaan määrittelemä, niin se on siksi sisällytetty tähän vaatimusmäärittelyyn liitteeksi. Kieliopin pitää toteuttaa kielelle määritellyt vaatimukset, jotka on lueteltu kohdassa 5. Kielivaatimukset. Seuraava määrittely toteuttaa nämä ja on oikeata kielioppia, mutta käyttää loogisia ja numeerisia tyyppejä sekaisin. Kielen terminaalien määrittely Alla on kielen terminaalit määriteltynä säännöllisillä lausekkeilla. Säännöllinen lauseke Terminaali ";" SEMI "+" PLUS "-" MINUS "*" TIMES "/" DIV "(" LPAREN ")" RPAREN "[" LBRACK "]" RBRACK "," COMMA "=" "==" EQ "!=" NEQ ">" GT "<" LT ">=" GE "<=" LE "and" AND "or" OR "not"" NOT "xor" XOR "implies" "imp" IMPLIES "equiv" "xnor" EQUIV "boolean" VBOOL "integer" "int" VINT "float" "double" VFLOAT \#.* -ei terminaalia- [0-9]*[0-9] INT [0-9]*\.?[0-9]+(([e+] [e-])[0-9]+)? FLOAT [a-za-z][a-za-z0-9_]* ID "true" "TRUE" TRUE "false" "FALSE" FALSE [ \t\r\n\f] -ei terminaalia- Kielen nonterminaalien määrittely Seuraavassa nonterminaalit on määriteltynä BNF:llä. terminal SEMI, COMMA; terminal PLUS, MINUS, TIMES, DIV, UMINUS; terminal LPAREN, RPAREN, LBRACK, RBRACK; terminal EQ, NEQ, GT, LT, GE, LE; terminal AND, OR, NOT, XOR, IMPLIES, EQUIV; terminal VBOOL, VINT, VFLOAT; terminal Double INT; 7

terminal Double FLOAT; nonterminal Double NUMBER; // float or int terminal String ID; terminal Boolean TRUE; terminal Boolean FALSE; non terminal Nodes.Expr expr; non terminal Nodes.Declaration decl; non terminal Nodes.DecList declist; non terminal Nodes.Declaration booldec; non terminal Nodes.Declaration intdec; non terminal Nodes.Declaration floatdec; non terminal Nodes.VarNameList varnamelist; non terminal Nodes.NumLimit numlim; non terminal Nodes.NumLimit intlim; non terminal Nodes.Problem file; precedence left EQUIV,IMPLIES; precedence left OR,XOR; precedence left AND; precedence left NOT; precedence nonassoc EQ, NEQ, GT, LT, GE, LE; precedence left PLUS, MINUS; precedence left TIMES,DIV; precedence left UMINUS; start with file; ~file ::= declist expr declist expr SEMI; NUMBER ::= FLOAT INT ; declist ::= decl declist decl; decl ::= booldec {: :} floatdec {: :} intdec {: :}; booldec ::= VBOOL varnamelist SEMI VBOOL varnamelist TRUE SEMI VBOOL varnamelist FALSE SEMI; varnamelist ::= ID:p COMMA varnamelist:v ID:p; numlim ::= LBRACK NUMBER COMMA NUMBER RBRACK; intlim ::= LBRACK NUMBER COMMA INT RBRACK; floatdec ::= VFLOAT varnamelist numlim SEMI; intdec ::= VINT varnamelist intlim SEMI; expr ::= LPAREN expr RPAREN expr AND expr expr OR expr 8

expr XOR expr expr EQUIV expr expr IMPLIES expr NOT expr LPAREN expr EQ expr RPAREN LPAREN expr NEQ expr RPAREN LPAREN expr LT expr RPAREN LPAREN expr GT expr RPAREN LPAREN expr LE expr RPAREN LPAREN expr GE expr RPAREN TRUE FALSE ID NUMBER expr PLUS expr expr MINUS expr expr TIMES expr expr DIV expr MINUS expr:e {: :} %prec UMINUS; 9