blockly > CodeGenerator

CodeGenerator क्लास

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

हस्ताक्षर:

export declare class CodeGenerator 

कंस्ट्रक्टर

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

प्रॉपर्टी

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

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

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

और रिटर्न:

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

FUNCTION_NAME_PLACEHOLDER_ स्ट्रिंग इसका इस्तेमाल, CodeGenerator.provideFunction_ का इस्तेमाल करके तय किए गए फ़ंक्शन में प्लेसहोल्डर के तौर पर किया जाता है. यह कोई ऐसा कानूनी कोड नहीं होना चाहिए जो फ़ंक्शन की परिभाषा या टिप्पणी में, सही तरीके से दिख सके. साथ ही, इसमें रेगुलर एक्सप्रेशन पार्सर को भ्रम में न डालें.
FUNCTION_NAME_PLACEHOLDER_REGEXP_ RegExp
functionNames_ protected { [key: string]: string; } डिक्शनरी में, मनचाहे फ़ंक्शन के नामों को परिभाषाओं_ में, असली फ़ंक्शन के नामों से मैप किया जा सकता है (उपयोगकर्ता के फ़ंक्शन के साथ टकराव से बचने के लिए).
इंडेंट स्ट्रिंग इंडेंट करने का तरीका. डिफ़ॉल्ट तौर पर, यह दो स्पेस पर सेट होता है, लेकिन इंडेंट बढ़ाने या टैब में बदलने के लिए, लैंग्वेज जनरेटर इसे बदल सकते हैं.
INFINITE_LOOP_TRAP स्ट्रिंग | शून्य आर्बिट्रेरी कोड ऐसी जगहों में इंजेक्ट करने के लिए जहां बार-बार होने वाले लूप का जोखिम हो. '%1' के सभी इंस्टेंस, पूरे न हो पाने वाले ब्लॉक आईडी से बदल दिए जाएंगे. उदा. checkTimeout(%1);\n
isInitialized boolean | null क्या 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, ब्लॉक) '%1' की जगह इस्तेमाल करने के लिए, मैसेज में ब्लॉक आईडी डालें. इसका इस्तेमाल STATEMENT_PREFIX, STATEMENT_ मॉडल, और INFINITE_LOOP_TRAP के लिए किया जाता है.
prefixLines(text, prefix) कोड की हर लाइन पर एक सामान्य प्रीफ़िक्स लगाएं. इसका मकसद, कोड को इंडेंट करना या टिप्पणी मार्कर जोड़ना है.
provideFunction_(desiredName, कोड)

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

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

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

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