• Ei tuloksia

The Apache Software Foundation: Xerces C++ 1.1.0.

URL:<http://xml.apache.org/xerces-c/index.html>, 2000.

Berk, Elliot Joel. Ananian, C. Scott: JLex: A Lexical Analyzer Generator for Java(TM). URL:

<http://www.cs.princeton.edu/~appel/modem/java/JLex/>, 2000.

eXcelon corp.: ObjectStore PSE and PSE Pro for C++.

URL:<http://www.odi.com/>, 1997.

Hudson, Scott E: CUP Parser Generator for Java. URL:

<http://www.cs.princeton.edu/~appel/modem/java/CUP/>, 1999.

IBM, alphaWorks: IBM’s XML for C++ parser (XML4C).

URL:<http://www.alphaworks.ibm.com/tech/xml4c>, 2000.

Intersolv, Inc.: Intersolv C++/Views Version 3.

URL:<http://www.intersolv.com/>, 1995.

jGuru: ANother Tool for Language Recognition 2.7.0.

URL: <http://www. antlr.org/>, 2000.

Microsoft Corporation: Microsoft Visual SourceSafe 6.0.

URL:<http://www.microsoft.com/>, 2000.

Microsoft Corporation: Microsoft Visual C++ 6.0.

URL:<http://www.microsoft.com/>, 2000.

Microsoft Corporation: Microsoft Foundation Class Library. URL:<http://www.microsoft.com/>, 2000.

Microsoft Corporation: Microsoft Windows.

URL:<http://www.microsoft.com/>, 2000.

Microsoft Corporation: Microsoft Active Server Pages.

URL:<http://www.microsoft.com/>, 2000.

Microsoft Corporation: Microsoft Excel.

URL:<http://www.microsoft.com/>, 2000.

Microsoft Corporation: Microsoft SQL Server 7.0, URL:<http://www.microsoft.com/>, 2000.

Microsoft Corporation: Microsoft Access, URL:<http://www.microsoft.com/>, 2000.

Microsoft Corporation: Microsoft Visual Basic 6.0, URL:<http://www.microsoft.com/>, 2000.

Objectivity, Inc.: Objectivity/DB,

URL:<http://www.objectivity.com/>, 2000.

Oracle Corporation: Oracle8,

URL:<http://www.oracle.com/>, 2000.

POET Software: POET Object Server Suite, URL: <http://www.poet.com/>, 1999.

Rational Software Corporation: Rational Rose Data Modeler, URL:<http://www.rational.com/>, 2000.

Sybase, Inc.: Adaptive Server,

URL:<http://www.sybase.com/>, 2000.

Liite A: UML-notaatio

Liite A: UML-notaatio

UML on viimeisen kymmenen vuoden aikana yleistynyt, OMG:n standardoima kuvauskieli, jonka avulla voidaan kuvata suunniteltuja rakenteita, rakenteiden välisiä suhteita, tiloja ja monia muita asioita. Tässä työssä on käytetty UML:n luokka- ja oliodiagrammeja kuten ne on esitetty Martin Fowlerin ja Kendall Scottin UML Distilled second edition-kirjassa [Fowler&Scott 1999], Tässä liitteessä esitetään lyhyesti tämän työn UML-diagrammeissa käytettyjä symboleita ja merkintätapoja.

UML-Luokkadiagrammi

UML-luokkadiagrammilla voidaan kuvata luokkia, niiden rajapintoja, niiden välisiä suhteita, sekä tarvittaessa myös sisäistä toteutusta, invariantteja, jäsenmuuttujia ja muita luokan sisäiseen toimintaan liittyviä asioita.

Luokka

UML-luokkadiagrammissa luokka kuvataan laatikolla, joka voidaan tarvittaessa jakaa vaakasuorilla viivoilla yhdestä kolmeen osaan.

Ylimpään luokkadiagrammin luokkaa kuvaavaan osaan kirjoitetaan luokan nimi, sekä tarvittaessa luokan tyyppiä kuvaavia attribuutteja, kuten «interface» -rajapinta- tyyppisille luokille, sekä {abstract} abstrakteille luokille.

Mikäli luokkadiagrammin luokalle halutaan määritellä attribuutteja, kirjoitetaan nämä luokan nimi-kentän alla vaakasuoralla viivalla erotettuun laatikkoon, kukin attribuutti omalle rivilleen. Attribuuteille käytetty UML-syntaksi on seuraava:

<nimi> [: <tyyppi> [= <attribuutin oletusarvo]]

Esimerkkejä:

arvosana : numero = 0 arvosana : numero arvosana

Mikäli luokalle halutaan määritellä operaatioita, kuvataan ne attribuuttien alle vaakasuoralla viivalla erotettuun laatikkoon, kukin omalle rivilleen. Operaatioille käytetty hieman yksinkertaistettu UML-syntaksi on seuraava:

<nimi> (<parametrilista>) : <paluuarvon tyyppi>

Missä parametrilistassa jokaiselle pilkulla toisistaan erotetulle parametrille käytetään syntaksia:

<suunta> <nimi> [: <tyyppi> [= <parametrin oletusarvo>]]

Suunta kertoo käytetäänkö parametria arvon funktioon syöttämiseen (in), funktiosta palauttamiseen (out), vai molempia (inout).

Liite A: UML-notaatio Esimerkkejä:

getName((in) studentid : string) : string getBlobData((in) blobld : integer,

(out) blobData : blob) : boolean

Luokkien väliset suhteet

Luokkien väliset suhteet kuvataan UML:n luokkadiagrammissa luokkien välisellä viivalla tai katkoviivalla.

Katkoviivaa käytetään yleisesti riippuvuuden määrittämiseen, eli esimerkiksi mikäli luokka A riippuu luokasta B, piirretään diagrammiin katkoviivaa käyttäen nuoli luokasta A luokkaan B.

Viivaa käytetään erityisesti sellaisten kahden luokan välisten yhteyksien kuvaamiseen, missä toisella tai molemmilla osapuolilla on viittaus toisen luokan olioon tai olioihin.

Tällöin, mikäli viitatuilla olioilla on jokin roolinimi, kirjoitetaan se yhteyttä kuvaavan viivan viitatun olion puoleisen pään viereen. Viittausten kardinaliteetit kuvataan tarvittaessa samalla tavalla viittausta kuvaavan viivan viitatun puoleisen pään viereen.

Kardinaliteettien merkitykset selviävät seuraavasta taulukosta:

Kardinaliteetin kuvaus UML-diagrammissa

Kardinaliteetin merkitys

1 Viitattuja olioita on aina yksi.

* Viitattuja olioita voi olla kuinka monta hyvänsä.

0..1 Viitattuja olioita on nolla tai yksi.

m..n Viitattuja olioiden lukumäärä on vähintään m ja enintään n.

Taulukko A.l : UML-notaatiossa käytettävät kardinaliteetti-merkinnät Mikäli viittausta pystyy kulkemaan ainoastaan toiseen suuntaan, eli kun esimerkiksi luokan A oliosta on viittaus luokan B olioon, mutta luokan B oliosta ei ole samaa viittausta vastakkaiseen suuntaan, merkitään tämä niinkutsuttu navigoitavuus nuolenkärjellä, joka piirretään siihen viittausta kuvaavan viivan päähän, johon viittauksen toisen pään oliosta voidaan viittausta pitkin kulkea.

Kompositio, eli part-of suhde voidaan UML-luokkadiagrammissa kuvata piirtämällä musta timanttikuvio part-of suhteen siihen päähän, missä on olio johon toinen olio on part-of suhteessa.

Perintä

Perintä kuvataan UML-luokkadiagrammeissa piirtämällä kolmio, jonka yksi kärki osoittaa yläluokkaan ja jonka yläluokkaa osoittavan kulman vastapäisen sivun keskeltä lähtee viiva, joka mahdollisen jakaantumisen jälkeen päättyy perittyihin luokkiin.

Liite A: UML-notaatio Kuvassa A.l on yksinkertainen, tähän diplomityöhön varsinaisesti liittymätön, esimerkki UML-luokkadiagrammista, jossa on käytetty lähes kaikkia edellä kuvatuista UML-luokkadiagrammin symboleista.

kulkuneuvot omistaja

renkaat

Ihminen

Moottori

renkaanTyyppi

täytä((in) painearvo : numero)

Rengas

aja((in) määränpää : merkkijono) vaihdaRengas((inout) rengas : Rengas) huippunopeus : numero

asetaOmistaja((in) uusiOmistaja : Ihminen) annaHintaArvioO : Hinta

Kulkuneuvo

{abstract}

Kuva A.l: Esimerkki UML-luokkadiagrammista

UML-Oliodiagrammi

Oliodiagrammeilla kuvataan otosta ohjelman ajonaikaisesta tilasta.

Oliot

Olioita kuvataan UML-oliodiagrammeissa hieman luokkadiagrammien luokkia vastaavilla symboleilla. Olion symboli on laatikko, joka on jaettu yhdellä vaakasuoralla viivalla kahteen osaan. Ylemmässä osassa kuvataan alleviivattuna tekstinä olion mahdollinen nimi ja sen luokan nimi käyttäen seuraavaa syntaksia:

[colion nimi>] : [cluokan nimi>]

Esimerkkejä:

12345A : Opiskelija : Opiskelija

12345A :

Oliota kuvaavan symbolin alaosassa luetellaan olioiden attribuutteja arvoineen yksi attribuutti riviä kohden. Attribuuttien tiedoille käytetään syntaksia:

<attribuutin nimi> = <attribuutin arvo>

Liite A: UML-notaatio Esimerkki:

nimi = "Teemu Teekkari"

arvosana = 4

Olioiden väliset suhteet

Olioiden välisiä suhteita kuvataan samalla tavalla kuin luokkadiagrammissa olioiden välisillä viivoilla, joissa olioiden roolit kuvataan viivojen päätepisteiden viereen tekstinä. Minkäänlaisia navigoitavuus, kompositio, kardinaliteetti ym. symboleita ei oliodiagrammissa tarvita, koska niillä ei ole vastaavaa hyötyä oliodiagrammissa kuin luokkadiagrammissa.

Kuvassa A.2 on yksinkertainen hypoteettinen esimerkki kuvan A.l mukaisia luokkia käyttävän ohjelman ajonaikaista tilannetta kuvaavasta UML-oliodiagrammista.

omistaja renkaat

kulkuneuvot

moottori

V8 : Moottori Sami Suhari: Ihminen

renkaanTyyppi = pieni : Rengas

renkaanTyyppi = pieni : Rengas

renkaanTyyppi = pieni : Rengas

renkaanTyyppi = pieni : Rengas

Lada : Auto

huippunopeus = 100

Kuva A.2: Esimerkki UML-oliodiagrammista

Lähdeluettelo

[Fowler&Scott 1999] Fowler, Martin. Scott, Kendall: UML Distilled Second Edition: A Brief Guide to the Standard Object Modeling Language. Addison-Wesley, URL:<http://www.aw.com/>,

1999, ISBN 0-201-65783-X.

Liite B: Must Modeller: in graafinen käyttöliittymä

Liite B: Must Modellerin graafinen käyttöliittymä

Must Modeller-ohjelmiston kehitys aloitettiin vuonna 1995 aikaisemman 16 bittisille Microsoft Windows-käyttöjärjestelmille tarkoitetun Must-ohjelmiston pohjalta. Koska Must Modellerin käyttöliittymä on toteutettu suurimmaksi osaksi Microsoft Foundation Classes-luokkakirjastoa käyttäen, ei se toimi suoraan vanhoissa 16 bittisillä Microsoft Windows-käyttöjärjestelmissä. Must Modeller tarjoaa normaalin graafisen käyttöliittymän lisäksi COM- ja DDE-rajapinnat, joiden kautta Must Modelleriin ladattuja Must-oliomalleja pääsee käsittelemään myös muista ohjelmista käsin, ja tarvittaessa ohjelmalle voi rakentaa kokonaan uuden käyttöliittymän esimerkiksi Visual Basic- tai Java-ohjelmointikieliä käyttäen.

Tässä kappaleessa kuvataan lyhyesti Must Modelleriin toteutetun graafisen käyttöliittymän toimintaperiaatteita.

Pääikkuna

Must Modellerin graafista käyttöliittymää hallitsee pääikkuna, jonka sisälle voi avata erilaisia näkymiä. Pääikkuna sisältää valikkopalkin, työkalupalkin, muuteltavan määrän näkymiä käsiteltävään oliomalliin sekä tilapalkin. Seuraavassa taulukossa on kuvattu keskimääräiselle Must Model ler: in graafisen käyttöliittymän käyttäjälle tutuimmaksi käyvät näkymät, sekä niiden yleisimmät käyttötarkoitukset.

Näkymän nimi Näkymän käyttötarkoitus

Browser Oliomallin selaus ja rakennusnäkymä. Suurin osa Must-

oliomallin kehittämistyöstä tehdään tämän näkymän avulla. Lisää näkymästä kappaleessa Selain.

Calculator Laskennan ohjausnäkymä. Tästä näkymästä näkee muunmuassa invalidoitut attribuutit sekä voi käynnistää laskennan kaikille invalidoiduille attribuuteille.

Messages Tämä näkymä sisältää listan kaikista merkittävistä viesteistä tapahtuma-aikoineen, joita Must on istunnon aikana luonut.

Esimerkiksi laskennan aikana tapahtuneet virheet näkee tämän näkymän kautta.

TableView Erityistä TableFormatCodes-kuvauskieltä [Lehto 1995] käyttäen luotu taulukkolaskinohjelman kaltainen näkymä Must-

oliomalliin. Lisää näkymästä kappaleessa Taulukkonäkymät.

Taulukko B.l : Must Modellerin näkymiä oliomalliin

Kuvassa B.l on esimerkki pääikkunan näkymästä oliomalliin, jota käytettiin diplomityön esimerkeissä (esimerkiksi kappaleessa 6.7).

Liite B: Must Modeller: in graafinen käyttöliittymä

Kuva B.l: Pääikkuna, jossa on avattuna selain-näkymä oliomalliin

Selain

Selain-ikkuna, joka näkyy kuvassa B.l ikkunana, jonka otsikkopalkissa lukee “Main Browser: Opiskelija - 67890B - painotettuKeskiarvo”, koostuu kahdesta rivistä alanäkymiä.

Ylempää näkymäriviä käytetään oliomallin olioiden valintaan. Vasemmanpuoleista näistä kolmesta valitsin-ikkunasta käytetään oliomallin luokan valintaan, keskimmäistä tähän valittuun luokkaan kuuluvan instanssin (tai instanssien) valintaan ja oikeanpuoleista valittujen instanssien attribuutin tai attribuuttien valintaan. Esimerkiksi kuvassa B.l on valittu luokan “Opiskelija” instanssin “67890B” tietoalkio

“painotettuKeskiarvo”.

Alempi näkymärivi sisältää kaksi ominaisuuksien tarkasteluun ja muutteluun tarkoitettua näkymää, joiden avulla tarkastellaan ja muutellaan aina ylärivin näkymien valintojen mukaisia oliomallin rakenteita. Tarkastelua ja muuttelua varten on molemman ominaisuus-näkymän yläosassa valitsin, josta valitaan varsinainen näkymä, jota käyttäen valittuja rakenteita manipuloidaan. Esimerkiksi kuvassa B.l on vasemmanpuoleiseksi näkymäksi valittu “Properties”-näkymä, joka kuvan valinnan tapauksessa näyttää valitun tietoalkion arvoa. Oikeanpuoleisena näkymänä on valittu

Liite B: Must Modelleriin graafinen käyttöliittymä

“Calculation Rule”-näkymä, jolla voidaan muokataan valitun tietoalkion laskentasääntöä.

Taulukkonäkymät

Taulukkonäkymät Must Modellerissa ovat Microsoft Excel-taulukkonäkymien kaltaisia, soluihin jaettuja näkymiä, joita käytetään usein varsinaisina loppukäyttäjän käyttöliittyminä sovelluksen käyttöön. Must Modellerin graafisen käyttöliittymän lisäksi taulukkonäkymiä voi katsella myös Excelistä Must Modellerin DDE-rajapinnan välityksellä.

Kuvassa B.2 on esitetty yksinkertainen taulukkonäkymä diplomityössä käytettyyn esimerkkimaihin. “Table View: Oppilaaf’-otsikkoisessa ikkunassa on itse taulukkonäkymä, josta tarkasteltavaa oppilasta voi vaihtaa painamalla “Valitse opiskelija...”-nappia. Taulukkonäkymä-ikkunan alapuolella on avattuna tekstieditori, joka näyttää taulukkonäkymää vastaavan TFC-koodin.

Kuva B.2: Yksinkertainen taulukkonäkymä

Liite B: Must Modellerån graafinen käyttöliittymä

Lähdeluettelo

[Lehto 1995] Lehto, Teemu: Funktionaalisen oliopohjaisen

sovelluskehittimen suunnittelu ja toteutus. Diplomityö, Tietotekniikan osasto, Teknillinen korkeakoulu, 1995.

Liite C: XML-siirtotiedostoesimerkki

Liite C: XML-siirtotiedostoesimerkki

Seuraavassa kappaleessa 8.1.3 esitetyn esimerkin tuottama siirtotiedosto, mikäli käytettäisiin kappaleessa 8.2.1 esiteltyä XML-siirtotiedostoformaattia.

<?xml version="l.0”?>

<!-- Export independent block begins -->

<!DOCTYPE MUST_EXPORT [

< ! ELEMENT MUST_EXPORT (MODULE* )>

<!ATTLIST MUST_EXPORT VERSION CDATA #REQUIRED>

< ! ELEMENT MODULE (CLASS*, INSTANCE* )>

<!ATTLIST MODULE ID CDATA *REQUIRED>

<! ELEMENT CLASS (ITEM*, RELATION*) >

<!ATTLIST CLASS ID CDATA #REQUIRED SUPERCLASS CDATA "”>

<!ELEMENT ITEM (RULE?)>

<!ATTLIST ITEM ID CDATA »REQUIRED TYPE CDATA ”Number">

< ! ELEMENT RELATION (RULE?) >

<! ATTLIST RELATION ID CDATA »REQUIRED TARGET_CLASS CDATA ""

CARDINALITY (one|many) ”many"

TWO_WAY_LINK CDATA "">

<!ELEMENT RULE (»PCDATA) >

<! ELEMENT INSTANCE (VALUE* )>

<!ATTLIST INSTANCE ID CDATA »REQUIRED CLASS CDATA #REQUIRED>

<!ELEMENT VALUE (»PCDATA)>

<!ATTLIST VALUE ID CDATA #REQUIRED>

]>

<!— Export independent block ends —>

<MUST_EXPORT VERSION= " test" >

«MODULE ID=”Opiskelijat”>

«CLASS ID="Opiskeli]a" SUPERCLASS="Ihminen">

«ITEM ID="nimi" TYPE="String” />

«ITEM ID="painotettuKeskiarvo">

Liite C: XML-siirtotiedostoesimerkki

<CLASS ID="Kurssi">

«RELATION ID="opiskelijät"

TARGET_CLASS="Opintosuoritus"

TWO_WAY_LINK="kurssi” />

</CLASS>

«INSTANCE ID="12345A" CLASS="Opiskelija">

«VALUE ID="nimi">011i Opiskelija«/VALUE>

«VALUE ID="opintosuoritukset”>Opintosuoritusl«/VALUE>

</INSTANCE>

«INSTANCE ID=”67890B" CLASS=”Opiskelija">

«VALUE ID="nimi">Teemu Teekkari«/VALUE>

«VALUE ID="opintosuoritukset">0pintosuoritus2,0pintosuoritus3«/VALUE>

</INSTANCE>

«INSTANCE ID="Opintosuoritusl" CLASS="Opintosuoritus">

«VALUE ID="opiskelija">12345A«/VALUE>

«VALUE ID="kurssi">Tikl23456«/VALUE>

«VALUE ID=”arvosana">3</VALUE>

</INSTANCE>

«INSTANCE ID=”Opintosuoritus2" CLASS="Opintosuoritus">

«VALUE ID="opiskelija">67890B«/VALUE>

«VALUE ID="kurssi">Tikl23456«/VALUE>

«VALUE ID=”arvosana">0</VALUE>

</INSTANCE>

«INSTANCE ID="0pintosuoritus3" CLASS="Opintosuoritus">

«VALUE ID="opiskelija">67890B«/VALUE>

«VALUE ID="kurssi”>Tikl23456«/VALUE>

«VALUE ID="arvosana”>5</VALUE>

</INSTANCE>

«INSTANCE ID="Tikl23456" CLASS="Kurssi">

«VALUE ID="opiskelijät">12345A,67890B«/VALUE>

</INSTANCE>

</MODULE>

</MUST_EXPORT>

Liite D: Visual Basic-siirtotiedostoesimerkki

Liite D: Visual Basic-siirtotiedostoesimerkki

Seuraavassa kappaleessa 8.1.3 esitetyn esimerkin tuottama siirtotiedosto, mikäli käytettäisiin kappaleessa 8.2.2 esiteltyä Visual Basic-tyyppistä siirtotiedostoformaattia.

' Export independent block begins --- >

Type CalculationRule rule As String End Type

Type Item

ID As String type As String

rule As CalculationRule End Type

targetClass As String

cardinality As CardinalityEnum twoWayLink As String

rule As CalculationRule End Type

Type Instance ID As String items() As String relations() As String End Type

Type Class

ID As String

superclass As String items 0 As Item

relations() As Relation instances!) As Instance End Type

Type Module ID As String classes!) As Class End Type

' <--- Export independent block ends Dim Opiskeli]at_Module As Module

Sub Initialize!)

.rule.rule = "Sum(opintosuoritukset.painotettuArvosana) /

Liite D: Visual Basic-siirtotiedostoesimerkki

.cardinality = Many .twoWayLink = "opiskelija"

End With

' Instances of Opiskelija-class ReDim .instances(1)

With .instances(0) ReDim .items(1) ReDim .relations(0)

.ID = "12345A"

.items (0) = "Olli Opiskelija"

.relations(0) = "Opintosuoritus!"

.items (0) = "Teemu Teekkari"

.relations(0) = "Opintosuoritus2,Opintosuoritus!"

.ID = "painotet tuArvo sana"

.type = "Number"

.rule.rule = "kurssi.opintoviikot * arvosana"

End With

With .relations(0) .ID = "opiskelija"

.targetClass = "Opiskelija"

.cardinality = One

.twoWayLink = "opintosuoritukset"

End With

With .relations(1) .ID = "kurssi"

.targetClass = "Kurssi"

.cardinality = One

.twoWayLink = "opiskelijat”

End With

' Instances of Opintosuoritus-class ReDim .instances(2)

Liite D: Visual Basic-siirtotiedostoesimerkki

.items(0) = "S"

.relations(0) = "67890B"

•relations(1) = ”Tikl23456"

End With End With

' Kurssi-class With .classes(2)

.ID = "Kurssi"

ReDim .relations(0) With .relations(0)

.ID = "opiskelijat"

.targetClass = "Opintosuoritus"

.cardinality = Many .twoWayLink = "kurssi"

End With

' Instances of Kurssi-class ReDim .instances(0)

With .instances(0) ReDim .relations(0)

.ID = "Tikl23456”

.relations(0) = "12345A,67890B"

End With End With End With End Sub

Liite E: Oman siirtotiedostoformaatin käyttöesimerkki

Liite E: Oman siirtotiedostoformaatin käyttöesimerkki

Seuraavassa kappaleessa 8.1.3 esitetyn esimerkin tuottama siirtotiedosto, mikäli käytettäisiin kappaleessa 8.2.3 esiteltyä vain tätä tarkoitusta varten suunniteltua siirtotiedostoformaattia.

module Opiskelijat { // Class definitions

class Opiskelija : Ihminen { nimi : String;

painotettuKeskiarvo : Number {"

Sum(opintosuoritukset.painotettuArvosana) / Sum (opintosuoritukset.kurssi.opintoviikot)

opintosuoritukset : Relation(Opintosuoritus, many, opiskelija);

) ;

class Opintosuoritus { arvosana : Number;

painotettuArvosana : Number {"

kurssi.opintoviikot * arvosana

opiskelija : Relation(Opiskelija, one, opintosuoritukset);

kurssi : Relation(Kurssi, one, opiskelijat);

} ;

class Kurssi {

opiskelijat : Relation(Opintosuoritus, many, kurssi);

) ;

// Class instanciations instance 12345A : Opiskelija {

nimi = "Olli Opiskelija";

opintosuoritukset = "Opintosuoritus!11 ; };

instance 67890B : Opiskelija { nimi = "Teemu Teekkari";

opintosuoritukset = "0pintosuoritus2,Opintosuoritus!”;

} ;

instance Opintosuoritusl : Opintosuoritus { opiskelija = "12345A";

kurssi = "Tikl23456";

arvosana = ”3”;

instance Opintosuoritus! : Opintosuoritus { opiskelija = "67890B";

kurssi = "Tikl23456";

arvosana = "0";

instance Opintosuoritus! : Opintosuoritus { opiskelija = "6789OB";

kurssi = "Tikl23456";

arvosana = "5";

instance Tikl23456 : Kurssi {

opiskelijat = "12345A,67890B";

} ; );

Liite E: Oman siirtotiedostoformaatin käyttöesimerkki Edellisen esimerkin siirtotiedoston kieliopin ANTLRm [jGuru 2000] hyväksymän EBNF:n mukainen kuvaus on seuraava:

// Lexer tokens STRING

: (VW I 'W')) I -('"'))

IDENTIFIER

COMMENT

: "//" (-('\n-I'\r'))* ('\n'|'\r'('\n')?)

// Parser definition exportFile

: (moduleDefinition ";") +

moduleDefinition

: "module” IDENTIFIER

(

( classDefinition

! instanceDefinition

)

) +

’}*

EOF

classDefinition

: "class" IDENTIFIER (":" superclassDefinition)? classBlock

superclassDefinition

: IDENTIFIER ("," IDENTIFIER)*

classBlock

: (classAttributeDefinition ";")*

classAttributeDefinition

: IDENTIFIER ":" IDENTIFIER typeParameters calculationRule

typeParameters

: "(" typeParameterList ")"

typeParameterList

: IDENTIFIER ("," IDENTIFIER)*

calculationRule

: "{* STRING ")"

instanceDefinition

: "instance" IDENTIFIER IDENTIFIER "V instanceBlock

instanceBlock

: (instanceAttributeDefinition •;•)*

ins tanceAttributeDef inition

: IDENTIFIER " = " STRING