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

വിക്കിപീഡിയ, ഒരു സ്വതന്ത്ര വിജ്ഞാനകോശം.
Content deleted Content added
(ചെ.) യന്ത്രം ചേര്‍ക്കുന്നു: be-x-old:Кампілятар
(ചെ.) യന്ത്രം ചേർക്കുന്നു: la:Compilatrum
വരി 2: വരി 2:
[[ചിത്രം:Compiler.svg|right|thumb|350px|ബഹുഭാഷ-ബഹുലക്ഷ്യ മാതൃകാകം‌പൈലറിന്റെ ചിത്രം]]
[[ചിത്രം:Compiler.svg|right|thumb|350px|ബഹുഭാഷ-ബഹുലക്ഷ്യ മാതൃകാകം‌പൈലറിന്റെ ചിത്രം]]


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


കം‌പൈലറുകളെ അവയുടെ നിര്‍മ്മാണരീതിയേയും ധര്‍മ്മത്തേയും അടിസ്ഥാനമാക്കി സിംഗിള്‍-പാസ്,മള്‍ടി-പാസ്,ലോഡ് -ആന്റ്-ഗോ,ഡിബഗ്ഗിങ്,ഒപ്റ്റിമൈസിങ് എന്നിങ്ങനെ വിഭജിക്കാം.
കം‌പൈലറുകളെ അവയുടെ നിർമ്മാണരീതിയേയും ധർമ്മത്തേയും അടിസ്ഥാനമാക്കി സിംഗിൾ-പാസ്,മൾടി-പാസ്,ലോഡ് -ആന്റ്-ഗോ,ഡിബഗ്ഗിങ്,ഒപ്റ്റിമൈസിങ് എന്നിങ്ങനെ വിഭജിക്കാം.


== ചരിത്രം ==
== ചരിത്രം ==
1950കളുടെ ആദ്യകാലങ്ങളിൽ തന്നെ കം‌പൈലര്‍ പ്രോഗ്രാമുകള്‍ എഴുതിത്തുടങ്ങുകയും അവ പരീക്ഷിക്കുകയും പ്രയോഗത്തില്‍ വരുത്തുകയും ചെയ്തിരുന്നു.പല കൂട്ടങ്ങളായി സ്വതന്ത്രമായി പലയിടങ്ങളിലായാണ് ഈ പ്രൊഗ്രാമുകള്‍ എഴുതിയിരുന്നത് എന്നതിനാല്‍ ആദ്യ കം‌പൈലര്‍ പ്രോഗ്രാം ഏതെന്നും എന്നാണ് ആദ്യമായി പ്രയോഗത്തിൽ വരുത്തിയത് എന്നും വ്യക്തമല്ല.
1950കളുടെ ആദ്യകാലങ്ങളിൽ തന്നെ കം‌പൈലർ പ്രോഗ്രാമുകൾ എഴുതിത്തുടങ്ങുകയും അവ പരീക്ഷിക്കുകയും പ്രയോഗത്തിൽ വരുത്തുകയും ചെയ്തിരുന്നു.പല കൂട്ടങ്ങളായി സ്വതന്ത്രമായി പലയിടങ്ങളിലായാണ് ഈ പ്രൊഗ്രാമുകൾ എഴുതിയിരുന്നത് എന്നതിനാൽ ആദ്യ കം‌പൈലർ പ്രോഗ്രാം ഏതെന്നും എന്നാണ് ആദ്യമായി പ്രയോഗത്തിൽ വരുത്തിയത് എന്നും വ്യക്തമല്ല.


ആദ്യത്തെ ഫോർട്രാൻ കംപൈലര്‍‍ 1957-ൽ [[അമേരിക്കന്‍ ഐക്യനാടുകള്‍|അമേരിക്കയിലെ]] [[ഐ.ബി.എം കോര്‍റേഷന്‍|ഐ.ബി.എം.(IBM) കോര്‍റേഷനിലെ]] [[ജോണ്‍ ബാക്കസ്]] പ്രയോഗത്തിൽ വരുത്തി. കംപൈലറുകള്‍, നിര്‍മ്മി‍ക്കാന്‍ ബുദ്ധിമുട്ടുളള വളരെ സങ്കീര്‍ണ്ണമായ പ്രോഗ്രാമുകളാണ്. ഫോർട്രാൻ കംപൈലര്‍ നിര്‍മ്മിക്കാന്‍ തന്നെ 18 വ‍ര്‍ഷങ്ങള്‍ വേണ്ടി വന്നു എന്നതില്‍ നിന്നും ഈ സങ്കീര്‍ണത എത്രത്തോളമുണ്ടെന്ന് ഊഹിക്കാം.<ref>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'.</ref>
ആദ്യത്തെ ഫോർട്രാൻ കംപൈലർ‍ 1957-ൽ [[അമേരിക്കൻ ഐക്യനാടുകൾ|അമേരിക്കയിലെ]] [[ഐ.ബി.എം കോർറേഷൻ|ഐ.ബി.എം.(IBM) കോർറേഷനിലെ]] [[ജോൺ ബാക്കസ്]] പ്രയോഗത്തിൽ വരുത്തി. കംപൈലറുകൾ, നിർമ്മി‍ക്കാൻ ബുദ്ധിമുട്ടുളള വളരെ സങ്കീർണ്ണമായ പ്രോഗ്രാമുകളാണ്. ഫോർട്രാൻ കംപൈലർ നിർമ്മിക്കാൻ തന്നെ 18 വ‍ർഷങ്ങൾ വേണ്ടി വന്നു എന്നതിൽ നിന്നും ഈ സങ്കീർണത എത്രത്തോളമുണ്ടെന്ന് ഊഹിക്കാം.<ref>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'.</ref>


കം‌പൈലറുകളുടെ ആദ്യകാല പ്രവര്‍ത്തനങ്ങളില്‍ ബീജഗണിത സൂത്രവാക്യങ്ങളെ യാന്ത്രികഭാഷയിലേക്ക് പരിവര്‍ത്തനം ചെയ്യുക എന്നതായിരുന്നു പ്രധാനം.
കം‌പൈലറുകളുടെ ആദ്യകാല പ്രവർത്തനങ്ങളിൽ ബീജഗണിത സൂത്രവാക്യങ്ങളെ യാന്ത്രികഭാഷയിലേക്ക് പരിവർത്തനം ചെയ്യുക എന്നതായിരുന്നു പ്രധാനം.
== കം‌പൈലറുകളുടെ പശ്ചാത്തലം ==
== കം‌പൈലറുകളുടെ പശ്ചാത്തലം ==
കം‌പൈലറുകള്‍ക്ക് പുറമെ നിരവധി പ്രോഗ്രാമുകള്‍ കൃത്യനിര്‍വ്വഹണ യോഗ്യങ്ങളായ(executable) ലക്ഷ്യപ്രോഗ്രാമുകള്‍ ഉണ്ടാക്കുന്നുണ്ട്.മൂലപ്രോഗ്രാം മോഡ്യൂളുകളായി വിഭജിക്കപ്പെട്ട് വിവിധങ്ങളായ [[ഫയല്‍|ഫയലുകളില്‍]] സൂക്ഷിച്ച് വെക്കുന്നു.വിഭജിക്കപ്പെട്ട ഇത്തരം പ്രൊഗ്രാമുകള്‍ ശേഖരിക്കുന്നത് [[പ്രിപ്രൊസസര്‍]] എന്ന വ്യത്യസ്തമായ മറ്റൊരു പ്രോഗ്രാമാണ്.[[മാക്രോസ്]] എന്ന ചുരുക്കെഴുത്തുരൂപങ്ങളെ മൂലപ്രോഗ്രാം പ്രസ്താവനകളിലേക്ക് വികസിപ്പിക്കാനും പ്രിപ്രൊസസര്‍ ഉപയോഗിക്കാം.
കം‌പൈലറുകൾക്ക് പുറമെ നിരവധി പ്രോഗ്രാമുകൾ കൃത്യനിർവ്വഹണ യോഗ്യങ്ങളായ(executable) ലക്ഷ്യപ്രോഗ്രാമുകൾ ഉണ്ടാക്കുന്നുണ്ട്.മൂലപ്രോഗ്രാം മോഡ്യൂളുകളായി വിഭജിക്കപ്പെട്ട് വിവിധങ്ങളായ [[ഫയൽ|ഫയലുകളിൽ]] സൂക്ഷിച്ച് വെക്കുന്നു.വിഭജിക്കപ്പെട്ട ഇത്തരം പ്രൊഗ്രാമുകൾ ശേഖരിക്കുന്നത് [[പ്രിപ്രൊസസർ]] എന്ന വ്യത്യസ്തമായ മറ്റൊരു പ്രോഗ്രാമാണ്.[[മാക്രോസ്]] എന്ന ചുരുക്കെഴുത്തുരൂപങ്ങളെ മൂലപ്രോഗ്രാം പ്രസ്താവനകളിലേക്ക് വികസിപ്പിക്കാനും പ്രിപ്രൊസസർ ഉപയോഗിക്കാം.


== മാതൃക ==
== മാതൃക ==
കം‌പൈലേഷന് പൊതുവില്‍ ഉപയോഗിക്കുന്ന മാതൃകയാണ് [[അനാലിസിസ്-സിന്തെസിസ് മാതൃക]].അനാലിസിസ് ഭാഗം മൂലഭാഷയെ ഘടകഭാഗങ്ങളായിവിഭജിച്ച് മദ്ധ്യവര്‍ത്തിഭാഷ നിര്‍മ്മിക്കുന്നു.ഈ സമയം മൂലപ്രോഗ്രാമിന്റെ കാരകങ്ങള്‍ നിര്‍ണയിക്കുകയും രേഖപ്പെടുത്തുകയും ചെയ്യുന്നു.ഇത് [[ട്രീ]] എന്നറിയപ്പെടുന്ന അധികാരശ്രേണിയിലാണ് (Hierarchy) നിര്‍വഹിക്കുന്നത്.ഈ പശ്ചാത്തലത്തില്‍ വിശേഷിച്ചുപയോഗിക്കുന്നത് [[സിന്റാക്സ് ട്രീ]] ആണ്.ഇതിലെ ഓരോ [[നോഡ്|നോഡും]] കാരകത്തേയും [[ചിള്‍ഡ്രന്‍]] കാരകത്തിന്റെ [[ആര്‍ഗ്യുമെന്റ്|ആര്‍ഗ്യുമെന്റിനേയും]] പ്രതിനിധീകരിക്കുന്നു. ‍
കം‌പൈലേഷന് പൊതുവിൽ ഉപയോഗിക്കുന്ന മാതൃകയാണ് [[അനാലിസിസ്-സിന്തെസിസ് മാതൃക]].അനാലിസിസ് ഭാഗം മൂലഭാഷയെ ഘടകഭാഗങ്ങളായിവിഭജിച്ച് മദ്ധ്യവർത്തിഭാഷ നിർമ്മിക്കുന്നു.ഈ സമയം മൂലപ്രോഗ്രാമിന്റെ കാരകങ്ങൾ നിർണയിക്കുകയും രേഖപ്പെടുത്തുകയും ചെയ്യുന്നു.ഇത് [[ട്രീ]] എന്നറിയപ്പെടുന്ന അധികാരശ്രേണിയിലാണ് (Hierarchy) നിർവഹിക്കുന്നത്.ഈ പശ്ചാത്തലത്തിൽ വിശേഷിച്ചുപയോഗിക്കുന്നത് [[സിന്റാക്സ് ട്രീ]] ആണ്.ഇതിലെ ഓരോ [[നോഡ്|നോഡും]] കാരകത്തേയും [[ചിൾഡ്രൻ]] കാരകത്തിന്റെ [[ആർഗ്യുമെന്റ്|ആർഗ്യുമെന്റിനേയും]] പ്രതിനിധീകരിക്കുന്നു. ‍


അനാലിസിസ് ഭാഗത്ത് മൂലപ്രോഗ്രാമിനെ കൈകാര്യം ചെയ്യുന്നതിനായി അനവധി സോഫ്റ്റ്വെയര്‍ ഉപകരണങ്ങള്‍ ഉപയോഗിച്ചുവരുന്നു.അവയില്‍ പ്രധാനപ്പെട്ടവ [[സ്ട്രക്‍ചര്‍ എഡിറ്ററുകള്]]‍,[[പ്രെറ്റി പ്രിന്ററുകള്‍]],[[സ്റ്റാറ്റിക് ചെക്കറുകള്]]‍,[[ഇന്റെര്‍പ്രെറ്ററുകള്‍]] എന്നിവയാണ്.
അനാലിസിസ് ഭാഗത്ത് മൂലപ്രോഗ്രാമിനെ കൈകാര്യം ചെയ്യുന്നതിനായി അനവധി സോഫ്റ്റ്വെയർ ഉപകരണങ്ങൾ ഉപയോഗിച്ചുവരുന്നു.അവയിൽ പ്രധാനപ്പെട്ടവ [[സ്ട്രൿചർ എഡിറ്ററുകള്]]‍,[[പ്രെറ്റി പ്രിന്ററുകൾ]],[[സ്റ്റാറ്റിക് ചെക്കറുകള്]]‍,[[ഇന്റെർപ്രെറ്ററുകൾ]] എന്നിവയാണ്.


സിന്തസിസ് ഭാഗം ലക്ഷ്യഭാഷയെ ഈ മദ്ധ്യവര്‍ത്തിഭാഷയില്‍ നിന്നും നിര്‍മ്മിച്ചെടുക്കുന്നു.
സിന്തസിസ് ഭാഗം ലക്ഷ്യഭാഷയെ ഈ മദ്ധ്യവർത്തിഭാഷയിൽ നിന്നും നിർമ്മിച്ചെടുക്കുന്നു.
== കം‌പൈലര്‍ രൂപകല്പന ==
== കം‌പൈലർ രൂപകല്പന ==
കം‌പൈലര്‍ രൂപകല്പന ചെയ്യുന്നത് ചെയ്തുതീര്‍ക്കേണ്ട പ്രവര്‍ത്തിയുടെ സങ്കീര്‍ണ്ണതയേയും രൂപകല്പന ചെയ്യുന്നയാളുടെ പ്രവൃത്തിപരിചയവും ഉപകരണങ്ങള്‍ തുടങ്ങിയ റിസോഴ്സുകളേയും അടിസ്ഥാനമാക്കി ആണ് .
കം‌പൈലർ രൂപകല്പന ചെയ്യുന്നത് ചെയ്തുതീർക്കേണ്ട പ്രവർത്തിയുടെ സങ്കീർണ്ണതയേയും രൂപകല്പന ചെയ്യുന്നയാളുടെ പ്രവൃത്തിപരിചയവും ഉപകരണങ്ങൾ തുടങ്ങിയ റിസോഴ്സുകളേയും അടിസ്ഥാനമാക്കി ആണ് .
=== ഏകപാസ്,ബഹുപാസ് കം‌പൈലറുകള്‍ ===
=== ഏകപാസ്,ബഹുപാസ് കം‌പൈലറുകൾ ===
കം‌പൈലിങില്‍ അനവധി പ്രവൃത്തികള്‍ ചെയ്യുന്നുണ്ട്.ആദ്യകാല കം‌പൈലറുകള്‍ എല്ലാ പ്രവൃത്തികളും ചെയ്യുന്ന പ്രോഗ്രാമുകളായിരുന്നു.എന്നാല്‍ ഇത്തരമൊരു പ്രോഗ്രാമിനെ സൂക്ഷിച്ചുവെക്കാന്‍ പാകത്തിലുള്ള [[മെമ്മറി]] ഉണ്ടായിരുന്നില്ല.ആയതിനാല്‍ ചെറിയ ചെറിയ പ്രോഗ്രാമുകളാക്കി വിഭജിച്ച് ഓരോ പ്രോഗ്രാമും മൂലപ്രോഗ്രാമിനെ ചില വിശകലനങ്ങള്‍ക്കും പരിഭാഷപ്പെടുത്തലിനും വിധേയമാക്കുന്നു. ഒരു പാസില്‍ തന്നെ കം‌പൈലിങ് നടത്തുന്നതുകൊണ്ട് പ്രവൃത്തിയെ അത് ലളിതമാക്കുന്നു എന്നൊരു ഗുണമുണ്ട്.കൂടാതെ ഇവ ബഹുപാസ് കം‌പൈലറുകളേക്കാള്‍ വേഗത കൂടിയവയായിരിക്കും. പാസ്കല്‍ എന്ന പ്രോഗ്രാമിങ് ഭാഷ ഒരു പാസില്‍ കം‌പൈലേഷന്‍ നടത്താന്‍ സാധിക്കുന്ന രീതിയിലാണ് രൂപകല്പന ചെയ്തിരിക്കുന്നത്.എന്നാല്‍ ഇതിന്റെ പ്രധാന അഹിതം ഉന്നതനിലവാരമുള്ള കോഡുകള്‍ ഉല്പാദിപ്പിക്കാനാവശ്യമായ സങ്കീര്‍ണ്ണങ്ങളായ അനുകൂലനങ്ങള്‍(optimisation) ചെയ്യുന്നില്ല എന്നതാണ്.
കം‌പൈലിങിൽ അനവധി പ്രവൃത്തികൾ ചെയ്യുന്നുണ്ട്.ആദ്യകാല കം‌പൈലറുകൾ എല്ലാ പ്രവൃത്തികളും ചെയ്യുന്ന പ്രോഗ്രാമുകളായിരുന്നു.എന്നാൽ ഇത്തരമൊരു പ്രോഗ്രാമിനെ സൂക്ഷിച്ചുവെക്കാൻ പാകത്തിലുള്ള [[മെമ്മറി]] ഉണ്ടായിരുന്നില്ല.ആയതിനാൽ ചെറിയ ചെറിയ പ്രോഗ്രാമുകളാക്കി വിഭജിച്ച് ഓരോ പ്രോഗ്രാമും മൂലപ്രോഗ്രാമിനെ ചില വിശകലനങ്ങൾക്കും പരിഭാഷപ്പെടുത്തലിനും വിധേയമാക്കുന്നു. ഒരു പാസിൽ തന്നെ കം‌പൈലിങ് നടത്തുന്നതുകൊണ്ട് പ്രവൃത്തിയെ അത് ലളിതമാക്കുന്നു എന്നൊരു ഗുണമുണ്ട്.കൂടാതെ ഇവ ബഹുപാസ് കം‌പൈലറുകളേക്കാൾ വേഗത കൂടിയവയായിരിക്കും. പാസ്കൽ എന്ന പ്രോഗ്രാമിങ് ഭാഷ ഒരു പാസിൽ കം‌പൈലേഷൻ നടത്താൻ സാധിക്കുന്ന രീതിയിലാണ് രൂപകല്പന ചെയ്തിരിക്കുന്നത്.എന്നാൽ ഇതിന്റെ പ്രധാന അഹിതം ഉന്നതനിലവാരമുള്ള കോഡുകൾ ഉല്പാദിപ്പിക്കാനാവശ്യമായ സങ്കീർണ്ണങ്ങളായ അനുകൂലനങ്ങൾ(optimisation) ചെയ്യുന്നില്ല എന്നതാണ്.


എന്നാല്‍ ബഹുപാസ് കംപൈലറുകള്‍ അതിന്റെ അവസാന പാസില്‍ നിന്നാണ് യാന്ത്രികഭാഷാകോഡുകള്‍ ഉല്പാദിപ്പിക്കുന്നത്.
എന്നാൽ ബഹുപാസ് കംപൈലറുകൾ അതിന്റെ അവസാന പാസിൽ നിന്നാണ് യാന്ത്രികഭാഷാകോഡുകൾ ഉല്പാദിപ്പിക്കുന്നത്.


== പ്രവ‍ർത്തനം ==
== പ്രവ‍ര്‍ത്തനം ==
കംപൈലറുകള്‍ രണ്ടു ഭാഗങ്ങളായി കണക്കാക്കാവുന്നതാകുന്നു - മുന്‍ഭാഗവും (front-end) പിന്‍‍ഭാഗവും (back-end). മുന്‍ഭാഗം മൂലഭാഷയെ കുറിച്ചുളള കാര്യങ്ങള്‍ നോക്കുമ്പോള്‍ പിന്‍ഭാഗം ലക്ഷ്യഭാഷയുടെ സവിഷേതകള്‍ അനുസരിച്ചു പ്രവര്‍ത്തിക്കുന്നു. ഇവ തമ്മിലുളള ആശയവിനിമയം ഒരു ഇടനില (intermediate) ഭാഷയിലൂടെ നടത്തുന്നു. രണ്ടു ഭാഗങ്ങളായി തിരിക്കുന്നതുകൊണ്ടു താഴെപ്പറയുന്ന ഗുണങ്ങളുണ്ട്
കംപൈലറുകൾ രണ്ടു ഭാഗങ്ങളായി കണക്കാക്കാവുന്നതാകുന്നു - മുൻഭാഗവും (front-end) പിൻ‍ഭാഗവും (back-end). മുൻഭാഗം മൂലഭാഷയെ കുറിച്ചുളള കാര്യങ്ങൾ നോക്കുമ്പോൾ പിൻഭാഗം ലക്ഷ്യഭാഷയുടെ സവിഷേതകൾ അനുസരിച്ചു പ്രവർത്തിക്കുന്നു. ഇവ തമ്മിലുളള ആശയവിനിമയം ഒരു ഇടനില (intermediate) ഭാഷയിലൂടെ നടത്തുന്നു. രണ്ടു ഭാഗങ്ങളായി തിരിക്കുന്നതുകൊണ്ടു താഴെപ്പറയുന്ന ഗുണങ്ങളുണ്ട്
*കംപൈലറുകളുടെ പോര്‍ട്ടബിലിറ്റി (portability) അഥവാ വിവിധ തരം കംപ്യൂട്ടറുകളില്‍ ഓടാനുളള കഴിവ് വര്‍ദ്ധിക്കുന്നു.
*കംപൈലറുകളുടെ പോർട്ടബിലിറ്റി (portability) അഥവാ വിവിധ തരം കംപ്യൂട്ടറുകളിൽ ഓടാനുളള കഴിവ് വർദ്ധിക്കുന്നു.
*ഭാഷയില്‍ ഉണ്ടാവുന്ന പുതിയ മാറ്റങ്ങള്‍ ഉള്‍ക്കൊളളാനുളള കഴിവ് വര്‍ദ്ധിക്കുന്നു.
*ഭാഷയിൽ ഉണ്ടാവുന്ന പുതിയ മാറ്റങ്ങൾ ഉൾക്കൊളളാനുളള കഴിവ് വർദ്ധിക്കുന്നു.
*കംപൈറില്‍ ഉണ്ടാവാവുന്ന [[കമ്പ്യുട്ടര്‍ ബഗ്ഗ്|ബഗ്ഗുകള്‍]] കാര്യമായി കുറയുന്നു.
*കംപൈറിൽ ഉണ്ടാവാവുന്ന [[കമ്പ്യുട്ടർ ബഗ്ഗ്|ബഗ്ഗുകൾ]] കാര്യമായി കുറയുന്നു.
=== മുന്‍ഭാഗം ===
=== മുൻഭാഗം ===
കമ്പൈലറിന്റെ മുന്‍ഭാഗത്തെ നാല് ഉപഭാഗങ്ങളായി വേ‍ര്‍തിരിക്കാം
കമ്പൈലറിന്റെ മുൻഭാഗത്തെ നാല് ഉപഭാഗങ്ങളായി വേ‍ർതിരിക്കാം
#[[ലെക്സിക്കല്‍ അനലൈസ‍ര്‍]] (lexical analyser) - മൂലഭാഷയിലെ കണികകളെ തിരിച്ചറിയാനും അവയിലെ അക്ഷരപിശകുകള്‍ കണ്ടെത്താനും ഈ ഭാഗം ഉപകാരപ്പെടുന്നു.ഈ ഭാഗത്തെ [[സ്കാനര്‍]](scanner)എന്നും പറയും.
#[[ലെക്സിക്കൽ അനലൈസ‍ർ]] (lexical analyser) - മൂലഭാഷയിലെ കണികകളെ തിരിച്ചറിയാനും അവയിലെ അക്ഷരപിശകുകൾ കണ്ടെത്താനും ഈ ഭാഗം ഉപകാരപ്പെടുന്നു.ഈ ഭാഗത്തെ [[സ്കാനർ]](scanner)എന്നും പറയും.
#സിന്റാറ്റിക്ക് അനലൈസ‍ര്‍ (syntatic analyser) - മൂലഭാഷയുടെ വ്യാകരണമുപയോഗിച്ചു ലെക്സിക്കല്‍ അനലൈസ‍റില്‍ നിന്നു ലഭിക്കുന്ന കണികകളെ വാക്യങ്ങളായി യോജിപ്പിക്കുകയും വ്യാകരണതെറ്റുകള്‍ കണ്ടെത്തുകയും അവ തിരുത്താന്‍ പ്രോഗ്രാമറെ സഹായിക്കുകയും ചെയ്യുന്നു. ഈ ഭാഗത്തെ [[പാര്‍സര്‍]](parser) എന്നും വിളിക്കാറുണ്ട്.
#സിന്റാറ്റിക്ക് അനലൈസ‍ർ (syntatic analyser) - മൂലഭാഷയുടെ വ്യാകരണമുപയോഗിച്ചു ലെക്സിക്കൽ അനലൈസ‍റിൽ നിന്നു ലഭിക്കുന്ന കണികകളെ വാക്യങ്ങളായി യോജിപ്പിക്കുകയും വ്യാകരണതെറ്റുകൾ കണ്ടെത്തുകയും അവ തിരുത്താൻ പ്രോഗ്രാമറെ സഹായിക്കുകയും ചെയ്യുന്നു. ഈ ഭാഗത്തെ [[പാർസർ]](parser) എന്നും വിളിക്കാറുണ്ട്.
#[[സെമാന്റിക്ക് അനലൈസ‍ര്‍]] (semnatic analyser) - ഈ ഭാഗം വാക്യങ്ങളെ കൂട്ടിവായിക്കുകയും അവയുടെ അര്‍ത്ഥം ഗ്രഹിക്കുകയും ചെയ്യുന്നു.
#[[സെമാന്റിക്ക് അനലൈസ‍ർ]] (semnatic analyser) - ഈ ഭാഗം വാക്യങ്ങളെ കൂട്ടിവായിക്കുകയും അവയുടെ അർത്ഥം ഗ്രഹിക്കുകയും ചെയ്യുന്നു.
#ഇടനില ഭാഷാനിര്‍മ്മാണം(intermediate code generator) - മുന്‍ഭാഗത്തെ പ്രവര്‍ത്തനങ്ങളുടെ അവസാനത്തെ പടിയാണ് ഇത്. ഇവിടെ നേരത്തെ ഗ്രഹിച്ച പ്രോഗ്രാമിനെ ഒരു ലളിതമായ ഇടനില ഭാഷയില്‍ എഴുതുന്നു. ഈ ഭാഷ രണ്ടു ഭാഗങ്ങള്‍ക്കും സൗക‍ര്യപ്രദമായ ഒന്നായാല്‍ മതി.
#ഇടനില ഭാഷാനിർമ്മാണം(intermediate code generator) - മുൻഭാഗത്തെ പ്രവർത്തനങ്ങളുടെ അവസാനത്തെ പടിയാണ് ഇത്. ഇവിടെ നേരത്തെ ഗ്രഹിച്ച പ്രോഗ്രാമിനെ ഒരു ലളിതമായ ഇടനില ഭാഷയിൽ എഴുതുന്നു. ഈ ഭാഷ രണ്ടു ഭാഗങ്ങൾക്കും സൗക‍ര്യപ്രദമായ ഒന്നായാൽ മതി.


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


== നിർമ്മാണം ==
== നിര്‍മ്മാണം ==
കംപൈലറുകളുടെ നിര്‍മ്മാണം ഇപ്പോള്‍ താരതമ്യേനെ എളുപ്പമായി തീര്‍ന്നിരിക്കുന്നു. [[പാര്‍സറും]] [[സ്കാനറും]] സ്വയം ഉണ്ടാക്കുന്ന ഉപകര‍ണ്ണങ്ങള്‍ ഇപ്പോള്‍ ലഭ്യമാണ്. ലെക്സ് (Lex),യാക്ക് (yacc) , ജെ ലെക്സ് (jlex) , കപ് (cup) എന്നിവയാണ‍് അവയില്‍ ചിലത്. ഒരോ ഭാഗവും സ്വതന്ത്ര മോഡ്യൂളുകളായി(modules) നിര്‍മ്മിച്ചാല്‍ അവ അങ്ങോട്ടും ഇങ്ങോട്ടും മാറ്റി വിവിധയിനം കംപൈലറുകള്‍ ഉണ്ടാക്കാവുന്നതാണ്.
കംപൈലറുകളുടെ നിർമ്മാണം ഇപ്പോൾ താരതമ്യേനെ എളുപ്പമായി തീർന്നിരിക്കുന്നു. [[പാർസറും]] [[സ്കാനറും]] സ്വയം ഉണ്ടാക്കുന്ന ഉപകര‍ണ്ണങ്ങൾ ഇപ്പോൾ ലഭ്യമാണ്. ലെക്സ് (Lex),യാക്ക് (yacc) , ജെ ലെക്സ് (jlex) , കപ് (cup) എന്നിവയാണ‍് അവയിൽ ചിലത്. ഒരോ ഭാഗവും സ്വതന്ത്ര മോഡ്യൂളുകളായി(modules) നിർമ്മിച്ചാൽ അവ അങ്ങോട്ടും ഇങ്ങോട്ടും മാറ്റി വിവിധയിനം കംപൈലറുകൾ ഉണ്ടാക്കാവുന്നതാണ്.
== അവലംബം ==
== അവലംബം ==
*Principles of Compiler Design ലേഖകര്‍ Aho.A.V and Ullman J.D---Narosa1977
*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'.
*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'.


== അവലംബം ==
== അവലംബം ==
<references/>
<references/>
== കുറിപ്പുകൾ ==
== കുറിപ്പുകള്‍ ==
<div class="references-small" style="-moz-column-count:2; column-count:2;"> </div>
<div class="references-small" style="-moz-column-count:2; column-count:2;"> </div>


{{Comp-sci-stub|Compiler}}
{{Comp-sci-stub|Compiler}}


[[വർഗ്ഗം:കംപൈലറുകൾ]]
[[വര്‍ഗ്ഗം:കംപൈലറുകള്‍]]
[[വര്‍ഗ്ഗം:കംപൈലര്‍ തിയറി]]
[[വർഗ്ഗം:കംപൈലർ തിയറി]]
[[വർഗ്ഗം:കമ്പ്യൂട്ടർ ലൈബ്രറികൾ]]
[[വര്‍ഗ്ഗം:കമ്പ്യൂട്ടര്‍ ലൈബ്രറികള്‍]]


[[af:Vertalerkonstruksie]]
[[af:Vertalerkonstruksie]]
വരി 96: വരി 96:
[[ka:კომპილატორი]]
[[ka:კომპილატორი]]
[[ko:컴파일러]]
[[ko:컴파일러]]
[[la:Compilatrum]]
[[lt:Kompiliatorius]]
[[lt:Kompiliatorius]]
[[lv:Kompilators]]
[[lv:Kompilators]]

08:11, 10 ഏപ്രിൽ 2010-നു നിലവിലുണ്ടായിരുന്ന രൂപം

ബഹുഭാഷ-ബഹുലക്ഷ്യ മാതൃകാകം‌പൈലറിന്റെ ചിത്രം

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

കം‌പൈലറുകളെ അവയുടെ നിർമ്മാണരീതിയേയും ധർമ്മത്തേയും അടിസ്ഥാനമാക്കി സിംഗിൾ-പാസ്,മൾടി-പാസ്,ലോഡ് -ആന്റ്-ഗോ,ഡിബഗ്ഗിങ്,ഒപ്റ്റിമൈസിങ് എന്നിങ്ങനെ വിഭജിക്കാം.

ചരിത്രം

1950കളുടെ ആദ്യകാലങ്ങളിൽ തന്നെ കം‌പൈലർ പ്രോഗ്രാമുകൾ എഴുതിത്തുടങ്ങുകയും അവ പരീക്ഷിക്കുകയും പ്രയോഗത്തിൽ വരുത്തുകയും ചെയ്തിരുന്നു.പല കൂട്ടങ്ങളായി സ്വതന്ത്രമായി പലയിടങ്ങളിലായാണ് ഈ പ്രൊഗ്രാമുകൾ എഴുതിയിരുന്നത് എന്നതിനാൽ ആദ്യ കം‌പൈലർ പ്രോഗ്രാം ഏതെന്നും എന്നാണ് ആദ്യമായി പ്രയോഗത്തിൽ വരുത്തിയത് എന്നും വ്യക്തമല്ല.

ആദ്യത്തെ ഫോർട്രാൻ കംപൈലർ‍ 1957-ൽ അമേരിക്കയിലെ ഐ.ബി.എം.(IBM) കോർറേഷനിലെ ജോൺ ബാക്കസ് പ്രയോഗത്തിൽ വരുത്തി. കംപൈലറുകൾ, നിർമ്മി‍ക്കാൻ ബുദ്ധിമുട്ടുളള വളരെ സങ്കീർണ്ണമായ പ്രോഗ്രാമുകളാണ്. ഫോർട്രാൻ കംപൈലർ നിർമ്മിക്കാൻ തന്നെ 18 വ‍ർഷങ്ങൾ വേണ്ടി വന്നു എന്നതിൽ നിന്നും ഈ സങ്കീർണത എത്രത്തോളമുണ്ടെന്ന് ഊഹിക്കാം.[1]

കം‌പൈലറുകളുടെ ആദ്യകാല പ്രവർത്തനങ്ങളിൽ ബീജഗണിത സൂത്രവാക്യങ്ങളെ യാന്ത്രികഭാഷയിലേക്ക് പരിവർത്തനം ചെയ്യുക എന്നതായിരുന്നു പ്രധാനം.

കം‌പൈലറുകളുടെ പശ്ചാത്തലം

കം‌പൈലറുകൾക്ക് പുറമെ നിരവധി പ്രോഗ്രാമുകൾ കൃത്യനിർവ്വഹണ യോഗ്യങ്ങളായ(executable) ലക്ഷ്യപ്രോഗ്രാമുകൾ ഉണ്ടാക്കുന്നുണ്ട്.മൂലപ്രോഗ്രാം മോഡ്യൂളുകളായി വിഭജിക്കപ്പെട്ട് വിവിധങ്ങളായ ഫയലുകളിൽ സൂക്ഷിച്ച് വെക്കുന്നു.വിഭജിക്കപ്പെട്ട ഇത്തരം പ്രൊഗ്രാമുകൾ ശേഖരിക്കുന്നത് പ്രിപ്രൊസസർ എന്ന വ്യത്യസ്തമായ മറ്റൊരു പ്രോഗ്രാമാണ്.മാക്രോസ് എന്ന ചുരുക്കെഴുത്തുരൂപങ്ങളെ മൂലപ്രോഗ്രാം പ്രസ്താവനകളിലേക്ക് വികസിപ്പിക്കാനും പ്രിപ്രൊസസർ ഉപയോഗിക്കാം.

മാതൃക

കം‌പൈലേഷന് പൊതുവിൽ ഉപയോഗിക്കുന്ന മാതൃകയാണ് അനാലിസിസ്-സിന്തെസിസ് മാതൃക.അനാലിസിസ് ഭാഗം മൂലഭാഷയെ ഘടകഭാഗങ്ങളായിവിഭജിച്ച് മദ്ധ്യവർത്തിഭാഷ നിർമ്മിക്കുന്നു.ഈ സമയം മൂലപ്രോഗ്രാമിന്റെ കാരകങ്ങൾ നിർണയിക്കുകയും രേഖപ്പെടുത്തുകയും ചെയ്യുന്നു.ഇത് ട്രീ എന്നറിയപ്പെടുന്ന അധികാരശ്രേണിയിലാണ് (Hierarchy) നിർവഹിക്കുന്നത്.ഈ പശ്ചാത്തലത്തിൽ വിശേഷിച്ചുപയോഗിക്കുന്നത് സിന്റാക്സ് ട്രീ ആണ്.ഇതിലെ ഓരോ നോഡും കാരകത്തേയും ചിൾഡ്രൻ കാരകത്തിന്റെ ആർഗ്യുമെന്റിനേയും പ്രതിനിധീകരിക്കുന്നു. ‍

അനാലിസിസ് ഭാഗത്ത് മൂലപ്രോഗ്രാമിനെ കൈകാര്യം ചെയ്യുന്നതിനായി അനവധി സോഫ്റ്റ്വെയർ ഉപകരണങ്ങൾ ഉപയോഗിച്ചുവരുന്നു.അവയിൽ പ്രധാനപ്പെട്ടവ സ്ട്രൿചർ എഡിറ്ററുകള്‍,പ്രെറ്റി പ്രിന്ററുകൾ,സ്റ്റാറ്റിക് ചെക്കറുകള്‍,ഇന്റെർപ്രെറ്ററുകൾ എന്നിവയാണ്.

സിന്തസിസ് ഭാഗം ലക്ഷ്യഭാഷയെ ഈ മദ്ധ്യവർത്തിഭാഷയിൽ നിന്നും നിർമ്മിച്ചെടുക്കുന്നു.

കം‌പൈലർ രൂപകല്പന

കം‌പൈലർ രൂപകല്പന ചെയ്യുന്നത് ചെയ്തുതീർക്കേണ്ട പ്രവർത്തിയുടെ സങ്കീർണ്ണതയേയും രൂപകല്പന ചെയ്യുന്നയാളുടെ പ്രവൃത്തിപരിചയവും ഉപകരണങ്ങൾ തുടങ്ങിയ റിസോഴ്സുകളേയും അടിസ്ഥാനമാക്കി ആണ് .

ഏകപാസ്,ബഹുപാസ് കം‌പൈലറുകൾ

കം‌പൈലിങിൽ അനവധി പ്രവൃത്തികൾ ചെയ്യുന്നുണ്ട്.ആദ്യകാല കം‌പൈലറുകൾ എല്ലാ പ്രവൃത്തികളും ചെയ്യുന്ന പ്രോഗ്രാമുകളായിരുന്നു.എന്നാൽ ഇത്തരമൊരു പ്രോഗ്രാമിനെ സൂക്ഷിച്ചുവെക്കാൻ പാകത്തിലുള്ള മെമ്മറി ഉണ്ടായിരുന്നില്ല.ആയതിനാൽ ചെറിയ ചെറിയ പ്രോഗ്രാമുകളാക്കി വിഭജിച്ച് ഓരോ പ്രോഗ്രാമും മൂലപ്രോഗ്രാമിനെ ചില വിശകലനങ്ങൾക്കും പരിഭാഷപ്പെടുത്തലിനും വിധേയമാക്കുന്നു. ഒരു പാസിൽ തന്നെ കം‌പൈലിങ് നടത്തുന്നതുകൊണ്ട് പ്രവൃത്തിയെ അത് ലളിതമാക്കുന്നു എന്നൊരു ഗുണമുണ്ട്.കൂടാതെ ഇവ ബഹുപാസ് കം‌പൈലറുകളേക്കാൾ വേഗത കൂടിയവയായിരിക്കും. പാസ്കൽ എന്ന പ്രോഗ്രാമിങ് ഭാഷ ഒരു പാസിൽ കം‌പൈലേഷൻ നടത്താൻ സാധിക്കുന്ന രീതിയിലാണ് രൂപകല്പന ചെയ്തിരിക്കുന്നത്.എന്നാൽ ഇതിന്റെ പ്രധാന അഹിതം ഉന്നതനിലവാരമുള്ള കോഡുകൾ ഉല്പാദിപ്പിക്കാനാവശ്യമായ സങ്കീർണ്ണങ്ങളായ അനുകൂലനങ്ങൾ(optimisation) ചെയ്യുന്നില്ല എന്നതാണ്.

എന്നാൽ ബഹുപാസ് കംപൈലറുകൾ അതിന്റെ അവസാന പാസിൽ നിന്നാണ് യാന്ത്രികഭാഷാകോഡുകൾ ഉല്പാദിപ്പിക്കുന്നത്.

പ്രവ‍ർത്തനം

കംപൈലറുകൾ രണ്ടു ഭാഗങ്ങളായി കണക്കാക്കാവുന്നതാകുന്നു - മുൻഭാഗവും (front-end) പിൻ‍ഭാഗവും (back-end). മുൻഭാഗം മൂലഭാഷയെ കുറിച്ചുളള കാര്യങ്ങൾ നോക്കുമ്പോൾ പിൻഭാഗം ലക്ഷ്യഭാഷയുടെ സവിഷേതകൾ അനുസരിച്ചു പ്രവർത്തിക്കുന്നു. ഇവ തമ്മിലുളള ആശയവിനിമയം ഒരു ഇടനില (intermediate) ഭാഷയിലൂടെ നടത്തുന്നു. രണ്ടു ഭാഗങ്ങളായി തിരിക്കുന്നതുകൊണ്ടു താഴെപ്പറയുന്ന ഗുണങ്ങളുണ്ട്

  • കംപൈലറുകളുടെ പോർട്ടബിലിറ്റി (portability) അഥവാ വിവിധ തരം കംപ്യൂട്ടറുകളിൽ ഓടാനുളള കഴിവ് വർദ്ധിക്കുന്നു.
  • ഭാഷയിൽ ഉണ്ടാവുന്ന പുതിയ മാറ്റങ്ങൾ ഉൾക്കൊളളാനുളള കഴിവ് വർദ്ധിക്കുന്നു.
  • കംപൈറിൽ ഉണ്ടാവാവുന്ന ബഗ്ഗുകൾ കാര്യമായി കുറയുന്നു.

മുൻഭാഗം

കമ്പൈലറിന്റെ മുൻഭാഗത്തെ നാല് ഉപഭാഗങ്ങളായി വേ‍ർതിരിക്കാം

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

പിൻഭാഗം

പിൻഭാഗത്തിന്റെ പ്രവർത്തനങ്ങൾ രണ്ടായി തിരിക്കാം.

  1. ഒപ്റ്റിമൈസേഷൻ (optimisation) - ആവശ്യമില്ലാത്തതും , രണ്ടു പ്രാവശ്യമുളളതുമായ ആജ്ഞകൾ നീക്കം ചെയ്യുകയും, ക്രമം മാറ്റി തിരുത്തുകയും, കൂടുതൽ കാര്യക്ഷമതയുളള ആജ്ഞാശേഖരങ്ങായി രൂപാന്തരപ്പെടുത്തുകയും മറ്റുമാണ് ഈ ഭാഗം ചെയ്യുന്നത്.
  2. കോഡ് നിർമ്മാണം (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'.

അവലംബം

  1. 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'.

കുറിപ്പുകൾ

"https://ml.wikipedia.org/w/index.php?title=കംപൈലർ&oldid=650649" എന്ന താളിൽനിന്ന് ശേഖരിച്ചത്