blockly > CodeGenerator

CodeGenerator क्लास

कोड जनरेटर के लिए क्लास, जो ब्लॉक को किसी भाषा में बदल देता है.

हस्ताक्षर:

export declare class CodeGenerator 

कंस्ट्रक्टर

निर्माता मॉडिफ़ायर ब्यौरा
(कंस्ट्रक्टर)(नाम) CodeGenerator क्लास का एक नया इंस्टेंस बनाता है

प्रॉपर्टी

प्रॉपर्टी मॉडिफ़ायर टाइप ब्यौरा
COMMENT_WRAP नंबर रैप करने से पहले, टिप्पणी की ज़्यादा से ज़्यादा लंबाई. इसमें इंडेंटिंग लेवल शामिल नहीं होता.
definitions_ protected { [key: String]: स्ट्रिंग; } कोड से पहले प्रिंट की जाने वाली परिभाषाओं की डिक्शनरी.
forBlock Record<string, (block: Block, generator: this) => [string, number] | string | null>

ब्लॉक जनरेटर फ़ंक्शन की डिक्शनरी, जिसे ब्लॉक टाइप के हिसाब से बनाया जाता है. हर ब्लॉक जनरेटर फ़ंक्शन दो पैरामीटर लेता है:

- कोड जनरेट करने के लिए ब्लॉक और - कॉलिंग CodeGenerator (या सब-क्लास) के लिए, ताकि फ़ंक्शन नीचे दिए गए तरीकों को कॉल कर सके (जैसे, blockToCode) या इससे जुड़ी सब-क्लास (जैसे, JavascripGenerator),

और प्रॉडक्ट को लौटाया जा सकता है:

- [कोड, प्राथमिकता] टपल (वैल्यू/एक्सप्रेशन ब्लॉक के लिए) या - जनरेट किए गए कोड (स्टेटमेंट ब्लॉक के लिए) वाली स्ट्रिंग या - अगर ब्लॉक करने की प्रोसेस के लिए कोई कोड उत्सर्जित नहीं किया जाना चाहिए, तो शून्य.

FUNCTION_NAME_PLACEHOLDER_ स्ट्रिंग इसका इस्तेमाल, CodeGenerator.provideFunction_ का इस्तेमाल करके तय किए गए फ़ंक्शन में प्लेसहोल्डर के तौर पर किया जाता है. यह ऐसा कानूनी कोड नहीं होना चाहिए जो किसी फ़ंक्शन की परिभाषा (या टिप्पणी) में सही तरीके से दिखे. साथ ही, इसे रेगुलर एक्सप्रेशन पार्सर को भ्रमित नहीं करना चाहिए.
FUNCTION_NAME_PLACEHOLDER_REGEXP_ RegExp
functionNames_ protected { [key: String]: स्ट्रिंग; } एक शब्दकोश, जो मनचाहे फ़ंक्शन के नामों को डेफ़िनिशन_ में, असली फ़ंक्शन के नामों से मैप करता है (उपयोगकर्ता फ़ंक्शन के साथ टकराव से बचने के लिए).
इंडेंट स्ट्रिंग इंडेंट करने का तरीका. डिफ़ॉल्ट तौर पर, यह दो स्पेस पर सेट होता है, लेकिन इंडेंट बढ़ाने या टैब में बदलाव करने के लिए, भाषा जनरेट करने वाले इसे बदल सकते हैं.
INFINITE_LOOP_TRAP स्ट्रिंग | शून्य आर्बिट्रेरी कोड, ऐसी जगहों में इंजेक्ट करने के लिए जहां बार-बार लूप का खतरा हो. '%1' के सभी इंस्टेंस, विफल रहे ब्लॉक आईडी से बदल दिए जाएंगे. उदा. checkTimeout(%1);\n
isInitialized boolean | null init वाला तरीका कॉल किया गया है या नहीं. ऐसे जनरेटर जो इस फ़्लैग को बनाने के बाद 'गलत' पर और init में 'सही' पर सेट करते हैं, अगर जनरेटर शुरू नहीं किया गया है, तो blockToCode एक चेतावनी देगा. अगर इस फ़्लैग को नहीं छुआ गया, तो इससे कोई असर नहीं पड़ेगा.
name_ स्ट्रिंग
nameDB_? नाम (ज़रूरी नहीं) वैरिएबल और प्रोसेस के नामों का डेटाबेस.
ORDER_OVERRIDES नंबर[][] उन आउटर-इनर पेयर की सूची जिनके लिए ब्रैकेट की ज़रूरत नहीं होती.
RESERVED_WORDS_ protected स्ट्रिंग रिज़र्व किए गए शब्दों की कॉमा-सेपरेटेड लिस्ट.
STATEMENT_PREFIX स्ट्रिंग | शून्य हर स्टेटमेंट से पहले इंजेक्ट करने वाला आर्बिट्रेरी कोड. '%1' के सभी इंस्टेंस, स्टेटमेंट के ब्लॉक आईडी से बदल दिए जाएंगे. उदा. highlight(%1);\n
STATEMENT_SUFFIX स्ट्रिंग | शून्य हर स्टेटमेंट के बाद इंजेक्ट करने वाला आर्बिट्रेरी कोड. '%1' के सभी इंस्टेंस, स्टेटमेंट के ब्लॉक आईडी से बदल दिए जाएंगे. उदा. highlight(%1);\n

तरीके

तरीका मॉडिफ़ायर ब्यौरा
addLoopTrap(branch, block) लूप की सामग्री में इनफ़ाइनाइट लूप ट्रैप जोड़ें. लूप ब्लॉक की शुरुआत में (लूप स्टेटमेंट के चालू होने के ठीक बाद) और लूप ब्लॉक के आखिर में स्टेटमेंट प्रीफ़िक्स जोड़ें (लूप स्टेटमेंट के चालू होने से ठीक पहले).
addReservedWords(words) इस भाषा के लिए रिज़र्व किए गए शब्दों की सूची में एक या उससे ज़्यादा शब्द जोड़ें.
allNestedComments(block) बार-बार ब्लॉक का एक पेड़ लगाता है और अपनी सभी टिप्पणियां लौटा देता है.
blockToCode(block, opt_thisOnly) तय ब्लॉक (और अटैच किए गए ब्लॉक) के लिए कोड जनरेट करें. इस फ़ंक्शन को कॉल करने से पहले जनरेटर को शुरू करना ज़रूरी है.
फ़िनिश(कोड) कोड जनरेट होने के बाद, कोड को चलाने के लिए हुक लगाएं. सब-क्लास इसे बदल सकती हैं. उदाहरण के लिए, जनरेट किए गए कोड को इंपोर्ट स्टेटमेंट या वैरिएबल परिभाषाओं के साथ जोड़ना.
getProcedureName(name) इसे उपयोगकर्ता की तय की गई प्रक्रिया के लिए एक खास, कानूनी नाम मिलता है. इस तरीके को कॉल करने से पहले, क्लास की nameDB_ प्रॉपर्टी पहले ही शुरू हो जानी चाहिए. आम तौर पर, कोड जनरेटर क्लास के init फ़ंक्शन में ऐसा किया जाता है.
getVariableName(nameOrId) उपयोगकर्ता के तय किए गए वैरिएबल के लिए एक खास और कानूनी नाम मिलता है. इस तरीके को कॉल करने से पहले, क्लास की nameDB_ प्रॉपर्टी पहले ही शुरू हो जानी चाहिए. आम तौर पर, कोड जनरेटर क्लास के init फ़ंक्शन में ऐसा किया जाता है.
init(_workspace) कोड जनरेशन शुरू होने से पहले, कोड को चलाने के लिए हुक करें. सब-क्लास इसे बदल सकती हैं. उदाहरण के लिए, वैरिएबल के नामों का डेटाबेस शुरू करना.
injectId(msg, block) '%1' को बदलने के लिए किसी मैसेज में ब्लॉक आईडी इंजेक्ट करें. STATEMENT_PREFIX, STATEMENT_SUFFIX, और INFINITE_LOOP_TRAP के लिए इस्तेमाल किया जाता है.
prefixLines(text, prefix) कोड की हर लाइन पर एक सामान्य प्रीफ़िक्स जोड़ें. इसका मकसद कोड को इंडेंट करने या टिप्पणी मार्कर जोड़ने के लिए है.
provideFunction_(desiredName, कोड)

जनरेट किए गए कोड में शामिल करने के लिए, डेवलपर का तय किया गया फ़ंक्शन तय करें, न कि उपयोगकर्ता के तय किए गए फ़ंक्शन के तौर पर. इसका इस्तेमाल, निजी हेल्पर फ़ंक्शन बनाने के लिए किया जाता है. पहली बार इसे दिए गए originName के साथ कॉल किया जाता है, तो कोड सेव हो जाता है और एक असली नाम जनरेट किया जाता है. बाद में आने वाले किसी ऐसे कॉल का कोई असर नहीं होगा जिसकी रिटर्न वैल्यू एक जैसी हो. हालांकि, इसकी रिटर्न वैल्यू वही होगी.

यह पक्का करना कॉल करने वाले पर निर्भर करता है कि अलग-अलग हेल्पर फ़ंक्शन के लिए एक ही originName का इस्तेमाल नहीं किया जाता है (उदाहरण के लिए, "colourrang" और "listअनजान" का इस्तेमाल करें, न कि "रैंडम"). रिज़र्व किए गए शब्दों या उपयोगकर्ता के तय किए गए वैरिएबल या प्रक्रिया के नामों से टकराने का कोई खतरा नहीं होता है.

CodeGenerator.finish() को कॉल करने पर, कोड को आउटपुट मिलता है.

scrub_(_block, कोड, _opt_thisOnly) protected ब्लॉक से कोड जनरेट करने के सामान्य टास्क. इसे blockToCode कहा जाता है और इसे शीर्ष स्तर के ब्लॉक पर ही नहीं, बल्कि हर ब्लॉक पर कॉल किया जाता है. सब-क्लास इसे बदल सकती हैं. उदाहरण के लिए, ब्लॉक के बाद के स्टेटमेंट के लिए कोड जनरेट करना या तय किए गए ब्लॉक और कनेक्ट की गई वैल्यू वाले ब्लॉक के लिए टिप्पणियों को मैनेज करना.
scrubNakedValue(line) बिना स्क्रीन वाले वैल्यू, आउटपुट वाले टॉप लेवल के ब्लॉक होते हैं. इन्हें किसी भी चीज़ के साथ प्लग-इन नहीं किया जाता है. सब-क्लास इसे बदल सकती हैं. उदाहरण के लिए, अगर उनकी भाषा में नेक वैल्यू का इस्तेमाल नहीं किया जा सकता.
statementToCode(block, name) नाम वाले स्टेटमेंट इनपुट से जुड़े ब्लॉक को दिखाने के लिए, एक कोड स्ट्रिंग जनरेट करें. कोड को इंडेंट करें. इसका इस्तेमाल मुख्य रूप से जनरेटर में किया जाता है. आकलन करने के लिए कोड जनरेट करते समय, WorkspaceToCode या blockToCode का इस्तेमाल करें.
valueToCode(block, name, outerOrder) दिए गए वैल्यू इनपुट को दिखाने वाला कोड जनरेट करें.
workspaceToCode(workspace) फ़ाइल फ़ोल्डर में सभी ब्लॉक के लिए, बताई गई भाषा के लिए कोड जनरेट करें.