Lexer hack
કોમ્પ્યુટર પ્રોગ્રામિંગમાં, સંદર્ભ વ્યાકરણ સંદર્ભ-સંવેદનશીલ હોવાને કારણે, લેક્સર હેક એ એ. એન. એસ. આઈ. સી. ને પદચ્છેદન કરવાની સમસ્યાઓનો એક સામાન્ય ઉકેલ છે. સી માં, અક્ષરોના ક્રમને ચલ નામ અથવા પ્રકાર નામ તરીકે વર્ગીકૃત કરવા માટે શબ્દસમૂહની રચનાની સંદર્ભિત માહિતીની જરૂર પડે છે, જે વ્યક્તિને સંદર્ભ-મુક્ત લેક્સર રાખવાથી અટકાવે છે. સમસ્યા એ છે કે નીચેના કોડમાં, A નો લેક્સિકલ વર્ગ વધુ સંદર્ભિત માહિતી વિના નક્કી કરી શકાતો નથીઃ (A) * B આ કોડ બે ચલોનો ગુણાકાર હોઈ શકે છે, જે કિસ્સામાં A એક ચલ છે; સ્પષ્ટ રીતે લખાયેલું છેઃ A * B વૈકલ્પિક રીતે, તે B ના સંદર્ભિત મૂલ્યને પ્રકાર A માં કાસ્ટ કરી શકે છે, જે કિસ્સામાં A એ ટાઇપડેફ નામ છે; સ્પષ્ટ રીતે લખાયેલું છેઃ (A) (* B) વધુ વિગતવાર, કમ્પાઇલરમાં, લેક્સર સ્રોત કોડને પ્રોગ્રામમાં રૂપાંતરિત કરવાના પ્રારંભિક તબક્કાઓમાંથી એક કરે છે. તે શબ્દો, સંખ્યાઓ અને શબ્દમાળાઓ જેવા અર્થપૂર્ણ સંકેતો બહાર કાઢવા માટે લખાણને સ્કેન કરે છે. પાર્સર ટોકન્સના ક્રમોનું વિશ્લેષણ કરે છે જે તેમને ભાષાની રચનાઓનું પ્રતિનિધિત્વ કરતા વાક્યરચના નિયમો સાથે મેળ કરવાનો પ્રયાસ કરે છે, જેમ કે લૂપ્સ અને ચલ ઘોષણાઓ. જો ટોકનનો એક જ ક્રમ અસ્પષ્ટ રીતે એક કરતાં વધુ વાક્યરચના નિયમ સાથે મેળ ખાય તો અહીં સમસ્યા ઊભી થાય છે. જો લેક્સર ચલ અને ટાઇપડેફ ઓળખકર્તાઓ વચ્ચે તફાવત ન કરે તો આ અસ્પષ્ટતા સીમાં થઈ શકે છે. ઉદાહરણ તરીકે, C અભિવ્યક્તિમાંઃ (A) * B લેક્સરને આ ટોકન્સ મળી શકે છેઃ ડાબી કૌંસ ઓળખકર્તા 'A' જમણી કૌંસ સંચાલક '*' ઓળખકર્તા 'B' સમસ્યા ચોક્કસપણે એ છે કે A નો લેક્સિકલ વર્ગ વધુ સંદર્ભ વિના નક્કી કરી શકાતો નથીઃ પાર્સર આને ચલ A ને B દ્વારા ગુણાકાર તરીકે અથવા પ્રકાર A તરીકે અર્થઘટન કરી શકે છે જે B ના સંદર્ભિત મૂલ્યને કાસ્ટ કરે છે. સમસ્યાવાળા ઉત્પાદન નિયમના નામને કારણે આને "ટાઈપડેફ-નામ-ઓળખકર્તા" સમસ્યા તરીકે ઓળખવામાં આવે છે. હેક સોલ્યુશન સોલ્યુશનમાં સામાન્ય રીતે સિમેન્ટીક સિમ્બોલ કોષ્ટકમાંથી માહિતીને લેક્સરમાં પાછા આપવાનો સમાવેશ થાય છે. એટલે કે, લેક્સરથી પાર્સર સુધી શુદ્ધ વન-વે પાઇપલાઇન તરીકે કામ કરવાને બદલે, સિમેન્ટીક એનાલિસિસથી લેક્સર સુધી બેક ચેનલ છે. પદચ્છેદન અને સિમેન્ટીક વિશ્લેષણનું આ મિશ્રણ સામાન્ય રીતે અયોગ્ય માનવામાં આવે છે, તેથી જ તેને "હેક" કહેવામાં આવે છે. વધારાના સંદર્ભ વિના, લેક્સર પ્રકાર ઓળખકર્તાઓને અન્ય ઓળખકર્તાઓથી અલગ કરી શકતું નથી કારણ કે તમામ ઓળખકર્તાઓનું બંધારણ સમાન હોય છે. ઉપરોક્ત ઉદાહરણમાં હેક સાથે, જ્યારે લેક્સરને ઓળખકર્તા A મળે છે ત્યારે તે ટોકનને પ્રકાર ઓળખકર્તા તરીકે વર્ગીકૃત કરવામાં સક્ષમ હોવું જોઈએ. ટાઇપકાસ્ટને પ્રકાર ઓળખકર્તાની જરૂર છે અને અસ્પષ્ટતા અદૃશ્ય થઈ જાય છે તે સ્પષ્ટ કરીને ભાષાના નિયમો સ્પષ્ટ કરવામાં આવશે. આ સમસ્યા સી + + માં પણ અસ્તિત્વમાં છે અને પાર્સર્સ એ જ હેકનો ઉપયોગ કરી શકે છે. વૈકલ્પિક ઉકેલો લેક્સેરલેસ પદચ્છેદન તકનીકોનો ઉપયોગ કરતી વખતે આ સમસ્યા ઊભી થતી નથી (અને તેથી તેને ઉકેલવા માટે કોઈ "હેક" ની જરૂર નથી), કારણ કે આ આંતરિક રીતે સંદર્ભિત છે. જો કે, આને સામાન્ય રીતે ઓછી ભવ્ય ડિઝાઇન તરીકે જોવામાં આવે છે, કારણ કે તેમાં પાઇપલાઇનમાં સહવર્તી લેક્સર અને પાર્સરની મોડ્યુલરિટીનો અભાવ હોય છે. કેટલાક પાર્સર જનરેટર, જેમ કે બાયએક-વ્યુત્પન્ન બી. ટી. વાય. એ. સી. ("બેકટ્રેકિંગ યાએક"), પેદા થયેલા પાર્સરને ટોકન્સનું વિશ્લેષણ કરવા માટે બહુવિધ પ્રયાસોનો પ્રયાસ કરવાની ક્ષમતા આપે છે. અહીં વર્ણવેલ સમસ્યામાં, જો ઓળખકર્તા વિશેની અર્થપૂર્ણ માહિતીને કારણે કોઈ પ્રયાસ નિષ્ફળ જાય, તો તે અન્ય નિયમોનો પ્રયાસ કરી શકે છે. ક્લાંગ પાર્સર પરિસ્થિતિને સંપૂર્ણપણે અલગ રીતે સંભાળે છે, એટલે કે બિન-સંદર્ભ લેક્સિકલ વ્યાકરણનો ઉપયોગ કરીને. ક્લાંગનું લેક્સર પ્રકારનાં નામો અને ચલ નામો વચ્ચે તફાવત કરવાનો પ્રયાસ કરતું નથીઃ તે ફક્ત વર્તમાન ટોકનને ઓળખકર્તા તરીકે અહેવાલ આપે છે. પાર્સર પછી ઓળખકર્તાની પ્રકૃતિ નક્કી કરવા માટે ક્લાંગની સિમેન્ટીક એનાલિસિસ લાઇબ્રેરીનો ઉપયોગ કરે છે. આ ચિંતાઓને વધુ સ્વચ્છ રીતે અલગ કરવાની અને લેક્સર અને પાર્સરને સમાવિષ્ટ કરવાની મંજૂરી આપે છે, અને તેથી કેટલાક કમ્પાઇલર વિકાસકર્તાઓ દ્વારા તેને લેક્સર હેક કરતાં વધુ ભવ્ય ઉકેલ માનવામાં આવે છે. મોટાભાગની અન્ય આધુનિક ભાષાઓમાં પણ આ અભિગમનો ઉપયોગ થાય છે, જે લેક્સિકલ વ્યાકરણમાં ઓળખકર્તાઓના વિવિધ વર્ગોને અલગ પાડતા નથી, પરંતુ જ્યારે પૂરતી માહિતી ઉપલબ્ધ હોય ત્યારે તેમને પદચ્છેદન અથવા સિમેન્ટીક વિશ્લેષણ તબક્કા સુધી મોકૂફ રાખે છે. ડેંગલિંગ એલ્સ સંદર્ભો સંદર્ભો http://www.cs.berkeley.edu ~ smcpeak/elkhound/સ્ત્રોતો/elkhound/અનુક્રમણિકા. એચ. ટી. એમ. એલ. http://cs.nyu.edu/rgrimm/papers/pldi06.pdf http://cens.ioc.ee/local/man/CompaqCompilers/ladebug/ladebug-manual-details.html DOI.org http://groups.google.com/group/comp.compilers/browse_frm/thread/db7f68e9d8b49002/fa20bf5de9c73472?lnk=st&q=%2B%22the + lexer + hack% 22 & rnum = 1 & હ૆ચ્. એલ. = en#fa20bf5de9c73472 સી (પ્રોગ્રામિંગ ભાષા) સી + + પાર્સિંગ ઉદાહરણ સી કોડ સાથેના લેખો