Flex ja Bison

Eelnevas nägime, et skanneri koodi koostamine on täiesti määratud lekseeme ja kogu skanneri sisendteksti (skaneeritava programmi) leksika struktuuri kirjeldavate regulaarsete avaldistega, s.t. skanneri võib nende kirjelduste põhjal automaatselt genereerida. Ka translaatori teine osa, süntaksianalüsaator, on transleeritava keele süntaksi kirjelduse (süntaksi grammatika) põhjal automaatselt genereeritav. Juba 1960-ndal aastal valmis translaator, milles transleerimise kaks esimest etappi, leksika- ja süntaksianalüüs, ei sõltunud transleeritavast keelest, transleeritava keele leksika ja süntaksi kirjeldused esitati parametritena. Siit saadi idee: võib luua programmi, mis suudab moodustada translaatori paljude erinevate keelte jaoks; transleeritava keele leksika ja süntaksi kirjeldused esitatakse grammatika abil ja programm genereerib nende põhjal translaatori. Selliseid programme hakati nimetama translaatorite translaatoriteks (compiler compiler) ehk translaatorite genereerimise süsteemideks, neist tuntuimad on lex ja yacc (yet another compiler compiler), mis loodi Stephen C. Johnsoni poolt 1975.a firmas AT&T.

Vaba tarkvara liikumise algataja oli MIT professor D.Knuth, kui ta kuulutas vabaks enda loodud küljendamissüsteemi Tex Kui lex ja yacc liideti AT&T poolt müüdava operatsioonisüsteemiga Unix ja muutusid seega kommertsprogrammideks, otsustas Vaba Tarkvara Assotsiatsioon (Free Software Foundation) Richard Stallmann-i juhtimisel, et on tarvis analoogilisi, aga litsensivabasid programme; nende lex-i ja yacc-i analoogide nimeks sai Flex (Fast Lexical Analyzer) ja Bison (sõnademäng härgade nimedega: yacc (jakk) Bison !) ja need said GNU-projekti osadeks. GNU (taas sõnademäng, "Gnu is Not Unix!") on Vaba Tarkvara Assotsiatsiooni poolt 1984 a loodud projekt vabade Unix-tüüpi opertasioonisüsteemide saamiseks; praegu tuntuim neist on translaator GNU/gcc.

Flex ja Bison teisendavad neile antud sisendi (vastavalt translaatori leksika ja süntaksi kirjeldused) C-keelseteks programmideks, mis seejärel peab GNU C-keele translaatoriga gcc transleerima (on tehtud versioone ka teiste C-translaatorite ja programmeerimiskeelte jaoks, näiteks Microsoft Visual C++ jaoks).

Kuna gcc on Unix-programm, toimib see suurepäraselt Linux-is, kuid ei toimi DOS-i või Windows-i all. Et gcc-d saaks DOS/Windows-keskkonnas kasutada, on tarvis abiprogramme, mis "tõlgivad" gcc väljastatavad Unix-operatsioonisüsteemi käsud DOS/Windows käskudeks. Esimene selline programm oli D.J. Delorie poolt loodud DJGPP (vabavara), mis teisendas gcc käsud DOS-operatsioonisüsteemi käskudeks. See oli pikka aega vahend, mis võimaldas DOS ja Windows-keskkonnas kasutada Unix-i jaoks loodud programme, ennekõike just GNU C-keele translaatorit gcc. Kuid kuna see põhines DOS-il ja Windows XP-s on DOS peaaegu kadunud, on praeguseks see programm vananenud. Praegu on Unix-programmide kasutamiseks Windows-is kõige tuntumad vabavarapaketid CygWin ja MinGW. Kõik järgnevas esitatud näited on testitud GNU Flex 2.5.4.1, Bison 1.875, gcc ja MinGW32 versiooni 5.05 abil; kõik need on Internetist vabalt mahalaaditavad.

Flex-projekti kodulehekülg on http://flex.sourceforge.net/ (siit saab lähtetekstid, mis tuleb gcc-ga transleerida); Windows-i all kasutamiseks saab installeerimisprogrammi lehelt http://gnuwin32.sourceforge.net/packages/flex.htm.

Bison-i kodulehekülg on http://www.gnu.org/software/bison/bison.html (lähtetekstid), Windows-i all kasutamiseks installeerimisprogrammi saab http://gnuwin32.sourceforge.net/packages/bison.htm.
Flex-i, Bison-i ga gcc translaatori saab ka CygWin-ist http://sourceware.org/cygwin/; erinevatel ftp-serveritel võib pakettide sisu olla erinev, kuid kui serveriks valida ftp.funet.fi, tuleb paketist Develop valida Flex, Bison, gcc ja make. Samad paketid saab ka MinGW-st - http://sourceforge.net/projects/mingw/files/ .

Flex ja Bison genereerivad c-keelse programmi, mis tuleb transleerida mingi c-translaatoriga. Kuna kõik Flex/Bison arendajad kasutavad Gnu GCC-translaatorit (Gnu Compiler Collection - siia kuuluvad ka näiteks Ada, Java ja teiste keelte translaatorid), on selle kasutamine kõige eelistatvam (ei tule translaatorite erinevusest tingitud vigu). GCC installatsiooniprogrammi Windows-i jaoks saab lehelt http://www.mingw.org/ (seal on vaid võrguinstallaator, s.t. installeerimiseks tuleb see käivitada ja kogu pakett maha laadida - või hoida arvuti installeerimise ajal arvutivõrgus). Kuna GCC ise on Unix-i all töötamiseks, tuleb see "sobitada" Windows-iga; MinGW ongi selline Unix<->Windows risttranslaator. Teine võimalus on Windows-i all töötava GCC translaatori saamiseks http://sourceforge.net/projects/gcw/ - see peaks peaks andma Microsoft Visual C++-ga ühilduva koodi - kuid projekti versioon on 0.0.1 ja kuupäev (aug 2008) - September 18, 2001;-(((

Kataloogid, kuhu pärast installeerimist on paigutatud Flex.exe, Bison.exe ja gcc.exe peab lisama PATH-süsteemimuutujale. Et mitte mässata paljude erinevate mahalaadimiste ja kataloogidega, võib lehelt http://nuwen.net/mingw.html maha laadida jaotuspaketi (distro - distribution, .zip-fail), mis lahtipakkimisel paneb samasse kataloogi kõik kolm vajalikku faili Flex.exe, Bison.exe, gcc.exe, kuid selles on MinGW veidi vanem versioon - augustis 2008 sisaldas mingw-3.9.zip gcc versiooni GCC 4.2.1, kuid see näib töötavat.

Flex.exe, Bison.exe, gcc.exe on kõik DOS-programmid. Et Windwos-i all töötades ei peaks kogu aeg DOS-aknaid avama, on Flex-Bison tekstide editeerimisel mugav kasutada mingit editori, mis võimaldab menüüst sooritada DOS-programmide käivitamist. Selline (vaba) editor on (näiteks) Komodo Edit, mille saab maha laadida aadressilt http://www.activestate.com/Products/komodo_ide/komodo_edit.mhtml



Küsimused, probleemid: ©2007 Jaak Henno