"കംപൈലർ" എന്ന താളിന്റെ പതിപ്പുകൾ തമ്മിലുള്ള വ്യത്യാസം
(ചെ.) →അവലംബം |
(ചെ.)No edit summary |
||
വരി 8: | വരി 8: | ||
==ചരിത്രം== |
==ചരിത്രം== |
||
1950കളുടെ ആദ്യകാലങ്ങളിൽ തന്നെ കംപൈലര് പ്രോഗ്രാമുകള് എഴുതിത്തുടങ്ങുകയും അവ പരീക്ഷിക്കുകയും പ്രയോഗത്തില് വരുത്തുകയും ചെയ്തിരുന്നു.പല കൂട്ടങ്ങളായി സ്വതന്ത്രമായി പലയിടങ്ങളിലായാണ് ഈ പ്രൊഗ്രാമുകള് എഴുതിയിരുന്നത് എന്നതിനാല് ആദ്യകംപൈലര് പ്രോഗ്രാം ഏതെന്നും എന്നാണ് ആദ്യമായി പ്രയോഗത്തിൽ വരുത്തിയത് എന്നും വ്യക്തമല്ല. |
|||
⚫ | ആദ്യത്തെ |
||
⚫ | ആദ്യത്തെ ഫോർട്രാൻ കംപൈലര്1957-ൽ [[അമേരിക്കന് ഐക്യനാടുകള്|അമേരിക്കയിലെ]] [[ഐ.ബി.എം കോര്റേഷന്|ഐ.ബി.എം.(IBM) കോര്റേഷനിലെ]] [[ജോണ് ബാക്കസ്]] പ്രയോഗത്തിൽ വരുത്തി. കംപൈലറുകള്, നിര്മ്മിക്കാന് ബുദ്ധിമുട്ടുളള വളരെ സങ്കീര്ണ്ണമായ പ്രോഗ്രാമുകളാണ്. ഫോർട്രാൻ കംപൈലര് നിര്മ്മിക്കാന് തന്നെ 18 വര്ഷങ്ങള് വേണ്ടി വന്നു എന്നതില് നിന്നും ഈ സങ്കീര്ണത എത്രത്തോളമുണ്ടെന്ന് ഊഹിക്കാം. |
||
കംപൈലറുകളുടെ ആദ്യകാല പ്രവര്ത്തനങ്ങളില് ബീജഗണിത സൂത്രവാക്യങ്ങളെ യാന്ത്രികഭാഷയിലേക്ക് പരിവര്ത്തനം ചെയ്യുക എന്നതായിരുന്നു പ്രധാനം. |
കംപൈലറുകളുടെ ആദ്യകാല പ്രവര്ത്തനങ്ങളില് ബീജഗണിത സൂത്രവാക്യങ്ങളെ യാന്ത്രികഭാഷയിലേക്ക് പരിവര്ത്തനം ചെയ്യുക എന്നതായിരുന്നു പ്രധാനം. |
15:11, 6 ഒക്ടോബർ 2008-നു നിലവിലുണ്ടായിരുന്ന രൂപം
ഈ ലേഖനം ഏതെങ്കിലും സ്രോതസ്സുകളിൽ നിന്നുള്ള വേണ്ടത്ര തെളിവുകൾ ഉൾക്കൊള്ളുന്നില്ല. ദയവായി യോഗ്യങ്ങളായ സ്രോതസ്സുകളിൽ നിന്നുമുള്ള അവലംബങ്ങൾ ചേർത്ത് ലേഖനം മെച്ചപ്പെടുത്തുക. അവലംബമില്ലാത്ത വസ്തുതകൾ ചോദ്യം ചെയ്യപ്പെടുകയും നീക്കപ്പെടുകയും ചെയ്തേക്കാം. |
ഒരു പ്രോഗ്രാമിംഗ് ഭാഷയില് എഴുതിയിരിക്കുന്ന പ്രോഗ്രാമിനെ വേറെയൊരു ഭാഷയിലുളള അതേ കാര്യക്ഷമതയുളള പ്രോഗ്രാമായിട്ടു മാറ്റുന്നതിനുള്ള കംപ്യൂട്ടര് പ്രോഗ്രാം ആണ് കമ്പൈലര്. ഏതു ഭാഷയിലുള്ള പ്രോഗ്രാമിനെയാണോ മാറ്റേണ്ടത്, അതിനെ മൂലഭാഷയെന്നും (source language) മാറ്റം വരുത്തിയതിനു ശേഷം കിട്ടുന്ന ഭാഷയെ ലക്ഷ്യഭാഷ(target) എന്നും പറയ്യുന്നു. ഉന്നതതലഭാഷകളെയാണ് (high level language) കമ്പൈലറുകളില് മൂലഭാഷയായി സ്വീകരിക്കുന്നത്. സാധാരണയായി കണ്ടുവരുന്ന മൂലഭാഷകള് സി (C), സി++ (C++), ജാവ (Java), കോബോള് (Cobol), പാസ്കല് (Pascal) എന്നിവയാണ്. ലക്ഷ്യഭാഷകള് ഒരു കംപ്യൂട്ടറിന്റെ യാന്ത്രിക ഭാഷയോ, intermediate ഭാഷയോ ആകാം. പരിവര്ത്തനം ചെയ്യുന്നതിനായി മൂലഭാഷയില് എഴുതിയ പ്രോഗ്രാമിനെ സോഴ്സ് കോഡ് എന്നും കംപൈലറുകളില് നിന്നു പരിവര്ത്തനത്തിനു വിധേയമായി പുറത്തു വരുന്ന ലക്ഷ്യഭാഷയിലുളള പ്രോഗ്രാമിനെ ഒബ്ജക്റ്റ് കോഡ് (object-code) എന്നുമാണ് വിളിക്കുന്നത്.
കംപൈലറുകളെ അവയുടെ നിര്മ്മാണരീതിയേയും ധര്മ്മത്തേയും അടിസ്ഥാനമാക്കി സിംഗിള്-പാസ്,മള്ടി-പാസ്,ലോഡ് -ആന്റ്-ഗോ,ഡിബഗ്ഗിങ്,ഒപ്റ്റിമൈസിങ് എന്നിങ്ങനെ വിഭജിക്കാം.
ചരിത്രം
1950കളുടെ ആദ്യകാലങ്ങളിൽ തന്നെ കംപൈലര് പ്രോഗ്രാമുകള് എഴുതിത്തുടങ്ങുകയും അവ പരീക്ഷിക്കുകയും പ്രയോഗത്തില് വരുത്തുകയും ചെയ്തിരുന്നു.പല കൂട്ടങ്ങളായി സ്വതന്ത്രമായി പലയിടങ്ങളിലായാണ് ഈ പ്രൊഗ്രാമുകള് എഴുതിയിരുന്നത് എന്നതിനാല് ആദ്യകംപൈലര് പ്രോഗ്രാം ഏതെന്നും എന്നാണ് ആദ്യമായി പ്രയോഗത്തിൽ വരുത്തിയത് എന്നും വ്യക്തമല്ല.
ആദ്യത്തെ ഫോർട്രാൻ കംപൈലര്1957-ൽ അമേരിക്കയിലെ ഐ.ബി.എം.(IBM) കോര്റേഷനിലെ ജോണ് ബാക്കസ് പ്രയോഗത്തിൽ വരുത്തി. കംപൈലറുകള്, നിര്മ്മിക്കാന് ബുദ്ധിമുട്ടുളള വളരെ സങ്കീര്ണ്ണമായ പ്രോഗ്രാമുകളാണ്. ഫോർട്രാൻ കംപൈലര് നിര്മ്മിക്കാന് തന്നെ 18 വര്ഷങ്ങള് വേണ്ടി വന്നു എന്നതില് നിന്നും ഈ സങ്കീര്ണത എത്രത്തോളമുണ്ടെന്ന് ഊഹിക്കാം.
കംപൈലറുകളുടെ ആദ്യകാല പ്രവര്ത്തനങ്ങളില് ബീജഗണിത സൂത്രവാക്യങ്ങളെ യാന്ത്രികഭാഷയിലേക്ക് പരിവര്ത്തനം ചെയ്യുക എന്നതായിരുന്നു പ്രധാനം.
കംപൈലറുകളുടെ പശ്ചാത്തലം
കംപൈലറുകള്ക്ക് പുറമെ നിരവധി പ്രോഗ്രാമുകള് കൃത്യനിര്വ്വഹണ യോഗ്യങ്ങളായ(executable) ലക്ഷ്യപ്രോഗ്രാമുകള് ഉണ്ടാക്കുന്നുണ്ട്.മൂലപ്രോഗ്രാം മോഡ്യൂളുകളായി വിഭജിക്കപ്പെട്ട് വിവിധങ്ങളായ ഫയലുകളില് സൂക്ഷിച്ച് വെക്കുന്നു.വിഭജിക്കപ്പെട്ട ഇത്തരം പ്രൊഗ്രാമുകള് ശേഖരിക്കുന്നത് പ്രിപ്രൊസസര് എന്ന വ്യത്യസ്തമായ മറ്റൊരു പ്രോഗ്രാമാണ്.മാക്രോസ് എന്ന ചുരുക്കെഴുത്തുരൂപങ്ങളെ മൂലപ്രോഗ്രാം പ്രസ്താവനകളിലേക്ക് വികസിപ്പിക്കാനും പ്രിപ്രൊസസര് ഉപയോഗിക്കാം.
മാതൃക
കംപൈലേഷന് പൊതുവില് ഉപയോഗിക്കുന്ന മാതൃകയാണ് അനാലിസിസ്-സിന്തെസിസ് മാതൃക.അനാലിസിസ് ഭാഗം മൂലഭാഷയെ ഘടകഭാഗങ്ങളായിവിഭജിച്ച് മദ്ധ്യവര്ത്തിഭാഷ നിര്മ്മിക്കുന്നു.ഈ സമയം മൂലപ്രോഗ്രാമിന്റെ കാരകങ്ങള് നിര്ണയിക്കുകയും രേഖപ്പെടുത്തുകയും ചെയ്യുന്നു.ഇത് ട്രീ എന്നറിയപ്പെടുന്ന അധികാരശ്രേണിയിലാണ് (Hierarchy) നിര്വഹിക്കുന്നത്.ഈ പശ്ചാത്തലത്തില് വിശേഷിച്ചുപയോഗിക്കുന്നത് സിന്റാക്സ് ട്രീ ആണ്.ഇതിലെ ഓരോ നോഡും കാരകത്തേയും ചിള്ഡ്രന് കാരകത്തിന്റെ ആര്ഗ്യുമെന്റിനേയും പ്രതിനിധീകരിക്കുന്നു.
അനാലിസിസ് ഭാഗത്ത് മൂലപ്രോഗ്രാമിനെ കൈകാര്യം ചെയ്യുന്നതിനായി അനവധി സോഫ്റ്റ്വെയര് ഉപകരണങ്ങള് ഉപയോഗിച്ചുവരുന്നു.അവയില് പ്രധാനപ്പെട്ടവ സ്ട്രക്ചര് എഡിറ്ററുകള്,പ്രെറ്റി പ്രിന്ററുകള്,സ്റ്റാറ്റിക് ചെക്കറുകള്,ഇന്റെര്പ്രെറ്ററുകള് എന്നിവയാണ്.
സിന്തസിസ് ഭാഗം ലക്ഷ്യഭാഷയെ ഈ മദ്ധ്യവര്ത്തിഭാഷയില് നിന്നും നിര്മ്മിച്ചെടുക്കുന്നു.
കംപൈലര് രൂപകല്പന
കംപൈലര് രൂപകല്പന ചെയ്യുന്നത് ചെയ്തുതീര്ക്കേണ്ട പ്രവര്ത്തിയുടെ സങ്കീര്ണ്ണതയേയും രൂപകല്പന ചെയ്യുന്നയാളുടെ പ്രവൃത്തിപരിചയവും ഉപകരണങ്ങള് തുടങ്ങിയ റിസോഴ്സുകളേയും അടിസ്ഥാനമാക്കി ആണ് .
ഏകപാസ്,ബഹുപാസ് കംപൈലറുകള്
കംപൈലിങില് അനവധി പ്രവൃത്തികള് ചെയ്യുന്നുണ്ട്.ആദ്യകാല കംപൈലറുകള് എല്ലാ പ്രവൃത്തികളും ചെയ്യുന്ന പ്രോഗ്രാമുകളായിരുന്നു.എന്നാല് ഇത്തരമൊരു പ്രോഗ്രാമിനെ സൂക്ഷിച്ചുവെക്കാന് പാകത്തിലുള്ള മെമ്മറി ഉണ്ടായിരുന്നില്ല.ആയതിനാല് ചെറിയ ചെറിയ പ്രോഗ്രാമുകളാക്കി വിഭജിച്ച് ഓരോ പ്രോഗ്രാമും മൂലപ്രോഗ്രാമിനെ ചില വിശകലനങ്ങള്ക്കും പരിഭാഷപ്പെടുത്തലിനും വിധേയമാക്കുന്നു. ഒരു പാസില് തന്നെ കംപൈലിങ് നടത്തുന്നതുകൊണ്ട് പ്രവൃത്തിയെ അത് ലളിതമാക്കുന്നു എന്നൊരു ഗുണമുണ്ട്.കൂടാതെ ഇവ ബഹുപാസ് കംപൈലറുകളേക്കാള് വേഗത കൂടിയവയായിരിക്കും. പാസ്കല് എന്ന പ്രോഗ്രാമിങ് ഭാഷ ഒരു പാസില് കംപൈലേഷന് നടത്താന് സാധിക്കുന്ന രീതിയിലാണ് രൂപകല്പന ചെയ്തിരിക്കുന്നത്.എന്നാല് ഇതിന്റെ പ്രധാന അഹിതം ഉന്നതനിലവാരമുള്ള കോഡുകള് ഉല്പാദിപ്പിക്കാനാവശ്യമായ സങ്കീര്ണ്ണങ്ങളായ അനുകൂലനങ്ങള്(optimisation) ചെയ്യുന്നില്ല എന്നതാണ്.
എന്നാല് ബഹുപാസ് കംപൈലറുകള് അതിന്റെ അവസാന പാസില് നിന്നാണ് യാന്ത്രികഭാഷാകോഡുകള് ഉല്പാദിപ്പിക്കുന്നത്.
പ്രവര്ത്തനം
കംപൈലറുകള് രണ്ടു ഭാഗങ്ങളായി കണക്കാക്കാവുന്നതാകുന്നു - മുന്ഭാഗവും (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) നിര്മ്മിച്ചാല് അവ അങ്ങോട്ടും ഇങ്ങോട്ടും മാറ്റി വിവിധയിനം കംപൈലറുകള് ഉണ്ടാക്കാവുന്നതാണ്.
അവലംബം
- Principles of Compiler Design ലേഖകര് Aho.A.V and Ullman J.D---Narosa1977
- Compilers: Principles, Techniques and Tools by Alfred V. Aho, Ravi Sethi, and Jeffrey D. Ullman (ISBN 0-201-10088-6) link to publisher. Also known as 'The Dragon Book'.