Lexer hack
ಕಂಪ್ಯೂಟರ್ ಪ್ರೋಗ್ರಾಮಿಂಗ್ನಲ್ಲಿ, ಲೆಕ್ಸರ್ ಹ್ಯಾಕ್ ಎಎನ್ಎಸ್ಐ ಸಿ ಅನ್ನು ಪಾರ್ಸ್ ಮಾಡುವಲ್ಲಿನ ಸಮಸ್ಯೆಗಳಿಗೆ ಸಾಮಾನ್ಯ ಪರಿಹಾರವಾಗಿದೆ, ಏಕೆಂದರೆ ಉಲ್ಲೇಖ ವ್ಯಾಕರಣವು ಸಂದರ್ಭ-ಸೂಕ್ಷ್ಮವಾಗಿರುತ್ತದೆ. ಸಿ ಯಲ್ಲಿ, ಅಕ್ಷರಗಳ ಅನುಕ್ರಮವನ್ನು ವೇರಿಯೇಬಲ್ ಹೆಸರು ಅಥವಾ ಪ್ರಕಾರದ ಹೆಸರು ಎಂದು ವರ್ಗೀಕರಿಸಲು ಪದಗುಚ್ಛದ ರಚನೆಯ ಸಂದರ್ಭೋಚಿತ ಮಾಹಿತಿಯ ಅಗತ್ಯವಿರುತ್ತದೆ, ಇದು ಸಂದರ್ಭ-ಮುಕ್ತ ಲೆಕ್ಸರ್ ಅನ್ನು ಹೊಂದಿರುವುದನ್ನು ತಡೆಯುತ್ತದೆ. ಸಮಸ್ಯೆಯೆಂದರೆ, ಈ ಕೆಳಗಿನ ಕೋಡ್ನಲ್ಲಿ, ಎ ನ ಲೆಕ್ಸಿಕಲ್ ವರ್ಗವನ್ನು ಹೆಚ್ಚಿನ ಸಂದರ್ಭೋಚಿತ ಮಾಹಿತಿಯಿಲ್ಲದೆ ನಿರ್ಧರಿಸಲಾಗುವುದಿಲ್ಲಃ (ಎ) * ಬಿ ಈ ಕೋಡ್ ಎರಡು ವೇರಿಯೇಬಲ್ಗಳ ಗುಣಾಕಾರವಾಗಿರಬಹುದು, ಈ ಸಂದರ್ಭದಲ್ಲಿ ಎ ವೇರಿಯೇಬಲ್ ಆಗಿದೆ; ನಿಸ್ಸಂದಿಗ್ಧವಾಗಿ ಬರೆಯಲಾಗಿದೆಃ ಎ * ಬಿ ಪರ್ಯಾಯವಾಗಿ, ಇದು ಬಿ ಯ ಉಲ್ಲೇಖವಿಲ್ಲದ ಮೌಲ್ಯವನ್ನು ಎ ಪ್ರಕಾರಕ್ಕೆ ಹಾಕಬಹುದು, ಈ ಸಂದರ್ಭದಲ್ಲಿ ಎ ಒಂದು ಟೈಪ್ಡೆಫ್ ಹೆಸರು; ನಿಸ್ಸಂದಿಗ್ಧವಾಗಿ ಬರೆಯಲಾಗಿದೆಃ (ಎ) (* ಬಿ) ಹೆಚ್ಚು ವಿವರವಾಗಿ, ಕಂಪೈಲರ್ನಲ್ಲಿ, ಲೆಕ್ಸರ್ ಮೂಲ ಕೋಡ್ ಅನ್ನು ಪ್ರೋಗ್ರಾಂಗೆ ಪರಿವರ್ತಿಸುವ ಆರಂಭಿಕ ಹಂತಗಳಲ್ಲಿ ಒಂದನ್ನು ನಿರ್ವಹಿಸುತ್ತದೆ. ಇದು ಪದಗಳು, ಸಂಖ್ಯೆಗಳು ಮತ್ತು ತಂತಿಗಳಂತಹ ಅರ್ಥಪೂರ್ಣ ಸಂಕೇತಗಳನ್ನು ಹೊರತೆಗೆಯಲು ಪಠ್ಯವನ್ನು ಸ್ಕ್ಯಾನ್ ಮಾಡುತ್ತದೆ. ಲೂಪ್ಗಳು ಮತ್ತು ವೇರಿಯೇಬಲ್ ಘೋಷಣೆಗಳಂತಹ ಭಾಷಾ ರಚನೆಗಳನ್ನು ಪ್ರತಿನಿಧಿಸುವ ವಾಕ್ಯರಚನೆಯ ನಿಯಮಗಳಿಗೆ ಹೊಂದಿಸಲು ಪ್ರಯತ್ನಿಸುವ ಟೋಕನ್ಗಳ ಅನುಕ್ರಮಗಳನ್ನು ಪಾರ್ಸರ್ ವಿಶ್ಲೇಷಿಸುತ್ತದೆ. ಟೋಕನ್ಗಳ ಒಂದು ಅನುಕ್ರಮವು ಒಂದಕ್ಕಿಂತ ಹೆಚ್ಚು ವಾಕ್ಯರಚನೆಯ ನಿಯಮಗಳಿಗೆ ಅಸ್ಪಷ್ಟವಾಗಿ ಹೊಂದಿಕೆಯಾದರೆ ಇಲ್ಲಿ ಸಮಸ್ಯೆ ಉಂಟಾಗುತ್ತದೆ. ಲೆಕ್ಸರ್ ವೇರಿಯೇಬಲ್ ಮತ್ತು ಟೈಪೆಡೆಫ್ ಗುರುತಿಸುವಿಕೆಗಳ ನಡುವೆ ವ್ಯತ್ಯಾಸವನ್ನು ತೋರಿಸದಿದ್ದರೆ ಈ ಅಸ್ಪಷ್ಟತೆಯು ಸಿ ಯಲ್ಲಿ ಸಂಭವಿಸಬಹುದು. ಉದಾಹರಣೆಗೆ, ಸಿ ಅಭಿವ್ಯಕ್ತಿಯಲ್ಲಿಃ (ಎ) * ಬಿ ಲೆಕ್ಸರ್ ಈ ಟೋಕನ್ಗಳನ್ನು ಕಂಡುಹಿಡಿಯಬಹುದುಃ ಎಡ ಆವರಣ ಗುರುತಿಸುವಿಕೆ 'ಎ' ಬಲ ಆವರಣ ನಿರ್ವಾಹಕ '*' ಗುರುತಿಸುವಿಕೆ 'ಬಿ' ಸಮಸ್ಯೆಯೆಂದರೆ ನಿಖರವಾಗಿ ಎ ನ ಲೆಕ್ಸಿಕಲ್ ವರ್ಗವನ್ನು ಹೆಚ್ಚಿನ ಸಂದರ್ಭವಿಲ್ಲದೆ ನಿರ್ಧರಿಸಲಾಗುವುದಿಲ್ಲಃ ಪಾರ್ಸರ್ ಇದನ್ನು ಎ ವೇರಿಯೇಬಲ್ ಅನ್ನು ಬಿ ಯಿಂದ ಗುಣಿಸಿದಾಗ ಅಥವಾ ಬಿ ನ ಉಲ್ಲೇಖಿತ ಮೌಲ್ಯವನ್ನು ಎ ಟೈಪ್ ಎಂದು ವ್ಯಾಖ್ಯಾನಿಸಬಹುದು. ಸಮಸ್ಯಾತ್ಮಕ ಉತ್ಪಾದನಾ ನಿಯಮದ ಹೆಸರಿನಿಂದಾಗಿ ಇದನ್ನು "ಟೈಪೆಡೆಫ್-ಹೆಸರುಃ ಗುರುತಿಸುವಿಕೆ" ಸಮಸ್ಯೆ ಎಂದು ಕರೆಯಲಾಗುತ್ತದೆ. ಹ್ಯಾಕ್ ಪರಿಹಾರವು ಸಾಮಾನ್ಯವಾಗಿ ಶಬ್ದಾರ್ಥದ ಸಂಕೇತ ಕೋಷ್ಟಕದಿಂದ ಮಾಹಿತಿಯನ್ನು ಲೆಕ್ಸರ್ಗೆ ಹಿಂತಿರುಗಿಸುವುದನ್ನು ಒಳಗೊಂಡಿರುತ್ತದೆ. ಅಂದರೆ, ಲೆಕ್ಸರ್ನಿಂದ ಪಾರ್ಸರ್ಗೆ ಶುದ್ಧ ಏಕಮುಖ ಪೈಪ್ಲೈನ್ ಆಗಿ ಕಾರ್ಯನಿರ್ವಹಿಸುವ ಬದಲು, ಶಬ್ದಾರ್ಥದ ವಿಶ್ಲೇಷಣೆಯಿಂದ ಲೆಕ್ಸರ್ಗೆ ಹಿಂಬದಿ ಮಾರ್ಗವಿದೆ. ಪಾರ್ಸಿಂಗ್ ಮತ್ತು ಶಬ್ದಾರ್ಥದ ವಿಶ್ಲೇಷಣೆಯ ಈ ಮಿಶ್ರಣವನ್ನು ಸಾಮಾನ್ಯವಾಗಿ ಅಸಂಬದ್ಧವೆಂದು ಪರಿಗಣಿಸಲಾಗುತ್ತದೆ, ಅದಕ್ಕಾಗಿಯೇ ಇದನ್ನು "ಹ್ಯಾಕ್" ಎಂದು ಕರೆಯಲಾಗುತ್ತದೆ. ಹೆಚ್ಚುವರಿ ಸಂದರ್ಭವಿಲ್ಲದೆ, ಲೆಕ್ಸರ್ ಪ್ರಕಾರದ ಗುರುತಿಸುವಿಕೆಗಳನ್ನು ಇತರ ಗುರುತಿಸುವಿಕೆಗಳಿಂದ ಪ್ರತ್ಯೇಕಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ ಏಕೆಂದರೆ ಎಲ್ಲಾ ಗುರುತಿಸುವಿಕೆಗಳು ಒಂದೇ ಸ್ವರೂಪವನ್ನು ಹೊಂದಿರುತ್ತವೆ. ಮೇಲಿನ ಉದಾಹರಣೆಯಲ್ಲಿರುವ ಹ್ಯಾಕ್ನೊಂದಿಗೆ, ಲೆಕ್ಸರ್ ಗುರುತಿಸುವ ಎ ಅನ್ನು ಕಂಡುಕೊಂಡಾಗ ಅದು ಟೋಕನ್ ಅನ್ನು ಟೈಪ್ ಗುರುತಿಸುವಿಕೆಯಾಗಿ ವರ್ಗೀಕರಿಸಲು ಸಾಧ್ಯವಾಗುತ್ತದೆ. ಟೈಪ್ಕಾಸ್ಟ್ಗಳಿಗೆ ಟೈಪ್ ಐಡೆಂಟಿಫೈಯರ್ ಅಗತ್ಯವಿರುತ್ತದೆ ಮತ್ತು ಅಸ್ಪಷ್ಟತೆ ಕಣ್ಮರೆಯಾಗುತ್ತದೆ ಎಂದು ನಿರ್ದಿಷ್ಟಪಡಿಸುವ ಮೂಲಕ ಭಾಷೆಯ ನಿಯಮಗಳನ್ನು ಸ್ಪಷ್ಟಪಡಿಸಲಾಗುತ್ತದೆ. ಈ ಸಮಸ್ಯೆಯು ಸಿ + + ನಲ್ಲಿಯೂ ಸಹ ಅಸ್ತಿತ್ವದಲ್ಲಿದೆ ಮತ್ತು ಪಾರ್ಸರ್ಗಳು ಅದೇ ಹ್ಯಾಕ್ ಅನ್ನು ಬಳಸಬಹುದು. ಪರ್ಯಾಯ ಪರಿಹಾರಗಳು ಲೆಕ್ಸರ್ಲೆಸ್ ಪಾರ್ಸಿಂಗ್ ತಂತ್ರಗಳನ್ನು ಬಳಸುವಾಗ ಈ ಸಮಸ್ಯೆಯು ಉದ್ಭವಿಸುವುದಿಲ್ಲ (ಮತ್ತು ಆದ್ದರಿಂದ ಪರಿಹರಿಸಲು ಯಾವುದೇ "ಹ್ಯಾಕ್" ಅಗತ್ಯವಿಲ್ಲ), ಏಕೆಂದರೆ ಇವು ಆಂತರಿಕವಾಗಿ ಸಂದರ್ಭೋಚಿತವಾಗಿವೆ. ಆದಾಗ್ಯೂ, ಇವುಗಳನ್ನು ಸಾಮಾನ್ಯವಾಗಿ ಕಡಿಮೆ ಸೊಗಸಾದ ವಿನ್ಯಾಸಗಳಾಗಿ ನೋಡಲಾಗುತ್ತದೆ, ಏಕೆಂದರೆ ಅವು ಪೈಪ್ಲೈನ್ನಲ್ಲಿ ಏಕಕಾಲೀನ ಲೆಕ್ಸರ್ ಮತ್ತು ಪಾರ್ಸರ್ ಅನ್ನು ಹೊಂದಿರುವ ಮಾಡ್ಯುಲಾರಿಟಿಯನ್ನು ಹೊಂದಿರುವುದಿಲ್ಲ. ಕೆಲವು ಪಾರ್ಸರ್ ಜನರೇಟರ್ಗಳು, ಉದಾಹರಣೆಗೆ ಬೈಆಕ್-ವ್ಯುತ್ಪನ್ನವಾದ ಬಿ. ಟಿ. ಯಾಕ್ ("ಬ್ಯಾಕ್ಟ್ರಾಕಿಂಗ್ ಯಾಕ್"), ಉತ್ಪತ್ತಿಯಾದ ಪಾರ್ಸರ್ಗೆ ಟೋಕನ್ಗಳನ್ನು ಪಾರ್ಸ್ ಮಾಡಲು ಅನೇಕ ಪ್ರಯತ್ನಗಳನ್ನು ಪ್ರಯತ್ನಿಸುವ ಸಾಮರ್ಥ್ಯವನ್ನು ನೀಡುತ್ತದೆ. ಇಲ್ಲಿ ವಿವರಿಸಿದ ಸಮಸ್ಯೆಯಲ್ಲಿ, ಗುರುತಿಸುವಿಕೆಯ ಬಗ್ಗೆ ಶಬ್ದಾರ್ಥದ ಮಾಹಿತಿಯ ಕಾರಣದಿಂದಾಗಿ ಒಂದು ಪ್ರಯತ್ನವು ವಿಫಲವಾದರೆ, ಅದು ಇತರ ನಿಯಮಗಳನ್ನು ಹಿಂಬಾಲಿಸಬಹುದು ಮತ್ತು ಪ್ರಯತ್ನಿಸಬಹುದು. ಕ್ಲಾಂಗ್ ಪಾರ್ಸರ್ ಪರಿಸ್ಥಿತಿಯನ್ನು ಸಂಪೂರ್ಣವಾಗಿ ವಿಭಿನ್ನ ರೀತಿಯಲ್ಲಿ ನಿಭಾಯಿಸುತ್ತದೆ, ಅವುಗಳೆಂದರೆ ಉಲ್ಲೇಖವಿಲ್ಲದ ಲೆಕ್ಸಿಕಲ್ ವ್ಯಾಕರಣವನ್ನು ಬಳಸುವುದು. ಕ್ಲಾಂಗ್ನ ಲೆಕ್ಸರ್ ಪ್ರಕಾರದ ಹೆಸರುಗಳು ಮತ್ತು ವೇರಿಯೇಬಲ್ ಹೆಸರುಗಳ ನಡುವೆ ವ್ಯತ್ಯಾಸವನ್ನು ಗುರುತಿಸಲು ಪ್ರಯತ್ನಿಸುವುದಿಲ್ಲಃ ಇದು ಪ್ರಸ್ತುತ ಟೋಕನ್ ಅನ್ನು ಗುರುತಿಸುವಿಕೆಯಾಗಿ ವರದಿ ಮಾಡುತ್ತದೆ. ಪಾರ್ಸರ್ ನಂತರ ಗುರುತಿಸುವಿಕೆಯ ಸ್ವರೂಪವನ್ನು ನಿರ್ಧರಿಸಲು ಕ್ಲಾಂಗ್ನ ಶಬ್ದಾರ್ಥದ ವಿಶ್ಲೇಷಣೆಯ ಗ್ರಂಥಾಲಯವನ್ನು ಬಳಸುತ್ತದೆ. ಇದು ಕಳವಳಗಳನ್ನು ಹೆಚ್ಚು ಸ್ವಚ್ಛವಾಗಿ ಬೇರ್ಪಡಿಸಲು ಮತ್ತು ಲೆಕ್ಸರ್ ಮತ್ತು ಪಾರ್ಸರ್ನ ಎನ್ಕ್ಯಾಪ್ಸುಲೇಷನ್ಗೆ ಅನುವು ಮಾಡಿಕೊಡುತ್ತದೆ ಮತ್ತು ಆದ್ದರಿಂದ ಕೆಲವು ಕಂಪೈಲರ್ ಡೆವಲಪರ್ಗಳು ಇದನ್ನು ದಿ ಲೆಕ್ಸರ್ ಹ್ಯಾಕ್ಗಿಂತ ಹೆಚ್ಚು ಸೊಗಸಾದ ಪರಿಹಾರವೆಂದು ಪರಿಗಣಿಸುತ್ತಾರೆ. ಇದು ಇತರ ಆಧುನಿಕ ಭಾಷೆಗಳಲ್ಲಿ ಬಳಸುವ ವಿಧಾನವಾಗಿದೆ, ಇದು ಲೆಕ್ಸಿಕಲ್ ವ್ಯಾಕರಣದಲ್ಲಿ ವಿವಿಧ ವರ್ಗದ ಗುರುತಿಸುವಿಕೆಗಳನ್ನು ಪ್ರತ್ಯೇಕಿಸುವುದಿಲ್ಲ, ಬದಲಿಗೆ ಸಾಕಷ್ಟು ಮಾಹಿತಿಯು ಲಭ್ಯವಿರುವಾಗ ಅವುಗಳನ್ನು ಪಾರ್ಸಿಂಗ್ ಅಥವಾ ಶಬ್ದಾರ್ಥದ ವಿಶ್ಲೇಷಣೆಯ ಹಂತಕ್ಕೆ ಮುಂದೂಡುತ್ತದೆ. ಡಾಂಗ್ಲಿಂಗ್ ಎಲ್ಸ್ ಉಲ್ಲೇಖಗಳ ಉಲ್ಲೇಖಗಳನ್ನು ಸಹ ನೋಡಿ 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 ಸಿ (ಪ್ರೋಗ್ರಾಮಿಂಗ್ ಭಾಷೆ) ಸಿ + + ಪಾರ್ಸಿಂಗ್ ಲೇಖನಗಳು ಉದಾಹರಣೆ ಸಿ ಕೋಡ್