ebooksgratis.com

See also ebooksgratis.com: no banners, no cookies, totally FREE.

CLASSICISTRANIERI HOME PAGE - YOUTUBE CHANNEL
Privacy Policy Cookie Policy Terms and Conditions
Ohjelmointikielen kääntäjä – Wikipedia

Ohjelmointikielen kääntäjä

Wikipedia

Ohjelmointikielen kääntäjä on tietokoneohjelma, joka luo tietokoneohjelman ohjelmointikielisen lähdekoodin perusteella konekielisen ajettavan binääritiedoston (eli kääntää ohjelman). Kääntäminen on siis muunnos, jossa ihmiselle helpossa muodossa oleva lähdekoodi muutetaan tietokoneen ymmärtämään muotoon.

Tietokoneen suoritin suorittaa konekieltä, joka koostuu erittäin yksinkertaisista ohjeista mallia "Laita muistipaikkaan 10 muistipaikan 14 sisältö miinus muistipaikan 12 sisältö. Jos muistipaikan 10 sisältö on alle 5000, hyppää kohtaan...". Tietokonetta ohjelmoidaan kielellä, joka voi näyttää esimerkiksi tältä: "rahaa := palkka-verot; if rahaa<5000 goto hyppy;".

Kääntäjä lukee jollakin ohjelmointikielellä kirjoitetun lähdekoodin kerralla kokonaan muistiin ja tekee siitä konekielisen version. Tulkki sen sijaan lukee lähdekoodia komennon kerrallaan, suorittaa sen ja siirtyy sitten seuraavalle riville. Analogia luonnollisen kielen kääntäjään ja tulkkiin on ilmeinen.

Joskus ohjelmat käännetään ensin kääntäjällä tavukoodiksi, jonka sitten suorittaa yksinkertainen tulkki. Näin saavutetaan sekä kääntäjän että tulkin etuja. Tyypillisesti tällä tavalla suoritettavia ohjelmointikieliä ovat Java, Python ja Ruby.

[muokkaa] Käännöksen vaiheet

Kääntäjän etuosa jaetaan usein selaajaan (engl. scanner) ja jäsentimeen (engl. parser). Selaaja tunnistaa ohjelmointikielestä alkionimet (engl. token) esimerkiksi säännöllisten lausekkeiden avulla. Jäsennin (myös jäsentäjä) tunnistaa kielen rakenteen vaikkapa sisäkkäisiä rakenteita tunnistavan LR-jäsennystä (left-right, eli läpikäynti vasemmalta oikealle, ymmärtäminen oikealta vasemmalle) käyttäen. Myös LL-jäsennystä käytetään sen yksinkertaisuuden vuoksi, mutta sellaisen avulla ei voida jäsentää kieltä, missä esiintyy nk. vasen rekursio. Esimerkiksi kielioppisääntöön

A ::= A + B

ei voida soveltaa LL-jäsentäjää, koska se joutuisi ikuiseen rekursiosilmukkaan - aliohjelmakutsut menisivät seuraavaan tapaan:

ParseA()
   ParseA()
   ParseB()
   # tee jotain A + B:lle

Unix-maailmassa perinteinen työkalu selaajien tekemiseen on Lex ja jäsentimien tekemiseen Yacc.

Kolmas käännösvaihe on semanttinen (eli merkityksen) analyysi. Tässä vaiheessa tutkitaan mm. muuttujien ja metodien nimet, tyypit ja niiden käytön oikeellisuus.


aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - bcl - be - be_x_old - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - co - cr - crh - cs - csb - cu - cv - cy - da - de - diq - dsb - dv - dz - ee - el - eml - en - eo - es - et - eu - ext - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gan - gd - gl - glk - gn - got - gu - gv - ha - hak - haw - he - hi - hif - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kaa - kab - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mdf - mg - mh - mi - mk - ml - mn - mo - mr - mt - mus - my - myv - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - quality - rm - rmy - rn - ro - roa_rup - roa_tara - ru - rw - sa - sah - sc - scn - sco - sd - se - sg - sh - si - simple - sk - sl - sm - sn - so - sr - srn - ss - st - stq - su - sv - sw - szl - ta - te - tet - tg - th - ti - tk - tl - tlh - tn - to - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu -