टोकन और लेक्सेम के बीच अंतर क्या है?


86

अहो उल्मान और सेठी द्वारा कम्पाइलर निर्माण में, यह दिया जाता है कि स्रोत कार्यक्रम के पात्रों के इनपुट स्ट्रिंग को उन वर्णों के अनुक्रम में विभाजित किया जाता है जिनका तार्किक अर्थ होता है, और जिन्हें टोकन और लेक्सेम के रूप में जाना जाता है, वे अनुक्रम होते हैं जो टोकन बनाते हैं। बुनियादी अंतर है?

जवाबों:


118

का उपयोग करना " संकलनकर्ता सिद्धांतों, तकनीक, और उपकरण, 2 एड। " (WorldCat) Aho, लाम, सेठी और उलमान, उर्फ द्वारा बैंगनी ड्रैगन बुक ,

लेक्सम पीजी। 111

एक लेक्सेम स्रोत प्रोग्राम के पात्रों का एक क्रम है जो एक टोकन के लिए पैटर्न से मेल खाता है और उस टोकन के उदाहरण के रूप में लेक्सिकल विश्लेषक द्वारा पहचाना जाता है।

टोकन पीजी। 111

एक टोकन एक जोड़ी है जिसमें एक टोकन नाम और एक वैकल्पिक विशेषता मान होता है। टोकन नाम एक अमूर्त प्रतीक है जो एक प्रकार की शाब्दिक इकाई का प्रतिनिधित्व करता है, उदाहरण के लिए, एक विशेष कीवर्ड या एक पहचानकर्ता को दर्शाते हुए इनपुट वर्णों का अनुक्रम। टोकन नाम इनपुट प्रतीक हैं जो पार्सर प्रक्रिया करते हैं।

पैटर्न पीजी। 111

एक पैटर्न उस रूप का विवरण है जो एक टोकन के लेक्सेस को लग सकता है। किसी कीवर्ड के टोकन के रूप में, पैटर्न सिर्फ अक्षरों का क्रम है जो कीवर्ड बनाते हैं। पहचानकर्ताओं और कुछ अन्य टोकन के लिए, पैटर्न अधिक जटिल संरचना है जो कई तारों द्वारा मेल खाता है।

चित्र 3.2: उदाहरण टोकनों pg.112

[Token]       [Informal Description]                  [Sample Lexemes]
if            characters i, f                         if
else          characters e, l, s, e                   else
comparison    < or > or <= or >= or == or !=          <=, !=
id            letter followed by letters and digits   pi, score, D2
number        any numeric constant                    3.14159, 0, 6.02e23
literal       anything but ", surrounded by "'s       "core dumped"

एक लेसर और पार्सर के इस संबंध को बेहतर ढंग से समझने के लिए हम पार्सर से शुरू करेंगे और इनपुट पर पीछे की ओर काम करेंगे।

एक पार्सर डिजाइन करना आसान बनाने के लिए, एक पार्सर सीधे इनपुट के साथ काम नहीं करता है, लेकिन एक लेसर द्वारा उत्पन्न टोकन की सूची में ले जाता है। चित्रा 3.2 में टोकन स्तंभ हम देखते हैं को देखते हुए टोकन के रूप में इस तरह के if, else, comparison, id, numberऔर literal; ये टोकन के नाम हैं। आमतौर पर एक लेसर / पार्सर के साथ एक टोकन एक संरचना होती है जो न केवल टोकन का नाम रखती है, बल्कि उन पात्रों / प्रतीकों को बनाती है जो टोकन बनाते हैं और टोकन बनाने वाले पात्रों की स्ट्रिंग की शुरुआत और अंत की स्थिति त्रुटि रिपोर्टिंग, हाइलाइटिंग इत्यादि के लिए प्रारंभ और अंत स्थिति का उपयोग किया जा रहा है।

अब लेक्सर वर्णों / प्रतीकों का इनपुट लेता है और लेसर के नियमों का उपयोग करके इनपुट वर्णों / प्रतीकों को टोकन में परिवर्तित करता है। अब जो लोग lexer / parser के साथ काम करते हैं, उनके पास उन चीजों के लिए अपने शब्द होते हैं जिनका वे अक्सर उपयोग करते हैं। जो आप वर्ण / प्रतीकों के अनुक्रम के रूप में सोचते हैं, जो एक टोकन बनाते हैं, वे लोग हैं जो लेक्सर / पार्सर का उपयोग करते हैं, लेक्सेम कहते हैं। इसलिए जब आप लेक्सेम देखते हैं, तो एक टोकन का प्रतिनिधित्व करने वाले पात्रों / प्रतीकों के अनुक्रम के बारे में सोचें। तुलना उदाहरण में, वर्णों के अनुक्रम / प्रतीकों जैसे विभिन्न पैटर्न हो सकता है <या >या elseया 3.14, आदि

दोनों के बीच संबंध के बारे में सोचने का एक और तरीका यह है कि एक टोकन एक प्रोग्रामिंग संरचना है जिसका उपयोग पार्सर द्वारा किया जाता है जिसमें एक संपत्ति होती है जिसे lexeme कहा जाता है जो इनपुट से वर्ण / प्रतीक रखता है। अब यदि आप कोड की अधिकांश परिभाषाओं को देखते हैं तो आप लेक्सेम को टोकन के गुणों में से एक के रूप में नहीं देख सकते हैं। ऐसा इसलिए है क्योंकि एक टोकन अधिक संभावित रूप से उन पात्रों / प्रतीकों की शुरुआत और अंत स्थिति को धारण करेगा जो टोकन और लेक्मे का प्रतिनिधित्व करते हैं, वर्णों / प्रतीकों का अनुक्रम आवश्यकतानुसार प्रारंभ और अंत स्थिति से लिया जा सकता है क्योंकि इनपुट स्थिर है।


12
बोलचाल के कंपाइलर उपयोग में, लोग दो शब्दों का परस्पर उपयोग करते हैं। सटीक अंतर अच्छा है, अगर और जब आपको इसकी आवश्यकता होती है।
इरा बाक्सटर

जबकि विशुद्ध रूप से कंप्यूटर विज्ञान की परिभाषा नहीं है, यहां प्राकृतिक भाषा प्रसंस्करण से एक है जो कि परिचय से प्रासंगिक है शब्दार्थ विज्ञानan individual entry in the lexicon
लड़के कोडर

बिल्कुल स्पष्ट व्याख्या। इस तरह स्वर्ग में चीजों को समझाया जाना चाहिए।
तैमूर फैज्रखमानोव

महान व्याख्या। मुझे एक और संदेह है, मैंने पार्सिंग चरण के बारे में भी पढ़ा है, पार्सर लेक्सिकल विश्लेषक से टोकन मांगता है, क्योंकि पार्सर टोकन को मान्य नहीं कर सकता है। क्या आप पार्सर चरण में सरल इनपुट ले कर समझा सकते हैं और जब पार्सर लेक्सर से टोकन मांगता है।
प्रसन्ना सासने

@PrasannaSasne can you please explain by taking simple input at parser stage and when does parser asks for tokens from lexer.SO एक चर्चा स्थल नहीं है। यह एक नया प्रश्न है और इसे एक नए प्रश्न के रूप में पूछा जाना चाहिए।
गाइ कोडर

36

जब एक स्रोत कार्यक्रम को लेक्सिकल एनालाइज़र में खिलाया जाता है, तो यह अक्षरों को लेक्मेम्स के अनुक्रम में तोड़कर शुरू होता है। तब लेक्सेम का उपयोग टोकन के निर्माण में किया जाता है, जिसमें लेक्सम को टोकन में मैप किया जाता है। MyVar नामक एक वैरिएबल को < id , "num"> में एक टोकन मैप किया जाएगा , जहाँ "num" को प्रतीक तालिका में परिवर्तनशील स्थान पर इंगित करना चाहिए।

कुछ ही समय में:

  • लेक्मेम्स चरित्र इनपुट स्ट्रीम से निकले शब्द हैं।
  • टोकन एक नाम और एक विशेषता-मूल्य में मैप किए गए लेक्सेम हैं।


एक उदाहरण में शामिल हैं:
x = a + b * 2
जो लेक्समेस की पैदावार करता है: {x, =, a, +, b, *, 2}
इसी टोकन के साथ: {< id , 0>, <=>, < id , 1 >, <+>, < आईडी , 2>, <*>, < आईडी , 3>}


2
क्या इसे माना जाना चाहिए <id, 3>? क्योंकि 2 एक पहचानकर्ता नहीं है
आदित्य

लेकिन यह कहाँ कहता है कि x एक पहचानकर्ता है? क्या इसका मतलब यह है कि एक प्रतीक तालिका एक 3 स्तंभ तालिका है, जिसका नाम 'x', 'प्रकार' = 'पहचानकर्ता (आईडी)', सूचक = '0' एक विशेष प्रविष्टि के रूप में है? तो इसमें 'नाम' जैसी कुछ अन्य प्रविष्टि होनी चाहिए? = जबकि, 'टाइप' = 'कीवर्ड', पॉइंटर = '21 '??

8

क) कार्यक्रम का पाठ बनाने वाली संस्थाओं के लिए प्रतीक प्रतीकात्मक नाम हैं; जैसे कि यदि कीवर्ड के लिए यदि है, और किसी भी पहचानकर्ता के लिए आईडी है। ये लेक्सिकल एनालाइजर का आउटपुट बनाते हैं। 5

(बी) एक पैटर्न एक नियम है जो निर्दिष्ट करता है जब इनपुट से वर्णों का अनुक्रम टोकन का गठन करता है; उदाहरण के लिए, अगर मैं टोकन के लिए च, और किसी भी अल्फ़ान्यूमेरिक्स के अनुक्रम के लिए टोकन आईडी के लिए एक पत्र के साथ शुरू होता है।

(c) एक लेक्मे इनपुट से वर्णों का एक क्रम है जो एक पैटर्न से मेल खाता है (और इसलिए एक टोकन का एक उदाहरण बनता है); उदाहरण के लिए यदि इफ के लिए पैटर्न से मेल खाता है, और foo123bar आईडी के लिए पैटर्न से मेल खाता है।


8

लेक्मे - पाटन द्वारा मिलान किए गए पात्रों का अनुक्रम

पैटर्न - नियम का एक सेट जो एक टोकन को परिभाषित करता है

TOKEN - प्रोग्रामिंग भाषा के चरित्र सेट पर वर्णों का सार्थक संग्रह उदा: ID, कॉन्स्टेंट, कीवर्ड, ऑपरेटर, विराम चिह्न, शाब्दिक स्ट्रिंग


7

लेक्सेम - एक लेक्सम स्रोत प्रोग्राम के पात्रों का एक क्रम है जो एक टोकन के लिए पैटर्न से मेल खाता है और उस टोकन के उदाहरण के रूप में लेक्सिकल विश्लेषक द्वारा पहचाना जाता है।

टोकन - टोकन एक जोड़ी है जिसमें एक टोकन नाम और एक वैकल्पिक टोकन मूल्य होता है। टोकन नाम एक शाब्दिक इकाई की एक श्रेणी है। कोमोन टोकन नाम हैं

  • पहचानकर्ता: प्रोग्रामर का नाम चुनता है
  • कीवर्ड: प्रोग्रामिंग भाषा में पहले से ही नाम
  • विभाजक (जिन्हें पंक्चुएटर्स के रूप में भी जाना जाता है): विराम चिह्न वर्ण और युग्मित-सीमांकक
  • ऑपरेटर: प्रतीक जो तर्कों पर काम करते हैं और परिणाम उत्पन्न करते हैं
  • शाब्दिक: संख्यात्मक, तार्किक, शाब्दिक, संदर्भ शाब्दिक

प्रोग्रामिंग भाषा C में इस अभिव्यक्ति पर विचार करें:

sum = 3 + 2;

निम्नांकित सारणी द्वारा टोकन और प्रतिनिधित्व:

 Lexeme        Token category
------------------------------
sum      |    Identifier
 =       |    Assignment operator
 3       |    Integer literal
 +       |    Addition operator
 2       |    Integer literal
 ;       |    End of statement

5

आइए एक लेक्सिकल एनालाइज़र का काम देखें (जिसे स्कैनर भी कहा जाता है)

चलो एक उदाहरण अभिव्यक्ति लेते हैं:

INPUT : cout << 3+2+3;

FORMATTING PERFORMED BY SCANNER :  {cout}|space|{<<}|space|{3}{+}{2}{+}{3}{;} 

हालांकि वास्तविक उत्पादन नहीं।

स्केनर SIMPLY लुक्स की पुनरावृत्ति के लिए दोहराए गए एक कार्यक्रम में स्पष्ट रूप से UNTIL में प्रवेश किया गया है

लेक्मे इनपुट का एक विकल्प है जो व्याकरण में मौजूद एक वैध स्ट्रिंग-ऑफ-टर्मिनल बनाता है। प्रत्येक लेक्समे एक पैटर्न का अनुसरण करता है जिसे अंत में समझाया गया है (वह भाग जो पाठक अंत में छोड़ सकता है)

(महत्वपूर्ण नियम सबसे लंबे समय तक संभव उपसर्ग के लिए एक वैध स्ट्रिंग-ऑफ-टर्मिनल बनाने के लिए देखना है, जब तक कि अगले व्हाट्सएप का सामना नहीं किया जाए ...)

लेक्समेस:

  1. अदालत
  2. <<

(हालांकि "<" भी वैध टर्मिनल-स्ट्रिंग है, लेकिन उपर्युक्त नियम लेक्सेम "<<" के लिए पैटर्न का चयन करेगा ताकि स्कैनर द्वारा लौटाए गए टोकन उत्पन्न हो सकें)

  1. 3
  2. +
  3. 2
  4. ;

टोकन: टोकन एक बार (पार्सर द्वारा अनुरोध किए जाने पर स्कैनर द्वारा) लौटाए जाते हैं, हर बार स्कैनर एक (वैध) लेक्सेम पाता है। स्कैनर बनाता है, अगर पहले से मौजूद नहीं है, तो एक प्रतीक-तालिका प्रविष्टि (जिसमें विशेषता है: मुख्य रूप से टोकन-श्रेणी और कुछ अन्य) , जब यह एक लेक्सेम पाता है, तो यह टोकन उत्पन्न करने के लिए।

'#' एक प्रतीक तालिका प्रविष्टि को दर्शाता है। मैंने समझने में आसानी के लिए उपरोक्त सूची में संख्या को इंगित करने के लिए इंगित किया है, लेकिन यह तकनीकी रूप से प्रतीक तालिका में रिकॉर्ड का वास्तविक सूचकांक होना चाहिए।

उपरोक्त उदाहरण के लिए निर्दिष्ट क्रम में पार्सर को स्कैनर द्वारा निम्नलिखित टोकन लौटा दिए गए हैं।

  1. <पहचानकर्ता, # 1>

  2. <ऑपरेटर, # 2>

  3. <साक्षर, # ३>

  4. <ऑपरेटर, # 4>

  5. <साक्षर, # ५>

  6. <ऑपरेटर, # 4>

  7. <साक्षर, # ३>

  8. <पंचक, # ६>

जैसा कि आप अंतर देख सकते हैं, एक टोकन लेक्सेम के विपरीत एक जोड़ी है जो इनपुट का एक विकल्प है।

और जोड़ी का पहला तत्व टोकन-वर्ग / श्रेणी है

टोकन क्लासेस नीचे सूचीबद्ध हैं:

  • कीवर्ड
  • पहचानकर्ता
  • शाब्दिक
  • 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.`
    

    5

    लेक्समे - एक लेक्समे चरित्र की एक स्ट्रिंग है जो प्रोग्रामिंग भाषा में सबसे निचली स्तर की सिंटैक्टिक इकाई है।

    टोकन - टोकन एक श्रेणीबद्ध श्रेणी है जो लेक्सेम का एक वर्ग बनाता है, जिसका अर्थ है कि लेक्सम किस वर्ग का है यह एक कीवर्ड या पहचानकर्ता या कुछ और है। लेक्सिकल एनालाइज़र का एक प्रमुख काम लेक्समेस और टोकन की एक जोड़ी बनाना है, जो सभी पात्रों को इकट्ठा करना है।

    एक उदाहरण लेते हैं:-

    अगर (y <= t)

    y = y-3;

    लेक्मेम टोकन

    अगर KEYWORD

    (बाएं पैरेंटिस

    y IDENTIFIER

    <= COMPARISON

    टी IDENTIFIER

    ) राइट पैरेन्थिस

    y IDENTIFIER

    = सहायता

    y IDENTIFIER

    _ ARITHMATIC

    3 इंटीजर

    ;                                    SEMICOLON

    लेक्मे और टोकन के बीच संबंध

    लेक्सेम और टोकन के बीच संबंध


    4

    टोकन: कीवर्ड, पहचानकर्ता, विराम चिह्न वर्ण, मल्टी-कैरेक्टर ऑपरेटर) के लिए प्रकार, बस, एक टोकन।

    पैटर्न: इनपुट वर्णों से टोकन बनाने का नियम।

    लेक्सम: इसके SOURCE PROGRAM में पात्रों का एक क्रम एक टोकन के लिए एक पैटर्न से मेल खाता है। असल में, टोकन का एक तत्व है।


    3

    टोकन: टोकन पात्रों का एक अनुक्रम है जिसे एकल तार्किक इकाई के रूप में माना जा सकता है। विशिष्ट टोकन हैं,
    1) पहचानकर्ता
    2) कीवर्ड
    3) ऑपरेटर
    4) विशेष प्रतीक
    5) स्थिरांक

    पैटर्न: इनपुट में स्ट्रिंग्स का एक सेट जिसके लिए आउटपुट के रूप में एक ही टोकन का उत्पादन किया जाता है। स्ट्रिंग्स के इस सेट को एक नियम द्वारा वर्णित किया गया है जिसे टोकन से जुड़ा एक पैटर्न कहा जाता है।
    लेक्सेम: एक लेक्सेम स्रोत कार्यक्रम के पात्रों का एक क्रम है जो एक टोकन के लिए पैटर्न द्वारा मेल खाता है।


    1

    कहा जाता है कि लेकेम लेक्सम एक टोकन में वर्णों (अल्फ़ान्यूमेरिक) का एक क्रम है।

    टोकन ए टोकन पात्रों का एक अनुक्रम है, जिसे एकल तार्किक इकाई के रूप में पहचाना जा सकता है। आमतौर पर टोकन कीवर्ड, पहचानकर्ता, स्थिरांक, तार, विराम चिह्न, ऑपरेटर होते हैं। संख्या।

    पैटर्न नियम द्वारा वर्णित स्ट्रिंग्स का एक सेट जिसे पैटर्न कहा जाता है। एक पैटर्न बताता है कि एक टोकन क्या हो सकता है और ये पैटर्न नियमित अभिव्यक्तियों के माध्यम से परिभाषित होते हैं, जो कि टोकन से जुड़े होते हैं।


    1

    सीएस शोधकर्ता, मैथ के उन लोगों के रूप में, "नए" शब्द बनाने के शौकीन हैं। ऊपर दिए गए उत्तर सभी अच्छे हैं, लेकिन स्पष्ट रूप से, टोकन और लेक्समेस आईएमएचओ को अलग करने की इतनी बड़ी आवश्यकता नहीं है। वे एक ही चीज का प्रतिनिधित्व करने के दो तरीकों की तरह हैं। एक लेक्सेम ठोस है - यहां चार का एक सेट है; दूसरी ओर, टोकन अमूर्त है - आम तौर पर लेक्सिम के प्रकार का संदर्भ देते हुए एक साथ इसके अर्थ मूल्य के साथ यदि यह समझ में आता है। केवल मेरे दो सेंट्स।


    0

    लेक्सिकल एनालाइज़र पात्रों का एक क्रम लेता है जो एक लेक्सम की पहचान करता है जो नियमित अभिव्यक्ति से मेल खाता है और इसे टोकन में वर्गीकृत करता है। इस प्रकार, एक लेक्सम का मिलान स्ट्रिंग से किया जाता है और एक टोकन नाम उस लेक्सेम की श्रेणी है।

    उदाहरण के लिए, इनपुट "इंट फू, बार;" के साथ एक पहचानकर्ता के लिए नियमित अभिव्यक्ति पर विचार करें।

    पत्र (पत्र | अंकों | _) *

    यहाँ, fooऔर barनियमित अभिव्यक्ति से मेल खाते हैं इस प्रकार दोनों lexemes हैं, लेकिन एक टोकन IDअर्थात पहचानकर्ता के रूप में वर्गीकृत किया गया है ।

    यह भी ध्यान दें, अगले चरण यानी सिंटैक्स विश्लेषक को लेक्सेम के बारे में नहीं बल्कि एक टोकन के बारे में जानना होगा।


    -2

    लीकेम मूल रूप से एक टोकन की इकाई है और यह मूल रूप से वर्णों का अनुक्रम है जो टोकन से मेल खाता है और स्रोत कोड को टोकन में तोड़ने में मदद करता है।

    उदाहरण के लिए: स्रोत है x=b, तो शब्दिम होगा x, =, bऔर टोकन होगा <id, 0>, <=>, <id, 1>


    एक उत्तर अधिक विशिष्ट होना चाहिए। एक उदाहरण उपयोगी हो सकता है।
    ज्वेरेव एवगेनी
    हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
    Licensed under cc by-sa 3.0 with attribution required.