TypeScript Academy · पाठ

पार्सर कॉम्बिनेटर की अवधारणाएँ

छोटे पार्सरों को संयोजित करके बड़े पार्सर बनाएँ।

पाठ 1, कुल 4 में से13 चरण

पार्सर कॉम्बिनेटर की अवधारणाएँ, CoddyKit पर TypeScript Academy का एक निःशुल्क पाठ है। यह 4 में से 1वाँ पाठ है। आप नीचे पूरा पाठ निःशुल्क पढ़ सकते हैं—फिर अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर के साथ ब्राउज़र में इसका व्यावहारिक अभ्यास कर सकते हैं। यह TypeScript Academy सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। TypeScript Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

पार्सर क्या है

एक पार्सर इनपुट, जो आमतौर पर एक स्ट्रिंग होता है, पढ़कर संरचित आउटपुट बनाता है या विफल हो जाता है। प्रकार-प्रणाली में इन्हीं विचारों को ले जाने से पहले हम समझ विकसित करने के लिए मान-स्तर से शुरुआत करेंगे।

type Parser<T> = (input: string) => { value: T; rest: string } | null;
// Consumes part of the input, returns a value and the leftover

एक छोटा पार्सर

सबसे सरल पार्सर किसी शाब्दिक उपसर्ग से मेल खाता है। यदि इनपुट अपेक्षित पाठ से शुरू होता है, तो पार्सर सफल होकर बची हुई स्ट्रिंग लौटाता है; अन्यथा null लौटाता है।

function literal(prefix: string): Parser<string> {
  return input =>
    input.startsWith(prefix)
      ? { value: prefix, rest: input.slice(prefix.length) }
      : null;
}
console.log(literal("ab")("abc"));

संयोजक

एक संयोजक छोटे पार्सर लेकर बड़े पार्सर बनाता है। इसी संयोजनात्मक शैली के कारण इस तरीके को पार्सर संयोजक कहा जाता है: आप सरल, पुनः उपयोग योग्य हिस्सों से जटिल पार्सर बनाते हैं।

// Small parsers: digit, letter, literal
// Combinators: sequence, choice, many
// Compose them into: number, identifier, expression

क्रमिक संयोजन

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

function seq<A, B>(pa: Parser<A>, pb: Parser<B>): Parser<[A, B]> {
  return input => {
    const ra = pa(input);
    if (!ra) return null;
    const rb = pb(ra.rest);
    if (!rb) return null;
    return { value: [ra.value, rb.value], rest: rb.rest };
  };
}

अनुक्रम का उपयोग

दो लिटरल को मिलाकर उनका क्रम से पार्स करें। परिणाम में दोनों मिलान किए गए अंश और शेष इनपुट रहते हैं।

const ab = seq(literal("a"), literal("b"));
const r = ab("abc");
console.log(r); // { value: ["a","b"], rest: "c" }

विकल्प

विकल्प कॉम्बिनेटर पहले पार्सर को आज़माता है; यदि वह विफल होता है, तो दूसरा आज़माता है। यह विकल्पों को व्यक्त करता है, जैसे "एक अंक या एक अक्षर"।

function alt<T>(p1: Parser<T>, p2: Parser<T>): Parser<T> {
  return input => p1(input) ?? p2(input);
}

दोहराव

many कॉम्बिनेटर किसी पार्सर को विफल होने तक बार-बार लागू करता है और सभी परिणाम एकत्र करता है। इससे सूचियों, अंकों के अनुक्रमों या रिक्त स्थानों की पार्सिंग होती है।

function many<T>(p: Parser<T>): Parser<T[]> {
  return input => {
    const out: T[] = [];
    let rest = input;
    let r = p(rest);
    while (r) { out.push(r.value); rest = r.rest; r = p(rest); }
    return { value: out, rest };
  };
}

परिणामों का रूपांतरण

map कॉम्बिनेटर पार्सर के परिणाम को उसके द्वारा लिए जाने वाले इनपुट को बदले बिना रूपांतरित करता है, जैसे मिलान किए गए अंक वर्णों को संख्या में बदलना।

function map<A, B>(p: Parser<A>, f: (a: A) => B): Parser<B> {
  return input => {
    const r = p(input);
    return r ? { value: f(r.value), rest: r.rest } : null;
  };
}

निर्माण की ओर

इन कुछ कॉम्बिनेटरों (लिटरल, अनुक्रम, विकल्प, दोहराव, रूपांतरण) से आप वास्तविक व्याकरणों की पार्सिंग कर सकते हैं: संख्याएँ, पहचानकर्ता और छोटी अभिव्यक्ति भाषाएँ भी। प्रत्येक परत अपने नीचे वाली परत की रचना करती है।

const digit = alt(literal("0"), literal("1")); // toy digit
const digits = many(digit);
console.log(digits("0110x"));

मानों से प्रकारों तक

मुख्य अंतर्दृष्टि यह है: वही संयोजनात्मक संरचना प्रकार-स्तर पर भी काम करती है। वहाँ "इनपुट" एक स्ट्रिंग लिटरल प्रकार होता है और पार्सर टेम्पलेट लिटरल अनुमान का उपयोग करने वाले सशर्त प्रकार होते हैं। अब हम अगले भाग में इसी दिशा में आगे बढ़ेंगे।

// Value level: (input: string) => { value, rest } | null
// Type level:  conditional types over string literal types

प्रकार-स्तर की पार्सिंग क्यों

प्रकार-स्तरीय पार्सर कंपाइलर को स्ट्रिंग लिटरल की संरचना समझने देते हैं: रूट पथ, फ़ॉर्मैट स्ट्रिंग और क्वेरी कुंजियाँ। यहाँ विकसित की गई कॉम्बिनेटर संबंधी समझ इस पाठ्यक्रम की आगे की प्रकार-स्तरीय तकनीकों पर सीधे लागू होती है।

// Goal: parse "users/:id" into { id: string } at compile time

त्वरित जाँच

पार्सर कॉम्बिनेटरों के बारे में अपनी समझ जाँचें।

पुनरावलोकन

आपने मान-स्तर पर पार्सरों की समझ विकसित की।

  • पार्सर इनपुट लेता है और कोई मान तथा बचा हुआ इनपुट लौटाता है, या विफल हो जाता है।
  • कॉम्बिनेटर (अनुक्रम, विकल्प, दोहराव, रूपांतरण) छोटे पार्सरों को मिलाकर बड़े पार्सर बनाते हैं।
  • वही संरचना प्रकार-स्तर पर भी लागू होती है।

अगला विषय: प्रकार प्रणाली में स्ट्रिंग का विभाजन।

शुरुआत निःशुल्क

एआई शिक्षक के साथ TypeScript सीखें — निःशुल्क

अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।

पाठ्यक्रम
101
पाठ
352

अक्सर पूछे जाने वाले प्रश्न

क्या “पार्सर कॉम्बिनेटर की अवधारणाएँ” पाठ निःशुल्क है?

हाँ—“पार्सर कॉम्बिनेटर की अवधारणाएँ” का पूरा पाठ यहाँ वेब पर निःशुल्क पढ़ा जा सकता है। इंटरैक्टिव अभ्यास (अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर) करने और TypeScript Academy पाठ्यक्रम का बाकी हिस्सा अनलॉक करने के लिए CoddyKit PRO लें। TypeScript Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

“पार्सर कॉम्बिनेटर की अवधारणाएँ” में मैं क्या सीखूँगा?

छोटे पार्सरों को संयोजित करके बड़े पार्सर बनाएँ। आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ TypeScript Academy का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।

क्या TypeScript Academy शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?

पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर TypeScript Academy शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 1वाँ पाठ है।

“पार्सर कॉम्बिनेटर की अवधारणाएँ” पाठ पूरा करने में कितना समय लगता है?

CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।

क्या मैं इस TypeScript Academy पाठ में कोड लिख और चला सकता हूँ?

हाँ। हर TypeScript Academy पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।

इस पाठ्यक्रम के सभी पाठ

  1. पार्सर कॉम्बिनेटर की अवधारणाएँ
  2. प्रकार-स्तरीय स्ट्रिंग विभाजन
  3. टेम्पलेट लिटरल के साथ पार्सिंग
  4. एक छोटा प्रकार-स्तरीय रूट पार्सर
← TypeScript Academy पर वापस जाएँ