കംപൈലര്
വിക്കിപീഡിയ, ഒരു സ്വതന്ത്ര വിജ്ഞാനകോശം.
ഒരു പ്രോഗ്രാമിംഗ് ഭാഷയില് എഴുതിയിരിക്കുന്ന പ്രോഗ്രാമിനെ വേറെയൊരു ഭാഷയിലുളള അതേ കാര്യക്ഷമതയുളള പ്രോഗ്രാമായിട്ടു മാറ്റുന്നതിനുള്ള കംപ്യൂട്ടര് പ്രോഗ്രാം ആണ് കമ്പൈലര്. ഏതു ഭാഷയിലുള്ള പ്രോഗ്രാമിനെയാണോ മാറ്റേണ്ടത്, അതിനെ മൂലഭാഷയെന്നും (source language) മാറ്റം വരുത്തിയതിനു ശേഷം കിട്ടുന്ന ഭാഷയെ ലക്ഷ്യഭാഷ(target) എന്നും പറയ്യുന്നു. ഉന്നതതലഭാഷകളെയാണ് (high level language) കമ്പൈലറുകളില് മൂലഭാഷയായി സ്വീകരിക്കുന്നത്. സാധാരണയായി കണ്ടുവരുന്ന മൂലഭാഷകള് സി (C), സി++ (C++), ജാവ (Java), കോബോള് (Cobol), പാസ്കല് (Pascal) എന്നിവയാണ്. ലക്ഷ്യഭാഷകള് ഒരു കംപ്യൂട്ടറിന്റെ യാന്ത്രിക ഭാഷയോ, intermediate ഭാഷയോ ആകാം. പരിവര്ത്തനം ചെയ്യുന്നതിനായി മൂലഭാഷയില് എഴുതിയ പ്രോഗ്രാമിനെ സോഴ്സ് കോഡ് എന്നും കംപൈലറുകളില് നിന്നു പരിവര്ത്തനത്തിനു വിധേയമായി പുറത്തു വരുന്ന ലക്ഷ്യഭാഷയിലുളള പ്രോഗ്രാമിനെ ഒബ്ജക്റ്റ് കോഡ് (object-code) എന്നുമാണ് വിളിക്കുന്നത്.
ഉള്ളടക്കം |
[തിരുത്തുക] ചരിത്രം
ആദ്യത്തെ കംപൈലര് ഉണ്ടാക്കിയത് അമേരിക്കയിലെ ഐ.ബി.എം.(IBM) കോര്റേഷനിലെ ജോണ് ബാക്കസ് ആണെന്നു വിശ്വസിക്കുന്നു. ഈ കംപൈലര് ഫോര്ട്രാന് (fortran) ആധാരമാക്കി 1957-ല് നിര്മ്മിച്ചു. കംപൈലറുകള്, നിര്മ്മിക്കാന് ബുദ്ധിമുട്ടുളള വളരെ സങ്കീര്ണ്ണമായ പ്രോഗ്രാമുകളാണ്. ആദ്യത്തെ കംപൈലര് നിര്മ്മിക്കാന് തന്നെ 18 വര്ഷങ്ങള് വേണ്ടി വന്നു എന്നതില് നിന്നും ഈ സങ്കീര്ണത എത്രത്തോളമുണ്ടെന്ന് ഊഹിക്കാം.
[തിരുത്തുക] പ്രവര്ത്തനം
കംപൈലറുകള് രണ്ടു ഭാഗങ്ങളായി കണക്കാക്കാവുന്നതാകുന്നു - മുന്ഭാഗവും (front-end) പിന്ഭാഗവും (back-end). മുന്ഭാഗം മൂലഭാഷയെ കുറിച്ചുളള കാര്യങ്ങള് നോക്കുമ്പോള് പിന്ഭാഗം ലക്ഷ്യഭാഷയുടെ സവിഷേതകള് അനുസരിച്ചു പ്രവര്ത്തിക്കുന്നു. ഇവ തമ്മിലുളള ആശയവിനിമയം ഒരു ഇടനില (intermediate) ഭാഷയിലൂടെ നടത്തുന്നു. രണ്ടു ഭാഗങ്ങളായി തിരിക്കുന്നതുകൊണ്ടു താഴെപ്പറയുന്ന ഗുണങ്ങളുണ്ട്
- കംപൈലറുകളുടെ പോര്ട്ടബിലിറ്റി (portability) അഥവാ വിവിധ തരം കംപ്യൂട്ടറുകളില് ഓടാനുളള കഴിവ് വര്ദ്ധിക്കുന്നു.
- ഭാഷയില് ഉണ്ടാവുന്ന പുതിയ മാറ്റങ്ങള് ഉള്ക്കൊളളാനുളള കഴിവ് വര്ദ്ധിക്കുന്നു.
- കംപൈറില് ഉണ്ടാവാവുന്ന ബഗ്ഗുകള് കാര്യമായി കുറയുന്നു.
[തിരുത്തുക] മുന്ഭാഗം
കമ്പൈലറിന്റെ മുന്ഭാഗത്തെ നാല് ഉപഭാഗങ്ങളായി വേര്തിരിക്കാം
- ലെക്സിക്കല് അനലൈസര് (lexical analyser) - മൂലഭാഷയിലെ കണികകളെ തിരിച്ചറിയാനും അവയിലെ അക്ഷരപിശകുകള് കണ്ടെത്താനും ഈ ഭാഗം ഉപകാരപ്പെടുന്നു.ഈ ഭാഗത്തെ സ്കാനര്(scanner)എന്നും പറയും.
- സിന്റാറ്റിക്ക് അനലൈസര് (syntatic analyser) - മൂലഭാഷയുടെ വ്യാകരണമുപയോഗിച്ചു ലെക്സിക്കല് അനലൈസറില് നിന്നു ലഭിക്കുന്ന കണികകളെ വാക്യങ്ങളായി യോജിപ്പിക്കുകയും വ്യാകരണതെറ്റുകള് കണ്ടെത്തുകയും അവ തിരുത്താന് പ്രോഗ്രാമറെ സഹായിക്കുകയും ചെയ്യുന്നു. ഈ ഭാഗത്തെ പാര്സര്(parser) എന്നും വിളിക്കാറുണ്ട്.
- സെമാന്റിക്ക് അനലൈസര് (semnatic analyser) - ഈ ഭാഗം വാക്യങ്ങളെ കൂട്ടിവായിക്കുകയും അവയുടെ അര്ത്ഥം ഗ്രഹിക്കുകയും ചെയ്യുന്നു.
- ഇടനില ഭാഷാനിര്മ്മാണം(intermediate code generator) - മുന്ഭാഗത്തെ പ്രവര്ത്തനങ്ങളുടെ അവസാനത്തെ പടിയാണ് ഇത്. ഇവിടെ നേരത്തെ ഗ്രഹിച്ച പ്രോഗ്രാമിനെ ഒരു ലളിതമായ ഇടനില ഭാഷയില് എഴുതുന്നു. ഈ ഭാഷ രണ്ടു ഭാഗങ്ങള്ക്കും സൌകര്യപ്രദമായ ഒന്നായാല് മതി.
[തിരുത്തുക] പിന്ഭാഗം
പിന്ഭാഗത്തിന്റെ പ്രവര്ത്തനങ്ങള് രണ്ടായി തിരിക്കാം.
- ഒപ്റ്റിമൈസേഷന് (optimisation) - ആവശ്യമില്ലാത്തതും , രണ്ടു പ്രാവശ്യമുളളതുമായ ആജ്ഞകള് നീക്കം ചെയ്യുകയും, ക്രമം മാറ്റി തിരുത്തുകയും, കൂടുതല് കാര്യക്ഷമതയുളള ആജ്ഞാശേഖരങ്ങായി രൂപാന്തരപ്പെടുത്തുകയും മറ്റുമാണ് ഈ ഭാഗം ചെയ്യുന്നത്.
- കോഡ് നിര്മ്മാണം (code generation) -ലക്ഷ്യഭാഷയിലേക്കുളള വിവര്ത്തനം - കാര്യക്ഷമമാക്കിയ ഇടനില ഭാഷാവാക്യങ്ങളെ കോഡ് ജെനറേറ്റര് യാന്ത്രിക ഭാഷയായി മാറ്റുന്നു. ഇവിടെയും യാന്ത്രിക ഭാഷയുടെ സവിശേഷതകള് പരിഗണിച്ചു ചെറിയ ഒപ്റ്റിമൈസേഷന് നടത്തുന്നു.
[തിരുത്തുക] നിര്മാണം
കംപൈലറുകളുടെ നിര്മ്മാണം ഇപ്പോള് താരതമ്യേനെ എളുപ്പമായി തീര്ന്നിരിക്കുന്നു. പാര്സറും സ്കാനറും സ്വയം ഉണ്ടാക്കുന്ന ഉപകരണ്ണങ്ങള് ഇപ്പോള് ലഭ്യമാണ്. ലെക്സ് (Lex),യാക്ക് (yacc) , ജെ ലെക്സ് (jlex) , കപ് (cup) എന്നിവയാണ് അവയില് ചിലത്. ഒരോ ഭാഗവും സ്വതന്ത്ര മോഡ്യൂളുകളായി(modules) നിര്മ്മിച്ചാല് അവ അങ്ങോട്ടും ഇങ്ങോട്ടും മാറ്റി വിവിധയിനം കംപൈലറുകള് ഉണ്ടാക്കാവുന്നതാണ്.