SAtunnaisen YÖkooderin NAputtelun RAtkaisija. LKTT syksy 2006

Samankaltaiset tiedostot
mai 1. Perusrakenteita

abba 1. Perusrakenteita

sohvi 1. Perusrakenteita

815338A Ohjelmointikielten periaatteet Harjoitus 3 vastaukset

Kielioppia: toisin kuin Javassa

Ohjelmointiharjoituksia Arduino-ympäristössä

Java-kielen perusteet

Harjoitustyö: virtuaalikone

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

Lyhyt kertaus osoittimista

Ohjelmassa muuttujalla on nimi ja arvo. Kääntäjä ja linkkeri varaavat muistilohkon, jonne muuttujan arvo talletetaan.

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

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

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

Java-kielen perusteet

815338A Ohjelmointikielten periaatteet Harjoitus 2 vastaukset

Operaattoreiden ylikuormitus. Operaattoreiden kuormitus. Operaattoreiden kuormitus. Operaattoreista. Kuormituksesta

ITKP102 Ohjelmointi 1 (6 op)

IDL - proseduurit. ATK tähtitieteessä. IDL - proseduurit

ATK tähtitieteessä. Osa 3 - IDL proseduurit ja rakenteet. 18. syyskuuta 2014

4. Luokan testaus ja käyttö olion kautta 4.1

Ohjelmoinnin perusteet Y Python

Tutoriaaliläsnäoloista

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

Chapel. TIE Ryhmä 91. Joonas Eloranta Lari Valtonen

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

Ohjelmoinnin perusteet Y Python

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

Tieto ja sen osoite (3) Jakso 3 Konekielinen ohjelmointi (TTK-91, KOKSI) Osoitinmuuttujat. Tieto ja sen osoite (5)

ITKP102 Ohjelmointi 1 (6 op)

Osoitin ja viittaus C++:ssa

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

Tietueet. Tietueiden määrittely

A TIETORAKENTEET JA ALGORITMIT

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

815338A Ohjelmointikielten periaatteet Harjoitus 5 Vastaukset

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

Luento 5. Timo Savola. 28. huhtikuuta 2006

Ohjelmointi 2. Jussi Pohjolainen. TAMK» Tieto- ja viestintäteknologia , Jussi Pohjolainen TAMPEREEN AMMATTIKORKEAKOULU

Ohjelmoinnin perusteet Y Python

Olion elinikä. Olion luominen. Olion tuhoutuminen. Olion tuhoutuminen. Kissa rontti = null; rontti = new Kissa();

7. Oliot ja viitteet 7.1

Algoritmit 1. Demot Timo Männikkö

815338A Ohjelmointikielten periaatteet Harjoitus 4 vastaukset

Jakso 3 Konekielinen ohjelmointi (TTK-91, KOKSI)

Jakso 3 Konekielinen ohjelmointi (TTK-91, KOKSI)

Aliohjelmatyypit (2) Jakso 4 Aliohjelmien toteutus

Jakso 4 Aliohjelmien toteutus

Groovy. Niko Jäntti Jesper Haapalinna Group 31

Luento 4 Aliohjelmien toteutus

Harjoitus 5 (viikko 48)

Ohjausjärjestelmien jatkokurssi. Visual Basic vinkkejä ohjelmointiin

05/04/2004. Digitaalisen median tekniikat, k2004 HY/TKTL, javascript_1. Harri Laine 1. JavaScript

Ohjelmoinnin peruskurssi Y1

Digitaalisen median tekniikat JavaScript

Ohjelmointi 1 Taulukot ja merkkijonot

Digitaalisen median tekniikat JavaScript Harri Laine 1

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

Loppukurssin järjestelyt C:n edistyneet piirteet

Jakso 4 Aliohjelmien toteutus

Sisällys. 7. Oliot ja viitteet. Olion luominen. Olio Java-kielessä

Taulukot. Jukka Harju, Jukka Juslin

Ohjelmointikieli TIE Principles of Programming Languages Syksy 2017 Ryhmä 19

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

Osoittimet ja taulukot

Ohjelmoinnin perusteet Y Python

Tähtitieteen käytännön menetelmiä Kevät 2009 Luento 4: Ohjelmointi, skriptaus ja Python

Metodit. Metodien määrittely. Metodin parametrit ja paluuarvo. Metodien suorittaminen eli kutsuminen. Metodien kuormittaminen

TIETORAKENTEET JA ALGORITMIT

Geneeriset luokat. C++ - perusteet Java-osaajille luento 6/7: Template, tyyppi-informaatio, nimiavaruudet. Geneerisen luokan käyttö.

Ohjelmoinnin perusteet Y Python

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

Sisällys. 6. Muuttujat ja Java. Muuttujien nimeäminen. Muuttujien nimeäminen. salinovi tai syntymapaiva

6. Muuttujat ja Java 6.1

Tieto- ja tallennusrakenteet

7. Näytölle tulostaminen 7.1

C++11 lambdat: [](){} Matti Rintala

tietueet eri tyyppisiä tietoja saman muuttujan arvoiksi

Ohjelmoinnin peruskurssien laaja oppimäärä

Algoritmit 1. Luento 3 Ti Timo Männikkö

Ohjelmoinnin perusteet Y Python

Loppukurssin järjestelyt

Abstraktit tietotyypit. TIEA341 Funktio ohjelmointi 1 Syksy 2005

Algoritmit 1. Luento 4 Ke Timo Männikkö

Rakenteiset tietotyypit Moniulotteiset taulukot

Monipuolinen esimerkki

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin peruskurssi Y1

Luento 4 (verkkoluento 4) Aliohjelmien toteutus

Ohjelmoinnin perusteet Y Python

ITKP102 Ohjelmointi 1 (6 op)

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

C++11 Syntaksi. Jari-Pekka Voutilainen Jari-Pekka Voutilainen: C++11 Syntaksi

Luento 4 (verkkoluento 4) Aliohjelmien toteutus

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

Sisällys. 1. Omat operaatiot. Yleistä operaatioista. Yleistä operaatioista

Ohjelmoinnin perusteet Y Python

TIE PRINCIPLES OF PROGRAMMING LANGUAGES Eiffel-ohjelmointikieli

Sisältö. 2. Taulukot. Yleistä. Yleistä

Ohjelmoinnin peruskurssien laaja oppimäärä

Transkriptio:

1 sayōnara SAtunnaisen YÖkooderin NAputtelun RAtkaisija LKTT syksy 2006 2. KESÄKUUTA 2006, VERSIO 1.11 Kielen määrittely annetaan laajennetulla BNF-notaatiolla, joka on seuraava. <nimi> ::= määrittely määrittelee välisymbolin nimi a1 a2 a1 jota välittömästi seuraa a2 a1 a2 a1 tai a2 [ a ] a tai ei mitään { a } nolla tai useampia kertoja a ( a1 a2 ) a3 kaarisulut määräävät vaikutusalueen (esimerkissä a1 tai a2 ja heti perään a3) Kun <nimi> esiintyy operaattorin ::= oikealla puolella, on sen merkitys täsmälleen sama kuin määrittely. 1. Perusrakenteita 1.1. Kommentti on merkkijono, joka alkaa // ja päättyy rivin loppuun. 1.2. Alkioiden (non-terminaalit) välissä saa olla tyhjiä merkkejä: välilyönti, rivinvaihto tai tabulaattori. 1.3. digit ::= 0 1... 9 1.4. integer ::= digit { digit } 1.5. scale_factor ::= ( E e ) [ + - ] integer 1.6. float ::= integer. integer [ scale_factor ] 1.7. number ::= integer float 1.8. letter ::= a... z A... Z ö Ö ä Ä 1.9. ident ::= letter { letter digit _ } 1.10. ident_list ::= ident {, ident } 1.11. qualident ::= designator 1.12. full_ident ::= ident [ [ expression_list ] ] 1.13. designator ::= { full_ident. } full_ident 1.14. single_character ::= ascii merkki 32-255 1.15. character ::= single_character \ single_character sayonara.tex 1 Rev: 1.11, Rel, 2. kesäkuuta 2006

2 1.16. char_constant ::= character 1.17. string_constant ::= { character } 1.18. Kielen varatut sanat (tunnistetaan pienellä kirjoitettuna): and array const declare div do done else elsif end eval exit external fi function hash if import in internal iterate loop mod module not of or out pointer pool procedure record requires return stack type while Näiden lisäksi varattuja sanoja ovat myös kaikki kielen tietotyyppien nimet: bool, char, float, int, str sekä sisäisten funktioiden ja proseduurien nimet: chr, convert, dispose, len, isempty, new, pop, print, println, push, ord ja osoittimiin liittyvät nimet val, nil. 2. Kielen syntaksi 2.1. Käännösyksikkö 2.1.1. compilation ::= module { module } 2.1.2. module ::= ident module [ import_part ] declaration_part procedure_part [ do statement_sequence ] done ident. 2.2. Moduulin pääosat 2.2.1. import_part ::= import ident_list ; 2.2.2. declaration_part ::= { type_declaration ; variable_declaration ; } 2.2.3. procedure_part ::= { procedure_declaration ; function_declaration ; } 2.3. Peruslauseita 2.3.1. boolean_exp ::= expression 2.3.2. statement ::= assignment procedure_call if_statement loop_statement while_statement iterate_statement exit [ boolean_exp ] return [ expression ] eval expression 2.3.3. statement_sequence ::= [ declare declaration_part do ] statement ; { statement ; } sayonara.tex 2 Rev: 1.11, Rel, 2. kesäkuuta 2006

3 2.3.4. assignment ::= designator := expression 2.3.5. procedure_call ::= qualident [ actual_parameters ] 2.3.6. if_statement ::= if boolean_exp do statement_sequence { elsif boolean_exp do statement_sequence } [ else statement_sequence ] fi 2.3.7. loop_statement ::= loop statement_sequence pool 2.3.8. while_statement ::= while boolean_exp loop_statement 2.3.9. iterate_statement ::= iterate ident in range loop_statement 2.3.10. range ::= expression expression.. expression 2.4. Funktiot ja proseduurit 2.4.1. fp_section ::= [ in ] [ out ] ident_list : type 2.4.2. formal_parameters ::= ( fp_section { ; fp_section } ) 2.4.3. procedure_heading ::= procedure ident [ formal_parameters ] 2.4.4. procedure_body ::= statement_sequence done [ ident ] 2.4.5. procedure_declaration ::= procedure_heading = procedure_body 2.4.6. function_heading ::= function ident [ formal_parameters ] return type 2.4.7. function_declaration ::= function_heading = procedure_body 2.4.8. actual_parameters ::= ( [ expression_list ] ) 2.4.9. function_call ::= qualident actual_parameters 2.5. Tyypit ja muuttujat 2.5.1. type ::= qualident [ pointer ] 2.5.2. record_type ::= record ident : type { ; ident : type } end 2.5.3. array_type ::= array [ range {, range } ] of type 2.5.4. hash_type ::= hash of type, type 2.5.5. stack_type ::= stack of type sayonara.tex 3 Rev: 1.11, Rel, 2. kesäkuuta 2006

4 2.5.6. type_declaration ::= type ident = ( type record_type array_type hash_type stack_type ) 2.5.7. hash_val ::= factor : expression 2.5.8. hash_init ::= { hash_val {, hash_val } } 2.5.9. array_init ::= [ expression_list ] 2.5.10. initialization ::= expression array_init hash_init 2.5.11. variable_declaration ::= ident_list : type [ := initialization ] const ident := initialization 2.6. Lausekkeet 2.6.1. primary ::= number char_constant string_constant designator function_call ( expression ) 2.6.2. prefix_op ::= + - not % 2.6.3. factor ::= [ prefix_op ] primary 2.6.4. mult_op ::= * / div mod 2.6.5. term ::= factor { mult_op factor } 2.6.6. add_op ::= + - & 2.6.7. simple_expression ::= term { add_op term } 2.6.8. relation_op ::= = # = = 2.6.9. relation ::= simple_expression [ relation_op simple_expression ] 2.6.10. expression ::= relation { and relation } relation { or relation } 2.6.11. expression_list ::= expression {, expression } 2.7. Import-moduulin rakenne 2.7.1. import_module ::= ident external [ requires_part ] import_declaration_part import_procedure_part. 2.7.2. requires_part ::= requires ident_list ; 2.7.3. import_type_declaration ::= type_declaration 2.7.4. import_variable_declaration ::= ident : [ const ] type internal string_constant sayonara.tex 4 Rev: 1.11, Rel, 2. kesäkuuta 2006

5 2.7.5. import_declaration_part ::= { import_variable_declaration ; import_type_declaration ; } 2.7.6. import_procedure_part ::= { procedure_heading internal string_constant ; function_heading internal string_constant ; } 3. Tietotyypit 3.1. bool : totuusarvot true ja false. 3.2. char : ascii-merkki (8 bittinen). 3.3. int : etumerkillinen kokonaisluku (32 bittinen). 3.4. float : liukuluku (64 bittinen). 3.5. str : merkkijono (kuten C-kielessä eli ascii-merkit ja viimeisenä tavuna nolla). Merkkijonoa voi indeksoida, jolloin saatu yksittäinen merkki on tyyppiä char. 3.6. array : Samaa tietotyyppiä sisältävä 1 N ulotteinen taulukko. 3.7. hash : Assosiatiivinen taulukko. 3.8. stack : Pino, jota käsitellään aliohjelmilla push, pop ja isempty. 4. Semantiikkaa (tämä ei ole täydellinen luettelo, tarkista WWW-sivulta) 4.1. Leksikaalit 4.1.1. Merkkiliteraalien ja merkkijonojen yhteydessä voidaan käyttää merkintää \x, joka tarkoittaa merkkiä x itse tai erikoismerkintää jostain ohjauskoodista. Tällä tavoin saadaan kirjattua esim. merkkijonon sisään lainausmerkki. Ainakin seuraavien symbolien on toimittava: \n rivinvaihto (kuten C-kielessä) \t tabulaattori \0 nolla (merkkijonon lopetusmerkki) \ merkki itse (heittomerkki) \" merkki itse (lainausmerkki) \\ merkki itse (takakenoviiva) 4.1.2. Merkkijonon sisällä esiintyvät // eivät aloita kommenttia. 4.1.3. Kielen varattu sana ei saa esiintyä muussa kuin syntaksin määräämässä merkityksessä. Varattu sana ei siis voi olla esim. moduulin, muuttujan tai tietotyypin nimenä. 4.1.4. qualident tarkoittaa pisteillä toisistaan eroteltuja nimiä (esim. moduuli.funktionimi ). sayonara.tex 5 Rev: 1.11, Rel, 2. kesäkuuta 2006

6 4.1.5. Nimien peittyminen on sallittua (eli jos esim. funktion parametrina on muuttuja i ja funktion rungossa iterate-silmukan silmukkamuuttuja on i, niin silmukan sisällä i-tarkoittaa silmukkamuuttujaa ja edellisen tason muuttujaan ei pystytä viittaamaan). 4.2. Moduulit 4.2.1. Määrittelyn lopussa oleva ident on sama kuin moduulin nimi. 4.2.2. Import-moduuli ei esiinny yksinään käännösyksikkönä, vaan se luetaan erillisestä tiedostosta import -käskyn seurauksena. 4.2.3. Import-moduulin requires -osassa luetellut moduulit otetaan automaattisesti mukaan käännökseen ( monuulinimi.o ) ja niiden alustuskoodi suoritetaan. 4.2.4. Ohjelmakoodi lähtee suoritukseen Main-nimisen moduulin alustuskoodista. Kaikki muut moduulit ovat käännösyksiköitä, joista tuotetaan esittelytiedosto ja objektitiedosto. 4.2.5. Esittelytiedosto tuotetaan nimelle moduulinimi.sayonaradef 4.2.6. Import-moduulina käyttöön otettujen moduulien alustuskoodit on suoritettava ennen Main:n käynnistymistä. 4.2.7. Jokaisen moduulin ohjelmakoodissa on globaali rutiini assemblernimellä moduulinimi$init, joka suorittaa moduulin alustuksen. 4.2.8. Import-moduulien internal -määreet (merkkijono) kertovat rakenteista käytettävän nimen assembler-tasolla. 4.3. Lauseet 4.3.1. iterate -silmukan silmukkamuuttuja on näkyvissä ainoastaan silmukan sisällä. 4.3.2. iterate -silmukan silmukkamuuttujaan ei saa sijoittaa. 4.3.3. Pinolle suoritettu iterate käy läpi pinon kaikki alkiot (suunnassa pinon päältä pohjalle ). 4.3.4. Hash-taulukolle suoritettu iterate käy läpi taulukon kaikki avaimet type T = hash of str, int; puhelinluettelo : T := { "jyke": 123456, "bitti": 456123 } // tulosta kaikki numerot iterate nimi in puhelinluettelo loop println( puhelinluettelo[nimi] ); pool; sayonara.tex 6 Rev: 1.11, Rel, 2. kesäkuuta 2006

7 4.3.5. Taulukolle suoritettu iterate on määritelty vain yksiulotteisille taulukoille. 4.3.6. exit boolean_exp poistuu sisimmästä loop -lohkosta, jos ehtolauseen arvo on true. 4.3.7. exit -lause voi esiintyä ainoastaan loop -rakenteen sisällä. 4.3.8. eval suorittaa lausekkeen ja hukkaa sen arvon (käytetään lähinnä silloin, jos halutaan kutsua funktiota ilman, että sen paluuarvolla on merkitystä). 4.3.9. declare luo uuden näkyvyysalueen, jossa määritellyt tyypit ja muuttujat ovat voimassa seuraavaan lohkon sulkevaan rakenteeseen. 4.4. Tietotyypit 4.4.1. Tietotyypeillä on nimiekvivalenssi. Ainoastaan samalla nimellä olevista tietotyypeistä luodut muuttujat ovat keskenään yhteensopivia. 4.4.2. Automaattisia tyyppimuunnoksia tietotyyppien välillä ei ole olemassa. 4.4.3. Literaalivakiot ovat yhteensopivia johdettujen tyyppien kanssa. type Omena = int; type Päärynä = int; o : Omena; p : Päärynä;... o := 4; // ok (int literaali käy) p := 7; // ok o := p; // eivät yhteensopivia (nimiekvivalenssi) 4.4.4. Osoittimilla on erityinen tyhjä arvo nil, joka on tyyppiyhteensopiva kaikkien osoitintietotyyppien kanssa. 4.4.5. record -tyyppi saa sisältää osoittimen samaa tietotyyppiä oleviin alkioihin. type IntList = record x : int; next : IntList pointer end; 4.4.6. Jos osoitinta käytettäessä on yksikäsitteistä, että tarkoitetaan osoittimen päässä olevaa arvoa, toiminta tehdään automaattisesti. Jos sayonara.tex 7 Rev: 1.11, Rel, 2. kesäkuuta 2006

8 käyttötilanne ei ole selkeä, kerrotaan varatulla sanalla val tilanteet joissa halutaan käyttää osoittimen päässä olevaa arvoa. nimi osoitin osoitin.val osoitin.nimi merkitys osoittimen arvo osoittimen osoittama arvo osoittimen päässä olevan recordin kenttä (jolle tehdään tulkinta uudelleen) a, b : IntList; p, q : IntList pointer; p := nil; // sijoitetaan osoitinmuuttujaan tyhjä arvo p := %a; q := %b; q.next := nil; q.x := 42; p.val := q.val; // q:n osoittama record kopioidaan // p:n osoittamaan paikkaan p.next := q; p.next.x := 1; // muuttujan b kenttä x p.next.next := nil; p.next.next.val := b; // semanttisesti oikein, // viittaus nil:n läpi p := q; // osoitin q muuttujaan p 4.4.7. Eri tietotyyppien oletusalkuarvot ovat: false, a, 0, 0.0, "sayonara", nil. 4.5. Lausekkeet 4.5.1. # on erisuuruusoperaattori. 4.5.2. boolean_exp on lauseke, jonka tietotyyppi on bool. 4.5.3. Peruslaskutoimitukset toimivat totutulla tavalla tietotyypeillä int ja float. 4.5.4. Perustietotyyppien välillä ei ole automaattisia tyyppimuunnoksia. (Erityisesti int ja float eivät ole yhteensopivia.) 4.5.5. mod ja div toimivat vain kokonaisluvuilla int ja toteuttavat ehdot x = (x div y) y + (x mod y) 0 (x mod y) < y tai y < (x mod y) 0 sayonara.tex 8 Rev: 1.11, Rel, 2. kesäkuuta 2006

9 4.5.6. Merkkijonoilla str katenointi ( & ) tuottaa uuden merkkijonon, joka on yhdistelmä laskun termeistä. 4.5.7. Operaattori % antaa muuttujaan viittaavan osoittimen. 4.5.8. Osoittimien arvoilla toimivat yhtä- ja erisuuruusvertailut. 4.5.9. and ja or noudattavat oikosulkuevaluointia (ketjutetun lausekkeen laskeminen lopetetaan heti kun sen lopputulos on tiedossa). 4.6. Muuttujat 4.6.1. const -muuttujien tietotyyppi määräytyy määrittelyn alustuslausekkeen tietotyypin mukaan. 4.7. Funktiot ja proseduurit 4.7.1. Funktiot ja proseduurit ovat ylimääriteltyjä siten, että nimen lisäksi tarvitaan parametrien lukumäärä ja tietotyypit tunnistamaan aliohjelma. Sisäisiä funktioita ei saa ylimääritellä. 4.7.2. Funktion ja proseduurin määrittelyn lopussa oleva ident on oltava sama kuin ko. aliohjelman nimi (koodin selkeyteen tähtäävä syntaksi). 4.7.3. Parametrimääreiden toiminta: Määre <tyhjä> in out in out Käyttö sijoituksessa Luku ja kirjoitus. Kuten paikallinen muuttuja (arvoparametri). Vain luku. Vakioparametrimuuttuja. Vain kirjoitus. Viitepaluuarvo. Luku ja kirjoitus. Kuten viiteparametri. 4.7.4. Arvon palauttaminen return -lauseella proseduurista on virhe. 4.7.5. Kielen sisäiset funktiot sayonara.tex 9 Rev: 1.11, Rel, 2. kesäkuuta 2006

10 Nimi Argumentin tyyppi Tulostyyppi Toiminta len(x) str int x:n pituus (alkioiden lukumäärä, jossa merkkijonoilla ei ole mukana loppunollaa) ord(x) char int x:n järjestysnumero chr(x) 0 int 255 char x:s ascii-merkki pop(p) pino arvo Palauttaa pinon päällimmäisen alkion ja samalla poistaa ko. alkion pinosta. Jos pino on tyhjä, palautetaan nil isempty(p) pino bool Palauttaa true jos pino on tyhjä, muutoin false convert(x,t) X T Palauttaa arvon joka on tietotyyppiä T ja jonka arvo on x 4.7.6. convert -funktion tulee ymmärtää vähintään muunnokset Muunnos convert(f, int) convert(i, float) 4.7.7. Kielen sisäiset proseduurit Toiminta Palauttaa suurimman kokonaisluvun joka on f Palauttaa liukuluvun, jonka arvo on i sayonara.tex 10 Rev: 1.11, Rel, 2. kesäkuuta 2006

11 Nimi Argumentin tyyppi Toiminta new(p) osoitinmuuttuja dynaaminen muistinvaraus, johon mahtuu osoittimen tietotyyppiä oleva alkio, osoitinmuuttuja osoittaa varattuun lohkoon dispose(p) osoitinmuuttuja poistaa osoittimen päässä olevan alkion käytöstä ja asettaa parametrina olevan osoittimen arvoksi nil. print(a,b,...) luettelo dataa tulostaa parametrit println(a,b,...) luettelo dataa toimii kuten print, mutta tulostaa viimeisenä rivinvaihdon push(p,x) pino ja arvo laittaa pinon p päällimmäiseksi uuden arvon x (joka on pinon tyyppiä). 4.7.8. int, float ja str tietotyyppien parametrinvälityksen on oltava yhteensopiva gcc-kääntäjän C-kielestä tuottaman koodin kanssa (Sun/SPARC:lla käännettynä C:n vastaavat tietotyypit int, double ja char*). Tämä takaa sen, että sayonara-ohjelmat voivat käyttää C-kielellä tehtyjä kirjastoja. 4.7.9. Osoitintyypeille määritellyt new ja dispose varaavat ja vapauttavat dynaamista muistia. Molemmat ottavat yhden osoitintyyppisen argumentin. Lause new(p); varaa p:n osoittaman tyypin tarvitseman määrän dynaamista muistia, ja lause dispose(p); vapauttaa p:n osoittaman muistin. Lauseen new(p) suorittamisen jälkeen p sisältää varatun muistilohkon osoitteen (tai nil jos muistinvaraus epäonnistui). sayonara.tex 11 Rev: 1.11, Rel, 2. kesäkuuta 2006

12 5. Käyttöliittymä 5.1. Kääntäjää ajetaan komennolla sayonarac 5.2. Kääntäjän on ymmärrettävä seuraavat komentoriviparametrit -h tulostaa käyttöohjeen. tiedosto(t) luettelo lähdekooditiedostoja. -o btiedosto valmis binääri tulee nimelle btiedosto (oletuksena sayonara.out). -S käännös tuottaa tiedostoon moduulinimi.s käännöksen assembler muodossa. -llib linkittää mukaan kirjaston lib, joka on yhteensopiva C-kirjaston kanssa (esim. libcurses). -Lpath hakemisto, josta kirjastoja, moduuleja ja import-esittelyitä etsitään (jos tarvitaan useampia hakemistoja, niin valitsin annetaan useamman kerran). Työskentelyhakemisto on aina mukana etsinnässä. -Xstr asettaa päälle toteuttajien oman laajennuksen kääntäjässä. Esimerkkinä vaikkapa -Xgs ottaa käyttöön roskienkeruun tuotetussa binäärissä tai -Xjava tuottaa suoritettavan koodin javan tavukoodina. 5.3. Kääntäjä osaa ottaa itse automaattisesti mukaan kaikki tarvitsemansa apukirjastot ilman että käyttäjän tarvitsee niitä luetella -l ja -L vipusilla. Omat apukirjastot tulee sijoittaa hakemistoon, joka on kerrottu kääntäjän käännösvaiheessa Makefilen PREFIX-muuttujalla (katso tarkemmin työn palautusohjeista WWW-sivuilla). 5.4. Vinkki: tätä kaikkea ei ole tarvis nysvätä itse, vaan osan ominaisuuksista voi toteuttaa käyttämällä hyväksi C-kääntäjää (gcc). Sopivilla parametreilla ja vipusilla kirjastojen linkitys mukaan yms. saa toteutettua helposti. sayonara.tex 12 Rev: 1.11, Rel, 2. kesäkuuta 2006