Compiler Description Language
કમ્પાઇલર ડિસ્ક્રિપ્શન લેંગ્વેજ (સી. ડી. એલ.) એ એફિક્સ વ્યાકરણ પર આધારિત પ્રોગ્રામિંગ લેંગ્વેજ છે. તે બેકસ-નૌર ફોર્મ (બી. એન. એફ.) નોટેશન સાથે ખૂબ સમાન છે. તે કમ્પાઇલર્સના વિકાસ માટે તૈયાર કરવામાં આવ્યું હતું. તે તેની ક્ષમતાઓ અને નિયંત્રણ પ્રવાહમાં ખૂબ જ મર્યાદિત છે, અને ઇરાદાપૂર્વક. આ મર્યાદાઓના બે ગણા ફાયદા છે. એક તરફ, તેઓ અત્યંત કાર્યક્ષમ કોડમાં પરિણમતા CDL2 ઓપ્ટિમાઇઝર્સ દ્વારા ઉપયોગમાં લેવાતા અત્યાધુનિક ડેટા અને નિયંત્રણ પ્રવાહ વિશ્લેષણને શક્ય બનાવે છે. બીજો ફાયદો એ છે કે તેઓ અત્યંત શાબ્દિક નામકરણ પરંપરાને પ્રોત્સાહન આપે છે. આ, બદલામાં, એવા કાર્યક્રમો તરફ દોરી જાય છે જે, મોટા પ્રમાણમાં, સ્વ-દસ્તાવેજીકરણ છે. આ ભાષા થોડી પ્રોલોગ જેવી લાગે છે (આ આશ્ચર્યજનક નથી કારણ કે બંને ભાષાઓ લગભગ એક જ સમયે એફિક્સ વ્યાકરણના કામમાંથી ઉદ્ભવી હતી). જો કે, પ્રોલોગથી વિપરીત, સી. ડી. એલ. માં નિયંત્રણ પ્રવાહ નિશ્ચિતપણે સફળતા/નિષ્ફળતા પર આધારિત છે, એટલે કે, જ્યારે વર્તમાન સફળ થાય ત્યારે અન્ય કોઈ વિકલ્પ અજમાવવામાં આવતા નથી. આ વિચારનો ઉપયોગ અભિવ્યક્તિ વ્યાકરણના પદચ્છેદનમાં પણ થાય છે. સી. ડી. એલ. 3 એ સી. ડી. એલ. ભાષાનું ત્રીજું સંસ્કરણ છે, જે અગાઉના બે સંસ્કરણોથી નોંધપાત્ર રીતે અલગ છે. મૂળ સંસ્કરણ, જે નિજમેગેન યુનિવર્સિટી ખાતે કોર્નેલિસ એચ. એ. કોસ્ટર દ્વારા ડિઝાઇન કરવામાં આવ્યું હતું, જે 1971 માં ઉભરી આવ્યું હતું, તેમાં એક અસામાન્ય ખ્યાલ હતોઃ તેમાં કોઈ કોર નહોતું. એક લાક્ષણિક પ્રોગ્રામિંગ ભાષા સ્રોતને મશીન સૂચનાઓ અથવા તે સૂચનાઓના તૈયાર અનુક્રમમાં અનુવાદિત કરવામાં આવે છે. તે મૂળનું પ્રતિનિધિત્વ કરે છે, સૌથી મૂળભૂત અમૂર્ત જે આપેલ ભાષા ટેકો આપે છે. આવા પ્રિમિટિવ્સ સંખ્યાઓનો ઉમેરો, એકબીજા સાથે ચલની નકલ વગેરે હોઈ શકે છે. સી. ડી. એલ. 1 માં આવા કોરનો અભાવ છે. તે પ્રોગ્રામરની જવાબદારી છે કે તે આદિમ કામગીરીને એવા સ્વરૂપમાં પ્રદાન કરે કે જે પછી એસેમ્બલર અથવા પરંપરાગત ભાષા માટે કમ્પાઇલર દ્વારા મશીન સૂચનાઓમાં ફેરવી શકાય. સી. ડી. એલ. 1 ભાષામાં સ્વયં આદિમ શબ્દોનો કોઈ ખ્યાલ નથી, મશીન શબ્દ સિવાય ડેટા પ્રકારોનો કોઈ ખ્યાલ નથી (સંગ્રહનો અમૂર્ત એકમ-જરૂરી નથી કે તે વાસ્તવિક મશીન શબ્દ હોય). મૂલ્યાંકનના નિયમો બેકસ-નૌર સ્વરૂપના વાક્યરચના વર્ણન જેવા જ છે; હકીકતમાં, બી. એન. એફ. માં વર્ણવેલ ભાષા માટે પાર્સર લખવું એ સી. ડી. એલ. 1 માં સરળ છે. મૂળભૂત રીતે, ભાષામાં નિયમો હોય છે. એક નિયમ સફળ અથવા નિષ્ફળ થઈ શકે છે. એક નિયમમાં એવા વિકલ્પોનો સમાવેશ થાય છે જે અન્ય નિયમોના આહ્વાનના ક્રમ છે. એક નિયમ સફળ થાય છે જો તેના કોઈપણ વિકલ્પો સફળ થાય; આનો ક્રમમાં પ્રયાસ કરવામાં આવે છે. જો તેના તમામ નિયમો સફળ થાય તો વૈકલ્પિક સફળ થાય છે. ભાષા ઓપરેટરોને પુનરાવર્તન વિના મૂલ્યાંકન લૂપ્સ બનાવવા માટે પ્રદાન કરે છે (જોકે આ સી. ડી. એલ. 2 માં સખત રીતે જરૂરી નથી કારણ કે ઓપ્ટિમાઇઝર સમાન અસર પ્રાપ્ત કરે છે) અને અન્યથા પુનરાવર્તિત મૂલ્યાંકનની કાર્યક્ષમતા વધારવા માટે કેટલાક શોર્ટકટ્સ, પરંતુ મૂળભૂત ખ્યાલ ઉપર મુજબ છે. સંદર્ભ-મુક્ત વ્યાકરણ પદચ્છેદનમાં સ્પષ્ટ ઉપયોગ ઉપરાંત, સી. ડી. એલ. કાર્યક્રમો નિયંત્રિત કરવા માટે પણ સારી રીતે અનુકૂળ છે કારણ કે ઘણા નિયંત્રણ કાર્યક્રમો અનિવાર્યપણે ઊંડાણપૂર્વક નેસ્ટેડ હોય છે. દરેક સી. ડી. એલ. 1 નિયમ, મૂલ્યાંકન કરતી વખતે, ડેટા પર કાર્ય કરી શકે છે, જે અચોક્કસ પ્રકારનો છે. આદર્શ રીતે, જ્યાં સુધી નિયમ સફળ ન થાય ત્યાં સુધી માહિતી બદલવી જોઈએ નહીં (નિષ્ફળતા પર કોઈ આડઅસર નહીં). આ સમસ્યાઓનું કારણ બને છે કારણ કે આ નિયમ સફળ થઈ શકે છે, તેમ છતાં તેને લાગુ કરતો નિયમ હજુ પણ નિષ્ફળ થઈ શકે છે, આ કિસ્સામાં ડેટા ફેરફાર અમલમાં ન આવવો જોઈએ. જો તમામ ડેટા ગતિશીલ રીતે સ્ટેક પર ફાળવવામાં આવે તો ઉપરોક્ત વર્તણૂકની ખાતરી કરવી એકદમ સરળ (જોકે મેમરી સઘન) છે. જો કે, જ્યારે સ્થિર ડેટા હોય ત્યારે તે મુશ્કેલ હોય છે, જે ઘણીવાર થાય છે. સી. ડી. એલ. 2 કમ્પાઇલર સંભવિત ઉલ્લંઘનોને ચિહ્નિત કરવામાં સક્ષમ છે કારણ કે પરિમાણોની દિશા (ઇનપુટ, આઉટપુટ, ઇનપુટ-આઉટપુટ) અને નિયમોનો પ્રકાર (નિષ્ફળ થઈ શકે છેઃ પરીક્ષણ, આગાહી; નિષ્ફળ ન થઈ શકેઃ કાર્ય, ક્રિયા; આડઅસર હોઈ શકે છેઃ આગાહી, ક્રિયા; આડઅસર ન હોઈ શકેઃ પરીક્ષણ, કાર્ય) પ્રોગ્રામર દ્વારા નિર્દિષ્ટ હોવું આવશ્યક છે. કારણ કે નિયમનું મૂલ્યાંકન સરળ અને સરળ નિયમો પર આધારિત છે, તળિયે, કેટલાક આદિમ નિયમો હોવા જોઈએ જે વાસ્તવિક કાર્ય કરે છે. ત્યાં જ સી. ડી. એલ. 1 ખૂબ જ આશ્ચર્યજનક છેઃ તેમાં તે આદિમ નથી. તમારે તે નિયમો જાતે જ પૂરા પાડવા પડશે. જો તમને તમારા પ્રોગ્રામમાં ઉમેરાની જરૂર હોય, તો તમારે બે ઇનપુટ પરિમાણો અને એક આઉટપુટ પરિમાણ સાથે એક નિયમ બનાવવો પડશે, અને આઉટપુટ તમારા કોડ દ્વારા બે ઇનપુટ્સના સરવાળા તરીકે સેટ કરવામાં આવે છે. સી. ડી. એલ. કમ્પાઇલર તમારા કોડનો ઉપયોગ શબ્દમાળાઓ તરીકે કરે છે (ઇનપુટ અને આઉટપુટ ચલોનો સંદર્ભ કેવી રીતે લેવો તે અંગે પરંપરાઓ છે) અને તેને જરૂરિયાત મુજબ બહાર કાઢે છે. જો તમે એસેમ્બલીનો ઉપયોગ કરીને તમારા ઉમેરવાના નિયમનું વર્ણન કરો છો, તો તમારે સી. ડી. એલ. કમ્પાઇલરના આઉટપુટને મશીન કોડમાં અનુવાદિત કરવા માટે એસેમ્બલરની જરૂર પડશે. જો તમે પાસ્કલ અથવા સીમાં તમામ આદિમ નિયમો (સીડીએલ પરિભાષામાં મેક્રો) નું વર્ણન કરો છો, તો તમારે સીડીએલ કમ્પાઇલર પછી ચલાવવા માટે પાસ્કલ અથવા સી કમ્પાઇલરની જરૂર છે. કોર પ્રિમિટિવ્સનો આ અભાવ ખૂબ જ પીડાદાયક હોઈ શકે છે જ્યારે તમારે કોડનો એક ટુકડો લખવો પડે છે, સૌથી સરળ મશીન સૂચના કામગીરી માટે પણ. જો કે, બીજી બાજુ, તે તમને વિદેશી અમૂર્ત પદાર્થો પર કામ કરતા ગુપ્ત, અમૂર્ત આદિકાળના અમલીકરણમાં ખૂબ જ લવચીકતા આપે છે (સી. ડી. એલ. માં 'મશીન વર્ડ' વધુ 'ડેટા સ્ટોરેજના એકમ' જેવું છે, જેમાં સંગ્રહિત ડેટાના પ્રકારનો કોઈ સંદર્ભ નથી). વધુમાં, મોટા પ્રોજેક્ટ્સમાં કાળજીપૂર્વક રચાયેલ આદિમ પુસ્તકાલયોની રચના કરવામાં આવી હતી. ત્યારબાદ દરેક ટાર્ગેટ આર્કિટેક્ચર અને ઓએસ માટે આની નકલ કરવામાં આવી હતી, જે બધા માટે અત્યંત કાર્યક્ષમ કોડના ઉત્પાદનને મંજૂરી આપે છે. ભાષા માટે લાગણી મેળવવા માટે, અહીં સી. ડી. એલ. 2 માર્ગદર્શિકામાંથી સ્વીકારવામાં આવેલ એક નાનો કોડ ટુકડો છેઃ એક્ટિયન ક્વિકસોર્ટ +> થી +> થી-પી-ક્યૂઃ લેસ + થી +, સ્પ્લિટ + થી + + પી + ક્યૂ, ક્વિકસોર્ટ + થી + ક્યૂ, ક્વિકસોર્ટ + પી + થી; +. ક્રિયા વિભાજન +> i +> j + p> + q>-m: બનાવો + p + i, બનાવો + q + j, ઉમેરો + i + j + m, અર્ધ + m, (ફરીથીઃ ઉપર ખસેડો + j + p + m, નીચે ખસેડો + i + q + m, (ઓછું + p + q, સ્વેપ આઇટમ + p + q, ઇન્કઆર + p, ડેકર + q, * ફરીથી; ઓછું + p + m, સ્વેપ આઇટમ + p + m, ઇન્કઆર + p; ઓછું + m + q, સ્વેપ આઇટમ + q + m, ડેકર + q; +). કાર્ય ઉપર ખસેડો +> જે +> પી> +> એમઃ ઓછું + જે + પી; નાની વસ્તુ + એમ + પી; ઇન્કઆર + પી, *. કાર્ય નીચે ખસેડો +> i +> q> +> m: ઓછું + q + j; નાની વસ્તુ + q + m; ડીક્ર + q, *. ટેસ્ટ ઓછા +> a +> b: = a "<" b. કાર્ય + a> +> b: = a "=" b "બનાવો. કાર્ય ઉમેરો +> a +> b + સરવાળો>: = સરવાળો "=" a "+" b. કાર્ય અર્ધ +> a>: = a "/= 2". કાર્ય ઇન્કઆર +> એ>: = એ "+ +". ફંક્શન ડીક્ર +> a>: = a "--". ટેસ્ટ નાની વસ્તુ +> i +> j: = "વસ્તુઓ [" i "] <વસ્તુઓ [" j "]". ક્રિયા વસ્તુઓને અદલાબદલી કરો +> i +> j-t: = t "= વસ્તુઓ [" i "]; વસ્તુઓ [" i "] = વસ્તુઓ [" j "]; વસ્તુઓ [" j "] =" t. આદિમ કામગીરીઓને અહીં જાવા (અથવા C) ના સંદર્ભમાં વ્યાખ્યાયિત કરવામાં આવી છે. આ એક સંપૂર્ણ પ્રોગ્રામ નથી; આપણે જાવા એરે વસ્તુઓને અન્યત્ર વ્યાખ્યાયિત કરવી જોઈએ. સી. ડી. એલ. 2, જે 1976 માં દેખાયું હતું, તેણે સી. ડી. એલ. 1 ના સિદ્ધાંતોને જાળવી રાખ્યા હતા પરંતુ ભાષાને મોટા પ્રોજેક્ટ્સ માટે યોગ્ય બનાવી હતી. તેણે મોડ્યુલો રજૂ કર્યા, ડેટા-ચેન્જ-ઓનલી-ઓન-સક્સેસ લાગુ કરી અને ભાષાની ક્ષમતાઓને કંઈક અંશે વિસ્તૃત કરી. સી. ડી. એલ. 2 કમ્પાઇલરમાં અને ખાસ કરીને સી. ડી. એલ. 2 લેબોરેટરી (સી. ડી. એલ. 2 માટે આઇ. ડી. ઇ.) માં ઓપ્ટિમાઇઝર્સ વિશ્વ કક્ષાના હતા અને માત્ર તેમના સમય માટે નહીં. સી. ડી. એલ. 2 લેબોરેટરી ઓપ્ટિમાઇઝરનું એક લક્ષણ લગભગ અનન્ય છેઃ તે સંકલન એકમોમાં ઓપ્ટિમાઇઝેશન કરી શકે છે, એટલે કે, સમગ્ર પ્રોગ્રામને એક સંકલન તરીકે ગણવામાં આવે છે. સી. ડી. એલ. 3 વધુ તાજેતરની ભાષા છે. તેણે અગાઉના સી. ડી. એલ. વર્ઝનની ઓપન-એન્ડેડ સુવિધાને છોડી દીધી હતી અને તે મૂળભૂત અંકગણિત અને સંગ્રહની પહોંચને આદિમ પ્રદાન કરે છે. અગાઉના સી. ડી. એલ. સંસ્કરણોના અત્યંત શુદ્ધતાવાદી વાક્યરચના (એક આંકડામાં ચાલતા કીવર્ડ્સ અને પ્રતીકોની સંખ્યા) માં પણ છૂટછાટ આપવામાં આવી છે. કેટલાક મૂળભૂત ખ્યાલો હવે સ્પષ્ટ શબ્દાર્થને બદલે વાક્યરચનામાં વ્યક્ત કરવામાં આવે છે. વધુમાં, ભાષામાં માહિતીના પ્રકારો રજૂ કરવામાં આવ્યા છે. વાણિજ્યિક એમ. બી. પી. કોબોલ (પીસી માટે કોબોલ કમ્પાઇલર) તેમજ એમપ્રોલોજ સિસ્ટમ (એક ઔદ્યોગિક-શક્તિ પ્રોલોગ અમલીકરણ કે જે અસંખ્ય આર્કિટેક્ચર (આઇબીએમ મેઇનફ્રેમ, વીએએક્સ, પીડીપી-11, ઇન્ટેલ 8086, વગેરે) પર ચાલે છે) નો ઉપયોગ કરો. અને OS-s (DOS/OS/CMS/BS2000, VMS/UNIX, DOS/Windows/OS2). બાદમાં, ખાસ કરીને, સી. ડી. એલ. 2 ની પોર્ટેબિલિટીની સાક્ષી છે. જ્યારે સી. ડી. એલ. સાથે લખાયેલા મોટાભાગના પ્રોગ્રામ્સ કમ્પાઇલર્સ છે, ત્યાં ઓછામાં ઓછી એક વ્યાવસાયિક જી. યુ. આઇ. એપ્લિકેશન છે જે સી. ડી. એલ. માં વિકસાવવામાં અને જાળવવામાં આવી હતી. આ એપ્લિકેશન ડેન્ટલ ઇમેજ એક્વિઝિશન એપ્લિકેશન હતી જે હવે DEXIS ની માલિકીની છે. એક સમયે સી. ડી. એલ. માં ડેન્ટલ ઓફિસ મેનેજમેન્ટ સિસ્ટમ પણ વિકસાવવામાં આવી હતી. મેફિસ્ટો III ચેસ કમ્પ્યુટર માટેનું સોફ્ટવેર સી. ડી. એલ. 2 સાથે લખવામાં આવ્યું હતું. સંદર્ભો વધુ વાંચન સી. ડી. એલ. 1/સી. ડી. એલ. 2 ભાષા વિશેનું એક પુસ્તક સી. ડી. એલ. 3નું વર્ણન બેડો અર્પાડઃ પ્રોગ્રામકેઝીટેસી મોડ્ઝેરેક; કોઝગાઝદાસાગી એઝ જોગી કોનિવકિયાડો, 1979. પાર્સર જનરેટર કમ્પાઇલર બાંધકામ ઔપચારિક ભાષાઓ કમ્પાઇલર સિદ્ધાંત