കംപൈലര്‍

വിക്കിപീഡിയ, ഒരു സ്വതന്ത്ര വിജ്ഞാനകോശം.

കംപൈലറുകള്‍ കംപ്യൂട്ട‍ര്‍ പ്രോഗ്രാമുകള്‍ ആകുന്നു , അവ ഒരു പ്രോഗ്രാമിംഗ് ഭാഷയില്‍ എഴുതിയിരിക്കുന്ന പ്രോഗ്രാമിനെ വേറെയൊരു ഭാഷയിലുളള അതേ കാര്യക്ഷമതയുളള പ്രോഗ്രാമായിട്ടു മാറ്റുന്നു. ഇതില്‍ ആദ്യത്തെ ഭാഷയെ സോഴ്സ് അഥവാ മൂല ഭാഷയെന്നും രണ്ടാമത്തെ ടാര്‍ഗെറ്റ്(target) ഭാഷയെന്നും പറയ്യുന്നു. ഏതു ഉയര്‍ന്ന നിലവാരമുളള(high-level) ഭാഷയെയും മൂല ഭാഷയായിട്ടു സ്വീകരിക്കാവുന്നതാണ്. സാധാരണയായി കണ്ടുവരുന്ന മൂല ഭാഷകള്‍ സി (C), സി++ (C++), ജാവ (Java), കോബോള്‍ (Cobol), പാസ്കല്‍ (Pascal) എന്നിവയാണ്. റ്റാര്‍ഗെറ്റ് ഭാഷകള്‍ ഒരു കംപ്യൂട്ട‍റിന്റെ യാന്ത്രിക ഭാഷയോ , intermediate ഭാഷയോ ആകാം. കംപൈലറുകളില്‍ നിന്നു പുറത്തു വരുന്ന ടാര്‍ഗെറ്റ് ഭാഷയിലുളള പ്രോഗ്രാമിനെ ഒബ്‌ജക്റ്റ് കോഡ്(object-code) എന്നാണു സാധാരണ വിളിക്കാറ്.‍

[തിരുത്തുക] ചരിത്രം

ആദ്യത്തെ കംപൈലര്‍‍ ഉണ്ടാക്കിയത് അമേരിക്കയിലെ ഐ.ബി.എം(IBM)കോര്‍റേഷനിലെ ജോണ്‍ ബാക്കസ് ആണെന്നു വിശ്വസിക്കുന്നു. ഈ കംപൈലര്‍ ഫോര്‍ട്രാന്‍(fortran) ആധാരമാക്കി 1957ല്‍ നിര്‍മ്മിച്ചു. കംപൈലറുകളള്‍ നിര്‍മ്മി‍ക്കാന്‍ വളരെ ബുദ്ധിമുട്ടുളള കാര്യമാണ്. ആദ്യത്തെ കംപൈലര്‍ നിര്‍മ്മിക്കാന്‍ 18 വ‍ര്‍ഷങ്ങള്‍ വേണ്ടി വന്നു.

[തിരുത്തുക] പ്രവ‍ര്‍ത്തനം

കംപൈലറുകള്‍ രണ്ടു ഭാഗങ്ങളായി കണക്കാക്കാവുന്നതാകുന്നു - മുന്‍ഭാഗവും(front-end) പിന്‍‍ഭാഗവും(back-end).മുന്‍ഭാഗം മൂല ഭാഷയെ കുറിച്ചുളള കാര്യങ്ങള്‍ നോക്കുമ്പോള്‍ പിന്‍ഭാഗം റ്റാര്‍ഗെറ്റ് ഭാഷയുടെ സവിഷേതകള്‍ അനുസരിച്ചു പ്രവര്‍ത്തിക്കുന്നു.ഇവ തമ്മിലുളള ആശയവിനിമയം ഒരു ഇടനില (intermediate) ഭാഷയിലൂടെ നടത്തുന്നു. രണ്ടു ഭാഗങ്ങളായി തിരിക്കുന്നതുകൊണ്ടു കംപൈലറുകളുടെ പോര്‍ട്ടബിലിറ്റി(portability) അഥവാ വിവിധ തരം കംപ്യൂട്ടറുകളില്‍ ഓടാനുളള കഴിവ്, ഭാഷയില്‍ ഉണ്ടാവുന്ന മാറ്റങ്ങള്‍ ഉള്‍ക്കൊളളാനുളള കഴിവ് കംപൈറില്‍ ഉണ്ടാവാവുന്ന ബഗ്ഗുകളുടെയെണ്ണത്തില്(bug) കുറവ് എന്നീ മെച്ചങ്ങള്‍ ഉണ്ടാവുന്നു.

മുന്‍ഭാഗം മുന്‍ഭാഗത്തെ നാല് ഉപ ഭാഗങ്ങളായി വേ‍ര്‍തിരിക്കാം ലെക്സിക്കല്‍ അനലൈസ‍ര്‍ (lexical analyser) - മൂല ഭാഷയിലെ കണികകളെ തിരിച്ചറിയാനും അവയിലെ അക്ഷരപിശകുകള്‍ കണ്ടെത്താനും ഈ ഭാഗം ഉപകാരപ്പെടുന്നു.ഈ ഭാഗത്തെ സ്കാനര്‍(scanner)എന്നും പറയും. സിന്റാറ്റിക്ക് അനലൈസ‍ര്‍ (syntatic analyser) - മൂല ഭാഷയുടെ വ്യാകരണമുപയോഗിച്ചു ലെക്സിക്കല്‍ അനലൈസ‍റില്‍ നിന്നു ലഭിക്കുന്ന കണികകളെ വാക്യങ്ങളായി യോജിപ്പിക്കുകയും വ്യാകരണതെറ്റുകള്‍ കണ്ടെത്തുകയും അവ തിരുത്താന്‍ പ്രോഗ്രാമറെ സഹായിക്കുകയും ചെയ്യുന്നു. ഈ ഭാഗത്തെ പാര്‍സര്‍(parser) എന്നും വിളിക്കാറുണ്ട്. സെമാന്റിക്ക് അനലൈസ‍ര്‍ (semnatic analyser) - ഈ ഭാഗം വാക്യങ്ങളെ കൂട്ടിവായിക്കുകയും അവയുടെ അര്‍ത്ഥം ഗ്രഹിക്കുകയും ചെയ്യുന്നു. ഇടനില ഭാഷ ജെനറേഷന് (intermediate code generator) - മുന്‍ഭാഗത്തെ അവസാനത്തെ പടിയാണ് ഇത്. ഇവിടെ നേരത്തെ ഗ്രഹിച്ച പ്രോഗ്രാമിനെ ഒരു ലളിതമായ ഇടന്നില ഭാഷയില്‍ എഴുതുന്നു. ഈ ഭാഷ രണ്ടു ഭാഗങ്ങള്‍ക്കും സൌക‍ര്യപ്രദമായ ഒന്നായാല്‍ മതി.

പിന്‍ഭാഗം ഒപ്റ്റിമൈസേഷന് (optimisation) - ആവശ്യമില്ലാത്തതും ,രണ്ടു പ്രാവശ്യമുളളതുമായ ആജ്ഞകള്‍ നീക്കം ചെയ്യുകയും, ക്രമം മാറ്റി തിരുത്തുകയും, കൂടുതല്‍ കാര്യക്ഷമതയുളള ആജ്ഞാശേഖരങ്ങായി രൂപാന്തരപ്പെടുത്തുകയും മറ്റുമാണ് ഈ ഭാഗം ചെയ്യുന്നത്. കോഡ് ജെനറേഷന് (code generation എന്നുവച്ചാല്‍ target ഭാഷയിലേക്കുളള വിവര്‍ത്തനം) - കാര്യക്ഷമമാക്കിയ ഇടനില ഭാഷാവാക്യങ്ങളെ കോഡ് ജെനറേറ്റര്‍ യാന്ത്രിക ഭാഷയായി മാറ്റുന്നു. ഇവിടെയും യാന്ത്രിക ഭാഷയുടെ സവിശേഷതകള്‍ പരിഗണിച്ചു ചെറിയ ഒപ്റ്റിമൈസേഷന്‍ നടത്തുന്നു.

കംപൈലറുകളുടെ നിര്‍മ്മാണം ഇപ്പോള്‍ താരതമ്യേനെ എളുപ്പമായി തീര്‍ന്നിരിക്കുന്നു. പാര്‍സറും സ്കാനറും സ്വയം ഉണ്ടാക്കുന്ന ഉപകര‍ണ്ണങ്ങള്‍ ഇപ്പോള്‍ ലഭ്യമാണ്. ലെക്സ് (Lex),യാക്ക് (yacc) , ജെ ലെക്സ് (jlex) , കപ് (cup) എന്നിവയാണ‍് അവയില്‍ ചിലത്. ഒരോ ഭാഗവും സ്വതന്ത്ര മോഡ്യൂളുകളായി(modules) നിര്‍മ്മിച്ചാല്‍ അവ അങ്ങോട്ടും ഇങ്ങോട്ടും മാറ്റി വിവിധയിനം കംപൈലറുകള്‍ ഉണ്ടാക്കാവുന്നതാണ്.