"കംപൈലർ" എന്ന താളിന്റെ പതിപ്പുകൾ തമ്മിലുള്ള വ്യത്യാസം

25 ബൈറ്റുകൾ കൂട്ടിച്ചേർത്തിരിക്കുന്നു ,  9 വർഷം മുമ്പ്
തിരുത്തലിനു സംഗ്രഹമില്ല
(ചെ.) (r2.7.2) (യന്ത്രം ചേർക്കുന്നു: ky:Компилер)
[[ചിത്രം:Compiler.svg|right|thumb|350px|ബഹുഭാഷ-ബഹുലക്ഷ്യ മാതൃകാകം‌പൈലറിന്റെ ചിത്രം]]
 
ഒരു പ്രോഗ്രാമിംഗ് ഭാഷയിൽ എഴുതിയിരിക്കുന്ന [[കമ്പ്യൂട്ടർ ‍പ്രോഗ്രാം|പ്രോഗ്രാമിനെ]] വേറെയൊരു ഭാഷയിലുളള അതേ കാര്യക്ഷമതയുളള പ്രോഗ്രാമായിട്ടു മാറ്റുന്നതിനുള്ള കംപ്യൂട്ട‍ർ പ്രോഗ്രാം ആണ് '''കംപൈലർ'''. ഏതു ഭാഷയിലുള്ള പ്രോഗ്രാമിനെയാണോ മാറ്റേണ്ടത്, അതിനെ മൂലഭാഷയെന്നും (source language) മാറ്റം വരുത്തിയതിനു ശേഷം കിട്ടുന്ന ഭാഷയെ ലക്ഷ്യഭാഷ(target) എന്നും പറയ്യുന്നുപറയുന്നു. [[ഉന്നതതലഭാഷ|ഉന്നതതലഭാഷകളെയാണ്]] (high level language) കമ്പൈലറുകളിൽ മൂലഭാഷയായി സ്വീകരിക്കുന്നത്. സാധാരണയായി കണ്ടുവരുന്ന മൂലഭാഷകൾ [[സി]] (C), [[സി++]] (C++), [[ജാവ]] (Java), കോബോൾ (Cobol), പാസ്കൽ (Pascal) എന്നിവയാണ്. ലക്ഷ്യഭാഷകൾ ഒരു കംപ്യൂട്ട‍റിന്റെ [[യന്ത്ര തല ഭാഷ|യാന്ത്രിക ഭാഷയോ]], intermediate ഭാഷയോ ആകാം. പരിവർത്തനം ചെയ്യുന്നതിനായി മൂലഭാഷയിൽ എഴുതിയ പ്രോഗ്രാമിനെ സോഴ്സ് കോഡ് എന്നും കംപൈലറുകളിൽ നിന്നു പരിവർത്തനത്തിനു വിധേയമായി പുറത്തു വരുന്ന ലക്ഷ്യഭാഷയിലുളള പ്രോഗ്രാമിനെ ഒബ്‌ജക്റ്റ് കോഡ് (object-code) എന്നുമാണ് വിളിക്കുന്നത്. ‍
 
കം‌പൈലറുകളെ അവയുടെ നിർമ്മാണരീതിയേയും ധർമ്മത്തേയും അടിസ്ഥാനമാക്കി സിംഗിൾ-പാസ്,മൾടി-പാസ്,ലോഡ് -ആന്റ്-ഗോ,ഡിബഗ്ഗിങ്,ഒപ്റ്റിമൈസിങ് എന്നിങ്ങനെ വിഭജിക്കാം.
കം‌പൈലർ രൂപകല്പന ചെയ്യുന്നത് ചെയ്തുതീർക്കേണ്ട പ്രവൃത്തിയുടെ സങ്കീർണ്ണതയേയും രൂപകല്പന ചെയ്യുന്നയാളുടെ പ്രവൃത്തിപരിചയവും ഉപകരണങ്ങൾ തുടങ്ങിയ റിസോഴ്സുകളേയും അടിസ്ഥാനമാക്കി ആണ് .
=== ഏകപാസ്,ബഹുപാസ് കം‌പൈലറുകൾ ===
കം‌പൈലിങിൽ അനവധി പ്രവൃത്തികൾ ചെയ്യുന്നുണ്ട്.ആദ്യകാല കം‌പൈലറുകൾ എല്ലാ പ്രവൃത്തികളും ചെയ്യുന്ന പ്രോഗ്രാമുകളായിരുന്നു.എന്നാൽ ഇത്തരമൊരു പ്രോഗ്രാമിനെ സൂക്ഷിച്ചുവെക്കാൻ പാകത്തിലുള്ള [[മെമ്മറി]] ഉണ്ടായിരുന്നില്ല.ആയതിനാൽ ചെറിയ ചെറിയ പ്രോഗ്രാമുകളാക്കി വിഭജിച്ച് ഓരോ പ്രോഗ്രാമും മൂലപ്രോഗ്രാമിനെ ചില വിശകലനങ്ങൾക്കും പരിഭാഷപ്പെടുത്തലിനും വിധേയമാക്കുന്നു. ഒരു പാസിൽ തന്നെ കം‌പൈലിങ് നടത്തുന്നതുകൊണ്ട് പ്രവൃത്തിയെ അത് ലളിതമാക്കുന്നു എന്നൊരു ഗുണമുണ്ട്.കൂടാതെ ഇവ ബഹുപാസ് കം‌പൈലറുകളേക്കാൾ വേഗത കൂടിയവയായിരിക്കും. പാസ്കൽ എന്ന പ്രോഗ്രാമിങ് ഭാഷ ഒരു പാസിൽ കം‌പൈലേഷൻ നടത്താൻ സാധിക്കുന്ന രീതിയിലാണ് രൂപകല്പന ചെയ്തിരിക്കുന്നത്.എന്നാൽ ഇതിന്റെ പ്രധാന അഹിതം ഉന്നതനിലവാരമുള്ള കോഡുകൾ ഉല്പാദിപ്പിക്കാനാവശ്യമായ സങ്കീർണ്ണങ്ങളായ അനുകൂലനങ്ങൾമെച്ചപ്പെടുത്തലുകൾ (optimisation) ചെയ്യുന്നില്ല എന്നതാണ്.
 
എന്നാൽ ബഹുപാസ് കംപൈലറുകൾ അതിന്റെ അവസാന പാസിൽ നിന്നാണ് യാന്ത്രികഭാഷാകോഡുകൾ ഉല്പാദിപ്പിക്കുന്നത്.
 
== പ്രവ‍ർത്തനം ==
കംപൈലറുകൾ രണ്ടു ഭാഗങ്ങളായി കണക്കാക്കാവുന്നതാകുന്നു - മുൻഭാഗവും (front-end) പിൻ‍ഭാഗവും (back-end). മുൻഭാഗം മൂലഭാഷയെ കുറിച്ചുളള കാര്യങ്ങൾ നോക്കുമ്പോൾ പിൻഭാഗം ലക്ഷ്യഭാഷയുടെ സവിഷേതകൾസവിശേഷതകൾ അനുസരിച്ചു പ്രവർത്തിക്കുന്നു. ഇവ തമ്മിലുളള ആശയവിനിമയം ഒരു ഇടനില (intermediate) ഭാഷയിലൂടെ നടത്തുന്നു. രണ്ടു ഭാഗങ്ങളായി തിരിക്കുന്നതുകൊണ്ടു താഴെപ്പറയുന്ന ഗുണങ്ങളുണ്ട്
*കംപൈലറുകളുടെ പോർട്ടബിലിറ്റി (portability) അഥവാ വിവിധ തരം കംപ്യൂട്ടറുകളിൽ ഓടാനുളള കഴിവ് വർദ്ധിക്കുന്നു.
*ഭാഷയിൽ ഉണ്ടാവുന്ന പുതിയ മാറ്റങ്ങൾ ഉൾക്കൊളളാനുളള കഴിവ് വർദ്ധിക്കുന്നു.
*കംപൈറിൽകംപൈലറിൽ ഉണ്ടാവാവുന്നഉണ്ടാകാവുന്ന [[കമ്പ്യുട്ടർ ബഗ്ഗ്|ബഗ്ഗുകൾ]] കാര്യമായി കുറയുന്നു.
=== മുൻഭാഗം ===
കമ്പൈലറിന്റെ മുൻഭാഗത്തെ നാല് ഉപഭാഗങ്ങളായി വേ‍ർതിരിക്കാം
#[[ലെക്സിക്കൽ അനലൈസ‍ർ]] (lexical analyser) - മൂലഭാഷയിലെ കണികകളെ തിരിച്ചറിയാനും അവയിലെ അക്ഷരപിശകുകൾഅക്ഷരപ്പിശകുകൾ കണ്ടെത്താനും ഈ ഭാഗം ഉപകാരപ്പെടുന്നു.ഈ ഭാഗത്തെ [[സ്കാനർ]](scanner)എന്നും പറയും.
#സിന്റാറ്റിക്ക് അനലൈസ‍ർ (syntatic analyser) - മൂലഭാഷയുടെ വ്യാകരണമുപയോഗിച്ചു ലെക്സിക്കൽ അനലൈസ‍റിൽ നിന്നു ലഭിക്കുന്ന കണികകളെ വാക്യങ്ങളായി യോജിപ്പിക്കുകയും വ്യാകരണതെറ്റുകൾ കണ്ടെത്തുകയും അവ തിരുത്താൻ പ്രോഗ്രാമറെ സഹായിക്കുകയും ചെയ്യുന്നു. ഈ ഭാഗത്തെ [[പാർസർ]](parser) എന്നും വിളിക്കാറുണ്ട്.
#[[സെമാന്റിക്ക് അനലൈസ‍ർ]] (semnatic analyser) - ഈ ഭാഗം വാക്യങ്ങളെ കൂട്ടിവായിക്കുകയും അവയുടെ അർത്ഥം ഗ്രഹിക്കുകയും ചെയ്യുന്നു.
=== പിൻഭാഗം ===
പിൻഭാഗത്തിന്റെ പ്രവർത്തനങ്ങൾ രണ്ടായി തിരിക്കാം.
#ഒപ്റ്റിമൈസേഷൻ (optimisation) - ആവശ്യമില്ലാത്തതും , രണ്ടു പ്രാവശ്യമുളളതുമായ ആജ്ഞകൾ നീക്കം ചെയ്യുകയും, ക്രമം മാറ്റി തിരുത്തുകയും, കൂടുതൽ കാര്യക്ഷമതയുളള ആജ്ഞാശേഖരങ്ങായിആജ്ഞാശേഖരങ്ങളായി രൂപാന്തരപ്പെടുത്തുകയും മറ്റുമാണ് ഈ ഭാഗം ചെയ്യുന്നത്.
#കോഡ് നിർമ്മാണം (code generation) -ലക്ഷ്യഭാഷയിലേക്കുളള വിവർത്തനം - കാര്യക്ഷമമാക്കിയ ഇടനില ഭാഷാവാക്യങ്ങളെ കോഡ് ജെനറേറ്റർ [[യന്ത്രതലഭാഷ|യാന്ത്രിക ഭാഷയായി]] മാറ്റുന്നു. ഇവിടെയും യാന്ത്രിക ഭാഷയുടെ സവിശേഷതകൾ പരിഗണിച്ചു ചെറിയ ഒപ്റ്റിമൈസേഷൻ നടത്തുന്നു.
 
== നിർമ്മാണം ==
കംപൈലറുകളുടെ നിർമ്മാണം ഇപ്പോൾ താരതമ്യേനെ എളുപ്പമായി തീർന്നിരിക്കുന്നു. [[പാർസറും]] [[സ്കാനറും]] സ്വയം ഉണ്ടാക്കുന്ന ഉപകര‍ണ്ണങ്ങൾഉപകര‍ണങ്ങൾ ഇപ്പോൾ ലഭ്യമാണ്. ലെക്സ് (Lex),യാക്ക് (yacc) , ജെ ലെക്സ് (jlex) , കപ് (cup) എന്നിവയാണ‍് അവയിൽ ചിലത്. ഒരോ ഭാഗവും സ്വതന്ത്ര മോഡ്യൂളുകളായി(modules) നിർമ്മിച്ചാൽ അവ അങ്ങോട്ടും ഇങ്ങോട്ടും മാറ്റി വിവിധയിനം കംപൈലറുകൾ ഉണ്ടാക്കാവുന്നതാണ്.
== അവലംബം ==
*Principles of Compiler Design ലേഖകർ Aho.A.V and Ullman J.D---Narosa1977
"https://ml.wikipedia.org/wiki/പ്രത്യേകം:മൊബൈൽവ്യത്യാസം/1300523" എന്ന താളിൽനിന്ന് ശേഖരിച്ചത്