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

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

13. Loogiset operaatiot 13.1

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

Java-kielen perusteet

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

Loogiset konnektiivit

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

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

Java-kielen perusteet

Johdatus logiikkaan I Harjoitus 4 Vihjeet

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

Python-ohjelmointi Harjoitus 2

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

815338A Ohjelmointikielten periaatteet Harjoitus 2 vastaukset

Java-kielen perusteita

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

Algebralliset tietotyypit ym. TIEA341 Funktio ohjelmointi 1 Syksy 2005

Ohjausjärjestelmien jatkokurssi. Visual Basic vinkkejä ohjelmointiin

Lmodels. Tekninen määrittely. Ryhmä Rajoitteiset

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


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

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

7. Näytölle tulostaminen 7.1

ITKP102 Ohjelmointi 1 (6 op)

T kevät 2007 Laskennallisen logiikan jatkokurssi Laskuharjoitus 1 Ratkaisut

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python

11.4. Context-free kielet 1 / 17

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin peruskurssi Y1

Ehto- ja toistolauseet

LOGIIKKA johdantoa

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

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

Tietotyypit ja operaattorit

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

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

815338A Ohjelmointikielten periaatteet Harjoitus 4 vastaukset

Aki Taanila LINEAARINEN OPTIMOINTI

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

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

Lineaarinen yhtälöryhmä

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

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

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin peruskurssien laaja oppimäärä

Gaussin ja Jordanin eliminointimenetelmä

Javan perusteet. Ohjelman tehtävät: tietojen syöttö, lukeminen prosessointi, halutun informaation tulostaminen tulostus tiedon varastointi

L models. Testisuunnitelma. Ryhmä Rajoitteiset

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

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

Ohjelmointiharjoituksia Arduino-ympäristössä

Ohjelmoinnin peruskurssi Y1

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

Ohjelmoinnin perusteet Y Python

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

Harjoitus 6 (viikko 42)

Demo 1: Simplex-menetelmä

LAUSEKKEET JA NIIDEN MUUNTAMINEN

Tietorakenteet ja algoritmit

YHTÄLÖ kahden lausekkeen merkitty yhtäsuuruus

3 Lineaariset yhtälöryhmät ja Gaussin eliminointimenetelmä

Se mistä tilasta aloitetaan, merkitään tyhjästä tulevalla nuolella. Yllä olevassa esimerkissä aloitustila on A.

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

Ohjelmoinnin peruskurssien laaja oppimäärä

TIEA341 Funktio-ohjelmointi 1, kevät 2008

Rajoittamattomat kieliopit (Unrestricted Grammars)

Yhtälönratkaisu oppilaan materiaali

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

T Testiraportti - järjestelmätestaus

5.5 Jäsenninkombinaattoreista

1. Logiikan ja joukko-opin alkeet

Attribuuttikieliopit

M =(K, Σ, Γ,, s, F ) Σ ={a, b} Γ ={c, d} = {( (s, a, e), (s, cd) ), ( (s, e, e), (f, e) ), (f, e, d), (f, e)

1 Logiikkaa. 1.1 Logiikan symbolit

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

Matemaattinen optimointi I, demo

Kesälukio 2000 PK2 Tauluharjoituksia I Mallivastaukset

MS-A0402 Diskreetin matematiikan perusteet

Palautetta viime luennosta

Ohjelmointi 1 Taulukot ja merkkijonot

3 Lineaariset yhtälöryhmät ja Gaussin eliminointimenetelmä

TIEA241 Automaatit ja kieliopit, syksy Antti-Juhani Kaijanaho. 8. syyskuuta 2016

Ohjeita LINDOn ja LINGOn käyttöön

Ensimmäisen ja toisen asteen yhtälöt

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

Harjoitus 6. Käytä String-luokasta vain charat- ja length-operaatioita.

15 Yhtäsuuruuksia 1. Päättele x:llä merkityn punnuksen massa. a) x 4 kg. x 3 kg

HY / Matematiikan ja tilastotieteen laitos Johdatus logiikkaan I, syksy 2018 Harjoitus 4 Ratkaisuehdotukset

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

SELECT-lauseen perusmuoto

2.2 Muunnosten käyttöön tutustumista

Vaatimusmäärittely Ohjelma-ajanvälitys komponentti

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

= k 0 NTIME(n k + k) Siis polynomisessa ajassa epädeterministisellä Turingin koneella tunnistettavien kielten joukko

Ctl160 Tekstikorpusten tietojenkäsittely Kolmas luento,

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.003 Vesa Salento Ensimmäinen versio, pohja asiakirjalle. 0. 08.0.003 Vesa Salento Lisätty enemmän vaatimuksia. 0.3.0.003 Joonas Kekoni Kielivaatimukset lisätty ja kappaleet ja korjattu. 0.4 5.0.003 Vesa Salento Lisätty käyttäjävaatimuksia ja korjattu sisällysluetteloa. 0.5 0.0.003 Vesa Salento Päivitetty sisältö ryhmäpalaverissa tulleiden kommenttien mukaiseksi. 0.6.0.003 Jouni Karppinen Dokumenttipohja otettu käyttöön. Vähän muotoilua. 0.7 5.0.003 Vesa Salento Päivitetty vaatimuksia ja termistöä..0 6.0.003 Jouni Karppinen & Mitro Kuha Dokumentti tarkastettu ja korjattu PP-vaiheen palautusta varten.. 4..003 Vesa Salento Päivitetty vaatimuksia asiakkaan ja mentorin kommenttien mukaan.. 5..003 Vesa Salento Päivitetty kielen formaali määritelmä..3 7..003 Vesa Salento Muutettu muutaman vaatimuksen prioriteetti asiakkaan mielestä sopivammaksi..0 9..003 Jouni Karppinen & Hannu Kauppinen Dokumentti tarkastettu ja korjattu I-vaiheen palautusta varten.

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

Johdanto Ryhmän tavoitteena on rakentaa järjestelmä, jonka avulla voi ratkaista erityisellä kielellä esitettyjä ongelmia. Ne sisältävät sekä lineaarisia sekalukuyhtälöitä sekä loogisia rajoitteita. Järjestelmän tulee kyetä jäsentämään 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 järjestelmälle 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. 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 Lineaarisointi Malli Nonterminaali Määrittely (Backus-Naur Form) Formaali matemaattinen tapa määritellä kielioppi. HUOM! Tällä ei ole yhteyttä CNF:ään ja DNF:ään. (Conjunctive Normal Form) Konjunktiivinen normaalimuoto. Muoto, jossa looginen lauseke on supistettu siten, että ORoperaatiot 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. 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 jäsennetyn kielen mukainen kaava muunnetaan joko CNF- tai DNF-muotoon, 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.

3 Yleiskuva 3. 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. 3. Esimerkki rajoitustiedostosta Järjestelmän pitää tukea kieltä, jolla voidaan kuvata vaikkapa seuraavanlainen rajoitusmääritelmä: # 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 (3.33 * C + 3.5 * CD + 3.67 * PC <= kuukausimaksu) 3

4 Vaatimukset Vaatimukset voidaan jakaa neljään eri osaan. Ensimmäisenä ryhmänä on kielelle olevat vaatimukset, 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ä järjestelmällä tekemään. 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. 3 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. 4. 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-03 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. 4

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-3 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 3: Järjestelmän kielivaatimukset. 4. 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ä. 5

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 mukaisen mallin. USER-REQ-0 Järjestelmän on tarjottava käyttäjälle mahdollisuus valita mallin ratkaisuun käytettävä ratkaisija. USER-REQ-03 Järjestelmän on mahdollistettava ratkaisijakohtaisten alustusasetusten asettaminen. USER-REQ-04 Järjestelmän on mahdollistettava ratkaisijakohtaisten alustusasetusten määrittäminen käyttöliittymästä. USER-REQ-05 Järjestelmän on kyettävä laskemaan muuttujille kelvollisten arvojen rajat mallin rajoitteiden puitteissa, mikäli ne ovat olemassa. USER-REQ-06 Käyttäjän on kyettävä valitsemaan muuttujille arvoja niiden arvoalueiden puitteissa. USER-REQ-07 Käyttäjän on kyettävä muuttamaan tai poistamaan muuttujille valittuja arvoja. USER-REQ-08 Käyttäjän muutettua tai poistettua muuttujien arvoja järjestelmän on kyettävä laskemaan kelvollisten arvojen rajat mallin rajoitteiden puitteissa, mikäli ne ovat olemassa. USER-REQ-09 Järjestelmän on kyettävä näyttämään muuttujille niiden kelvolliset arvoalueet. USER-REQ-0 Järjestelmän on mahdollistettava useamman eri muuttujan arvojen valitseminen, muuttaminen tai poistaminen ennen laskentaa. USER-REQ- Järjestelmän on kyettävä näyttämään ratkaisuun käytetty prosessoriaika käyttöliittymässä. USER-REQ- Järjestelmän on kyettävä näyttämään sekalukumallin koko muuttujien ja yhtälöiden lukumääränä. USER-REQ-3 Järjestelmän on kyettävä näyttämään jokin ratkaisu, mikäli sellainen on olemassa, muuttujien valittujen arvojen puitteissa. USER-REQ-4 Järjestelmän käyttöliittymän on oltava englanniksi. Taulukko 4: Järjestelmän käyttäjävaatimukset. 4.3 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. 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. 3 3 3 6

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-03 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 on kyettävä normalisoimaan syötetystä mallista luotu jäsennyspuu. FUNC-REQ-05 Järjestelmän pitää pystyä optimoimaan supistettua mallia, jotta sen ratkaiseminen voi tapahtua mahdollisimman nopeasti. FUNC-REQ-06 Järjestelmän on kyettävä muuttamaan jäsennyspuu sekalukumalliksi. FUNC-REQ-07 Järjestelmän pitää kyetä ratkaisemaan yhtä aikaa useampaa eri tehtävää. Taulukko 5: Järjestelmän toiminnalliset vaatimukset. 4.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 pitää mahdollistaa käytettävän ratkaisijan valitseminen. MISC-REQ-0 Järjestelmän käyttämä aika ratkaisun etsimiseen pitää olla rajoitettavissa. MISC-REQ-03 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. 3 3 7

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 oikeaa 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" VINT "float" "double" VFLOAT \#.* --ignore-- [0-9]*[0-9] INT [0-9]*\.?[0-9]+((e\+ e\-)[0-9]+)? FLOAT "true" "TRUE" TRUE "false" "FALSE" FALSE [a-za-z][a-za-z0-9_]* ID [ \t\r\n\f] --ignore-- 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; terminal Double FLOAT; 8

non terminal Double NUMBER; // float or int terminal String ID; terminal Boolean TRUE; terminal Boolean FALSE; non terminal lmodels.nodes.expr expr; non terminal lmodels.model.vmap vardefinitions; non terminal lmodels.nodes.declaration decl; non terminal lmodels.nodes.declist declist; non terminal lmodels.nodes.declaration booldec; non terminal lmodels.nodes.declaration intdec; non terminal lmodels.nodes.declaration floatdec; non terminal lmodels.nodes.varnamelist varnamelist; non terminal lmodels.nodes.numlimit numlim; non terminal lmodels.nodes.numlimit intlim; non terminal lmodels.model.model 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; // the entire file file ::= vardefinitions expr vardefinitions expr SEMI; // numberic type NUMBER ::= FLOAT INT; // contains variables in a linked hashmap vardefinitions ::= declist; // declares all variables declist ::= declist decl decl; // declares a single variable decl ::= booldec floatdec intdec; // declare boolean variable booldec ::= VBOOL varnamelist SEMI VBOOL varnamelist TRUE SEMI VBOOL varnamelist FALSE SEMI; // comma separated list of variable names of same type and limits. varnamelist ::= ID COMMA varnamelist ID; 9

// [ min, max ] in variable declaration numlim ::= LBRACK NUMBER COMMA NUMBER RBRACK LBRACK MINUS NUMBER COMMA NUMBER RBRACK LBRACK NUMBER COMMA MINUS NUMBER RBRACK LBRACK MINUS NUMBER COMMA MINUS NUMBER RBRACK; intlim ::= LBRACK INT COMMA INT RBRACK LBRACK MINUS INT COMMA INT RBRACK LBRACK INT COMMA MINUS INT RBRACK LBRACK MINUS INT COMMA MINUS INT RBRACK; // declare float variable floatdec ::= VFLOAT varnamelist numlim SEMI; // declare integer variable intdec ::= VINT varnamelist intlim SEMI; // expression. This is everything. expr ::= LPAREN expr RPAREN expr AND expr expr OR expr 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 %prec UMINUS; 0