आइए एक लेक्सिकल एनालाइज़र का काम देखें (जिसे स्कैनर भी कहा जाता है)
चलो एक उदाहरण अभिव्यक्ति लेते हैं:
INPUT : cout << 3+2+3;
FORMATTING PERFORMED BY SCANNER : {cout}|space|{<<}|space|{3}{+}{2}{+}{3}{;}
हालांकि वास्तविक उत्पादन नहीं।
स्केनर SIMPLY लुक्स की पुनरावृत्ति के लिए दोहराए गए एक कार्यक्रम में स्पष्ट रूप से UNTIL में प्रवेश किया गया है
लेक्मे इनपुट का एक विकल्प है जो व्याकरण में मौजूद एक वैध स्ट्रिंग-ऑफ-टर्मिनल बनाता है। प्रत्येक लेक्समे एक पैटर्न का अनुसरण करता है जिसे अंत में समझाया गया है (वह भाग जो पाठक अंत में छोड़ सकता है)
(महत्वपूर्ण नियम सबसे लंबे समय तक संभव उपसर्ग के लिए एक वैध स्ट्रिंग-ऑफ-टर्मिनल बनाने के लिए देखना है, जब तक कि अगले व्हाट्सएप का सामना नहीं किया जाए ...)
लेक्समेस:
- अदालत
- <<
(हालांकि "<" भी वैध टर्मिनल-स्ट्रिंग है, लेकिन उपर्युक्त नियम लेक्सेम "<<" के लिए पैटर्न का चयन करेगा ताकि स्कैनर द्वारा लौटाए गए टोकन उत्पन्न हो सकें)
- 3
- +
- 2
- ;
टोकन: टोकन एक बार (पार्सर द्वारा अनुरोध किए जाने पर स्कैनर द्वारा) लौटाए जाते हैं, हर बार स्कैनर एक (वैध) लेक्सेम पाता है। स्कैनर बनाता है, अगर पहले से मौजूद नहीं है, तो एक प्रतीक-तालिका प्रविष्टि (जिसमें विशेषता है: मुख्य रूप से टोकन-श्रेणी और कुछ अन्य) , जब यह एक लेक्सेम पाता है, तो यह टोकन उत्पन्न करने के लिए।
'#' एक प्रतीक तालिका प्रविष्टि को दर्शाता है। मैंने समझने में आसानी के लिए उपरोक्त सूची में संख्या को इंगित करने के लिए इंगित किया है, लेकिन यह तकनीकी रूप से प्रतीक तालिका में रिकॉर्ड का वास्तविक सूचकांक होना चाहिए।
उपरोक्त उदाहरण के लिए निर्दिष्ट क्रम में पार्सर को स्कैनर द्वारा निम्नलिखित टोकन लौटा दिए गए हैं।
<पहचानकर्ता, # 1>
<ऑपरेटर, # 2>
<साक्षर, # ३>
<ऑपरेटर, # 4>
<साक्षर, # ५>
<ऑपरेटर, # 4>
<साक्षर, # ३>
<पंचक, # ६>
जैसा कि आप अंतर देख सकते हैं, एक टोकन लेक्सेम के विपरीत एक जोड़ी है जो इनपुट का एक विकल्प है।
और जोड़ी का पहला तत्व टोकन-वर्ग / श्रेणी है
टोकन क्लासेस नीचे सूचीबद्ध हैं:
कीवर्ड
पहचानकर्ता
शाब्दिक
PUNCTUATORS
ऑपरेटरों
और एक और बात, स्कैनर व्हॉट्सएप का पता लगाता है, उन्हें अनदेखा करता है और व्हाट्सएप के लिए कोई टोकन नहीं बनाता है। सभी सीमांकक व्हॉट्सएप नहीं हैं, व्हाट्सएप एक प्रकार का सीमांकक है जिसका इस्तेमाल स्कैनर द्वारा उद्देश्य के लिए किया जाता है। टैब, न्यूलाइन, स्पेस, इनपुट में बच गए वर्ण सभी को सामूहिक रूप से व्हॉट्सएप डेलिमिटर कहा जाता है। कुछ अन्य सीमांकक हैं; ') ',' ':' आदि, जिन्हें व्यापक रूप से टोकन के रूप में मान्यता प्राप्त है।
लौटे हुए टोकन की कुल संख्या यहाँ 8 है, हालाँकि केवल 6 प्रतीक तालिका प्रविष्टियाँ लेक्सेम के लिए बनाई गई हैं। लेक्सेम्स भी कुल 8 हैं (लेक्सेम की परिभाषा देखें)
--- आप इस हिस्से को छोड़ सकते हैं
A ***pattern*** is a rule ( say, a regular expression ) that is used to check if a string-of-terminals is valid or not
।
If a substring of input composed only of grammar terminals is
following the rule specified by any of the listed patterns , it is
validated as a lexeme and selected pattern will identify the category
of lexeme, else a lexical error is reported due to either (i) not
following any of the rules or (ii) input consists of a bad
terminal-character not present in grammar itself.
for example :
1. No Pattern Exists : In C++ , "99Id_Var" is grammar-supported string-of-terminals but is not recognised by any of patterns hence lexical error is reported .
2. Bad Input Character : $,@,unicode characters may not be supported as a valid character in few programming languages.`