ब्लॉकली > CodeGenerator

CodeGenerator क्लास

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

हस्ताक्षर:

export declare class CodeGenerator 

कंस्ट्रक्टर

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

प्रॉपर्टी

प्रॉपर्टी मॉडिफ़ायर टाइप ब्यौरा
COMMENT_WRAP संख्या रैप करने से पहले, टिप्पणी की ज़्यादा से ज़्यादा लंबाई. इंडेंटिंग स्तर को शामिल नहीं करता है.
definitions_ protected { [की: स्ट्रिंग]: स्ट्रिंग; } पर स्विच करने के मकसद से, हमसे संपर्क करने के लिए धन्यवाद. कोड से पहले प्रिंट की जाने वाली परिभाषाओं का शब्दकोश.
forBlock रिकॉर्ड<string, (ब्लॉक करें: ब्लॉक करें, जनरेटर: यह) => [स्ट्रिंग, संख्या] | स्ट्रिंग | शून्य>

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

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

और रिटर्न:

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

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

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

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

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

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