ব্লকলি > কোডজেনারেটর

কোডজেনারেটর ক্লাস

একটি কোড জেনারেটরের জন্য ক্লাস যা ব্লকগুলিকে একটি ভাষায় অনুবাদ করে।

স্বাক্ষর:

export declare class CodeGenerator 

কনস্ট্রাক্টর

কনস্ট্রাক্টর সংশোধক বর্ণনা
(নির্মাতা)(নাম) CodeGenerator ক্লাসের একটি নতুন উদাহরণ তৈরি করে

বৈশিষ্ট্য

সম্পত্তি সংশোধক টাইপ বর্ণনা
COMMENT_WRAP সংখ্যা মোড়ানোর আগে একটি মন্তব্যের জন্য সর্বাধিক দৈর্ঘ্য। ইন্ডেন্টিং স্তরের জন্য হিসাব করে না।
সংজ্ঞা_ protected {[কী: স্ট্রিং]: স্ট্রিং; } সংজ্ঞার একটি অভিধান কোডের আগে প্রিন্ট করতে হবে।
ব্লকের জন্য রেকর্ড<স্ট্রিং, (ব্লক: ব্লক , জেনারেটর: এই) => [স্ট্রিং, সংখ্যা] | স্ট্রিং | null>

ব্লক জেনারেটর ফাংশনগুলির একটি অভিধান, ব্লকের ধরন দ্বারা চাবি করা। প্রতিটি ব্লক জেনারেটর ফাংশন দুটি পরামিতি লাগে:

- কোড জেনারেট করার ব্লক, এবং - কলিং কোডজেনারেটর (বা সাবক্লাস) উদাহরণ, যাতে ফাংশনটি নীচে সংজ্ঞায়িত পদ্ধতিগুলিকে কল করতে পারে (যেমন ব্লকটোকোড) বা প্রাসঙ্গিক সাবক্লাসে (যেমন জাভাস্ক্রিপজেনারেটর),

এবং রিটার্ন:

- একটি [কোড, অগ্রাধিকার] টিপল (মান/এক্সপ্রেশন ব্লকের জন্য), বা - একটি স্ট্রিং যাতে জেনারেট করা কোড থাকে (স্টেটমেন্ট ব্লকের জন্য), অথবা - নাল যদি ব্লকের জন্য কোনো কোড নির্গত করা উচিত নয়।

FUNCTION_NAME_PLACEHOLDER_ স্ট্রিং এটি CodeGenerator.provideFunction_ ব্যবহার করে সংজ্ঞায়িত ফাংশনে স্থানধারক হিসেবে ব্যবহৃত হয়। এটি অবশ্যই আইনি কোড হতে হবে না যা একটি ফাংশন সংজ্ঞায় (বা মন্তব্য) বৈধভাবে উপস্থিত হতে পারে এবং এটি নিয়মিত এক্সপ্রেশন পার্সারকে বিভ্রান্ত করবে না।
FUNCTION_NAME_PLACEHOLDER_REGEXP_ RegExp
ফাংশনের নাম_ protected {[কী: স্ট্রিং]: স্ট্রিং; } একটি অভিধান ম্যাপিং পছন্দসই ফাংশনের নাম সংজ্ঞায়_ প্রকৃত ফাংশনের নামের সাথে (ব্যবহারকারীর ফাংশনগুলির সাথে সংঘর্ষ এড়াতে)।
ইন্ডেন্ট স্ট্রিং ইন্ডেন্ট করার পদ্ধতি। দুটি স্পেসে ডিফল্ট, কিন্তু ভাষা জেনারেটর ইন্ডেন্ট বাড়াতে বা ট্যাবে পরিবর্তন করতে এটিকে ওভাররাইড করতে পারে।
INFINITE_LOOP_TRAP স্ট্রিং | খালি অসীম লুপ সৃষ্টি করার ঝুঁকিপূর্ণ অবস্থানে ইনজেক্ট করার জন্য ইচ্ছাকৃত কোড। '%1'-এর যেকোনো ঘটনা ব্যর্থ হওয়া ব্লক আইডি দ্বারা প্রতিস্থাপিত হবে। যেমন checkTimeout(%1);\n
সূচনা করা হয়েছে বুলিয়ান | খালি init পদ্ধতি বলা হয়েছে কিনা। যে জেনারেটরগুলি এই ফ্ল্যাগটিকে তৈরি করার পরে মিথ্যা এবং init-এ সত্য সেট করে যদি জেনারেটর আরম্ভ না করা হয় তবে ব্লকটোকোড একটি সতর্কতা নির্গত করবে৷ যদি এই পতাকাটি অস্পৃশ্য থাকে তবে এর কোন প্রভাব থাকবে না।
নাম_ স্ট্রিং
নাম ডিবি_? নাম (ঐচ্ছিক) পরিবর্তনশীল এবং পদ্ধতির নামের একটি ডাটাবেস।
ORDER_OVERRIDES সংখ্যা[][][] বাইরের-অভ্যন্তরীণ জোড়ার তালিকা যার জন্য বন্ধনীর প্রয়োজন নেই।
RESERVED_WORDS_ protected স্ট্রিং সংরক্ষিত শব্দের কমা দ্বারা পৃথক করা তালিকা।
STATEMENT_PREFIX স্ট্রিং | খালি প্রতিটি স্টেটমেন্টের আগে ইনজেকশন করতে ইচ্ছাকৃত কোড। '%1'-এর যেকোনো ঘটনা বিবৃতির ব্লক আইডি দ্বারা প্রতিস্থাপিত হবে। যেমন highlight(%1);\n
STATEMENT_SUFFIX স্ট্রিং | খালি প্রতিটি বিবৃতি পরে ইনজেকশন করার জন্য ইচ্ছাকৃত কোড. '%1'-এর যেকোনো ঘটনা বিবৃতির ব্লক আইডি দ্বারা প্রতিস্থাপিত হবে। যেমন highlight(%1);\n

পদ্ধতি

পদ্ধতি সংশোধক বর্ণনা
addLoopTrap (শাখা, ব্লক) একটি লুপের বিষয়বস্তুতে একটি অসীম লুপ ফাঁদ যোগ করুন। লুপ ব্লকের শুরুতে স্টেটমেন্ট প্রত্যয় যোগ করুন (লুপ স্টেটমেন্ট কার্যকর হওয়ার ঠিক পরে), এবং লুপ ব্লকের শেষে একটি স্টেটমেন্ট প্রিফিক্স (লুপ স্টেটমেন্ট কার্যকর হওয়ার ঠিক আগে)।
সংরক্ষিত শব্দ যোগ করুন(শব্দ) এই ভাষার জন্য সংরক্ষিত শব্দের তালিকায় এক বা একাধিক শব্দ যোগ করুন।
সব নেস্টেড মন্তব্য(ব্লক) পুনরাবৃত্তভাবে ব্লকের একটি গাছ মাকড়সা, তাদের সমস্ত মন্তব্য ফিরিয়ে দেয়।
blockToCode(block, opt_thisOnly) নির্দিষ্ট ব্লকের জন্য কোড তৈরি করুন (এবং সংযুক্ত ব্লক)। এই ফাংশনটি কল করার আগে জেনারেটরটি আরম্ভ করা আবশ্যক।
শেষ (কোড) কোড তৈরির শেষে চালানোর জন্য কোডের জন্য হুক। সাবক্লাসগুলি এটিকে ওভাররাইড করতে পারে, যেমন ইম্পোর্ট স্টেটমেন্ট বা পরিবর্তনশীল সংজ্ঞা সহ জেনারেট করা কোডকে প্রিপেন্ড করা।
getProcedureName(নাম) ব্যবহারকারী-সংজ্ঞায়িত পদ্ধতির জন্য একটি অনন্য, আইনি নাম পায়। এই পদ্ধতিতে কল করার আগে, ক্লাসের nameDB_ প্রপার্টি ইতিমধ্যেই শুরু করা আবশ্যক। এটি সাধারণত কোড জেনারেটর ক্লাসের init ফাংশনে করা হয়।
getVariableName(nameOrId) ব্যবহারকারী-সংজ্ঞায়িত ভেরিয়েবলের জন্য একটি অনন্য, আইনি নাম পায়। এই পদ্ধতিতে কল করার আগে, ক্লাসের nameDB_ প্রপার্টি ইতিমধ্যেই শুরু করা আবশ্যক। এটি সাধারণত কোড জেনারেটর ক্লাসের init ফাংশনে করা হয়।
init(_ওয়ার্কস্পেস) কোড জেনারেশন শুরু হওয়ার আগে কোড চালানোর জন্য হুক করুন। সাবক্লাসগুলি এটিকে ওভাররাইড করতে পারে, যেমন পরিবর্তনশীল নামের ডাটাবেস শুরু করতে।
injectId (বার্তা, ব্লক) '%1' প্রতিস্থাপন করতে একটি বার্তায় একটি ব্লক আইডি ইনজেকশন করুন। STATEMENT_PREFIX, STATEMENT_SUFFIX, এবং INFINITE_LOOP_TRAP-এর জন্য ব্যবহৃত।
উপসর্গ লাইন (পাঠ্য, উপসর্গ) কোডের প্রতিটি লাইনে একটি সাধারণ উপসর্গ প্রিপেন্ড করুন। ইন্ডেন্টিং কোড বা মন্তব্য মার্কার যোগ করার উদ্দেশ্যে।
প্রদান ফাংশন_(কাঙ্খিত নাম, কোড)

একটি ডেভেলপার-সংজ্ঞায়িত ফাংশন সংজ্ঞায়িত করুন (একটি ব্যবহারকারী-সংজ্ঞায়িত পদ্ধতি নয়) উত্পন্ন কোডে অন্তর্ভুক্ত করা হবে। ব্যক্তিগত সহায়ক ফাংশন তৈরি করার জন্য ব্যবহৃত হয়। প্রথমবার যখন এটি একটি প্রদত্ত পছন্দসই নাম দিয়ে কল করা হয়, কোডটি সংরক্ষিত হয় এবং একটি প্রকৃত নাম তৈরি হয়। একই পছন্দসই নামের সাথে পরবর্তী কলগুলির কোনও প্রভাব নেই তবে একই রিটার্ন মান রয়েছে৷

একই কাঙ্খিত নামটি বিভিন্ন সহায়ক ফাংশনের জন্য ব্যবহার করা হচ্ছে না তা নিশ্চিত করা কলারের উপর নির্ভর করে (যেমন "colourRandom" এবং "listRandom" ব্যবহার করুন, "র্যান্ডম" নয়)। সংরক্ষিত শব্দ, বা ব্যবহারকারী-সংজ্ঞায়িত পরিবর্তনশীল বা পদ্ধতির নামের সাথে সংঘর্ষের কোন বিপদ নেই।

CodeGenerator.finish() কল করা হলে কোডটি আউটপুট পায়।

scrub_(_block, code, _opt_thisonly) protected ব্লক থেকে কোড তৈরি করার জন্য সাধারণ কাজ। এটি ব্লকটোকোড থেকে বলা হয় এবং প্রতিটি ব্লকে বলা হয়, শুধুমাত্র শীর্ষ স্তরের ব্লক নয়। সাবক্লাসগুলি এটিকে ওভাররাইড করতে পারে, যেমন ব্লক অনুসরণ করে বিবৃতিগুলির জন্য কোড তৈরি করতে, বা নির্দিষ্ট ব্লক এবং যেকোনো সংযুক্ত মান ব্লকের জন্য মন্তব্যগুলি পরিচালনা করতে।
স্ক্রাব নেকেড ভ্যালু(লাইন) নগ্ন মান হল আউটপুট সহ শীর্ষ-স্তরের ব্লক যা কিছুতে প্লাগ করা হয় না। সাবক্লাসগুলি এটিকে ওভাররাইড করতে পারে, উদাহরণস্বরূপ যদি তাদের ভাষা নগ্ন মান অনুমোদন না করে।
স্টেটমেন্ট টোকোড (ব্লক, নাম) নামযুক্ত স্টেটমেন্ট ইনপুটের সাথে সংযুক্ত ব্লকগুলির প্রতিনিধিত্ব করে একটি কোড স্ট্রিং তৈরি করুন। কোড ইন্ডেন্ট করুন। এটি মূলত জেনারেটরে ব্যবহৃত হয়। মূল্যায়ন করার জন্য কোড তৈরি করার চেষ্টা করার সময় ওয়ার্কস্পেসটোকোড বা ব্লকটোকোড ব্যবহার করে দেখুন।
valueToCode (ব্লক, নাম, বহিঃঅর্ডার) নির্দিষ্ট মান ইনপুট প্রতিনিধিত্ব কোড তৈরি করুন.
ওয়ার্কস্পেসটোকোড(ওয়ার্কস্পেস) নির্দিষ্ট ভাষায় কর্মক্ষেত্রে সমস্ত ব্লকের জন্য কোড তৈরি করুন।