blockly > CodeGenerator

מחלקה CodeGenerator

שיעור למחולל קוד שמתרגם את הבלוקים לשפה.

Signature:

export declare class CodeGenerator 

יצרנים

יצרן גורמי שינוי תיאור
(constructor)(name) יצירת מופע חדש של המחלקה CodeGenerator

תכונות

מאפיין (property) גורמי שינוי סוג תיאור
COMMENT_WRAP number האורך המקסימלי של תגובה לפני גלישת טקסט. לא נלקחת בחשבון רמת כניסת הפיסקה.
definitions_ protected { [key: string]: string; } מילון של הגדרות להדפסה לפני הקוד.
forBlock Record<string, (block: Block, generator: this) => [string, number] | string | null>

מילון של פונקציות של מחולל בלוקים, עם מפתח לפי סוג הבלוק. כל פונקציה של מחולל בלוקים מקבלת שני פרמטרים:

- הבלוק ליצירת קוד, וגם - למופע של CodeGenerator (או מחלקה משנית), כך שהפונקציה תוכל לקרוא לשיטות המוגדרות למטה (למשל, blockToCode) או במחלקת המשנה הרלוונטית (למשל JavascripGenerator),

ומחזירה:

- תו [קוד, קדימות] tuple (עבור בלוקים של ערך/ביטוי), או - מחרוזת שמכילה את הקוד שנוצר (לחסימות הצהרות), או - null אם לא צריך להפקיע קוד לבלוק.

FUNCTION_NAME_PLACEHOLDER_ string הוא משמש כ-placeholder בפונקציות שהוגדרו באמצעות CodeGenerator.provideFunction_. הוא לא יכול להיות קוד משפטי שיכול להופיע באופן חוקי בהגדרת פונקציה (או הערה), ואסור שהוא יבלבל את מנתח הביטוי הרגולרי.
FUNCTION_NAME_PLACEHOLDER_REGEXP_ RegExp
functionNames_ protected { [key: string]: string; } מילון שממפה את השמות של הפונקציות הרצויות בהגדרות _ לשמות הפונקציות בפועל (כדי למנוע התנגשויות עם פונקציות משתמש).
כניסה string השיטה של כניסת פיסקה. ברירת המחדל היא שני רווחים, אבל מחוללי שפות עשויים לשנות זאת כדי להגדיל את כניסת הפיסקה או לעבור לכרטיסיות.
INFINITE_LOOP_TRAP מחרוזת | null קוד שרירותי להחדרה למיקומים שעלולים לגרום ללולאות אינסופיות. כל המופעים של '%1' יוחלפו במזהה החסימה שנכשל. לדוגמה: checkTimeout(%1);\n
isInitialized boolean | null האם בוצעה קריאה ל-method הראשונית. גנרטורים הקובעים את הסימון הזה ל-False לאחר היצירה ו-true באתחול, יגרמו ל-blockToCode לפלוט אזהרה אם המחולל לא אותחל. אם לא יתבצע שינוי בסימון הזה, לא תהיה לו השפעה.
name_ string
nameDB_? שמות (אופציונלי) מסד נתונים של שמות משתנים ונהלים.
ORDER_OVERRIDES מספר[][] רשימת צמדים חיצוניים שאינם מחייבים סוגריים.
RESERVED_WORDS_ protected string רשימה של מילים שמורות שמופרדות בפסיקים.
STATEMENT_PREFIX מחרוזת | null קוד שרירותי להחדרה לפני כל הצהרה. כל המופעים של '%1' יוחלפו במזהה החסימה של ההצהרה. לדוגמה: highlight(%1);\n
STATEMENT_SUFFIX מחרוזת | null קוד שרירותי להחדרה אחרי כל הצהרה. כל המופעים של '%1' יוחלפו במזהה החסימה של ההצהרה. לדוגמה: highlight(%1);\n

שיטות

שיטה גורמי שינוי תיאור
addLoopTrap(branch, block) הוספה של מלכודת לולאה אינסופית לתוכן של לולאה. מוסיפים סיומת הצהרה בתחילת בלוק הלולאה (ממש אחרי שהצהרת הלולאה מופעלת), ותחילית של הצהרה בסוף בלוק הלולאה (ממש לפני שהצהרת הלולאה מופעלת).
addReservedWords(words) מוסיפים מילה אחת או יותר לרשימת המילים השמורות לשפה זו.
allNestedComments(block) עכבישים בצורת עץ באופן רקורסיבי, ומחזירים את כל התגובות שלהם.
blockToCode(block, opt_thisOnly) יצירת קוד לבלוק שצוין (ולבלוקים המצורפים). צריך לאתחל את המחולל לפני שמפעילים את הפונקציה הזו.
finish(code) הוק כדי שקוד יפעל בסיום יצירת הקוד. מחלקות משנה יכולות לבטל את ההגדרה הזו. למשל, להוסיף לפני הקוד שנוצר הצהרות ייבוא או הגדרות משתנים.
getProcedureName(name) מקבל שם חוקי ייחודי להליך שהגדיר המשתמש. לפני שמפעילים את השיטה הזו, המאפיין nameDB_ של המחלקה חייב להיות מופעל כבר. בדרך כלל הדבר נעשה בפונקציה init של המחלקה של מחולל הקוד.
getVariableName(nameOrId) הפונקציה מקבלת שם חוקי וייחודי למשתנה שהוגדר על ידי המשתמש. לפני שמפעילים את השיטה הזו, המאפיין nameDB_ של המחלקה חייב להיות מופעל כבר. בדרך כלל הדבר נעשה בפונקציה init של המחלקה של מחולל הקוד.
init(_workspace) הוק כדי שהקוד ירוץ לפני שמתחילה יצירת הקוד. מחלקות משנה יכולות לשנות את ההגדרה הזו, למשל לאתחל את מסד הנתונים של שמות המשתנים.
injectId(msg, block) הוספת מזהה חסימה להודעה שתחליף את '%1'. משמש עבור STATEMENT_PREFIX, STATEMENT_ומי, וגם INFINITE_LOOP_TRAP.
prefixLines(text, prefix) מוסיפים תחילית משותפת לכל שורת קוד. מיועד לכניסת קוד או להוספת סמני תגובה.
provideFunction_(desiredName, code)

מגדירים פונקציה בהגדרת המפתח (לא תהליך בהגדרת המשתמש) שתיכלל בקוד שנוצר. משמשת ליצירת פונקציות עזר פרטיות. בפעם הראשונה שהשדה הזה נקרא עם ערך מותאם אישית מסוים, הקוד נשמר ומופק שם בפועל. לקריאות הבאות עם אותו wantName אין השפעה, אבל הערך המוחזר יהיה זהה.

באחריותו של מבצע הקריאה לוודא שאותו שם רצוי לא ישמש לפונקציות מסייעות שונות (למשל, שימוש ב-"colourRandom" וב-"listRandom", ולא ב-"random"). אין סכנה של התנגשות עם מילים שמורות או שמות של משתנים או הליכים שהוגדרו על ידי המשתמש.

הקוד מקבל פלט בעת קריאה ל-CodeGenerator.finish() .

scrub_(_block, code, _opt_thisOnly) משימות נפוצות ליצירת קוד מבלוקים. הוא נקרא מ-blockToCode והוא מופעל בכל בלוק, לא רק בלוקים ברמה העליונה. מחלקות משנה יכולות לשנות את ההגדרה הזו, למשל ליצור קוד להצהרות אחרי החסימה, או לטפל בתגובות לבלוק שצוין ולכל בלוקים של ערכים מחוברים.
scrubNakedValue(line) ערכים ללא קידומת הם בלוקים ברמה עליונה עם פלטים שלא מחוברים לשום דבר. מחלקות משנה יכולות לשנות את ההגדרה הזו, למשל אם השפה שלהן לא מאפשרת ערכים ללא קידומת.
statementToCode(block, name) יוצרים מחרוזת קוד שמייצגת את הבלוקים שמצורפים לקלט של ההצהרה בעלת השם. כניסת פסקה לקוד. משמש בעיקר בגנרטורים. כשמנסים ליצור קוד להערכה, צריך להשתמש ב-workspaceToCode או ב-blockToCode.
valueToCode(block, name, outerOrder) יוצרים קוד שמייצג את הערך שצוין.
workspaceToCode(workspace) יצירת קוד לכל הבלוקים בסביבת העבודה לשפה שצוינה.