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