blockly > CodeGenerator

שיעור CodeGenerator

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

Signature:

export declare class CodeGenerator 

יצרנים

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

תכונות

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

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

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

והחזרות:

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

FUNCTION_NAME_PLACEHOLDER_ מחרוזת הוא משמש כ-placeholder בפונקציות שמוגדרות באמצעות CodeGenerator.provideFunction_. אסור שהוא יהיה קוד משפטי שיכול להופיע באופן לגיטימי בהגדרת פונקציה (או בתגובה), והוא לא יבלבל את המנתח של הביטוי הרגולרי.
FUNCTION_NAME_PLACEHOLDER_REGEXP_ RegExp
functionNames_ protected { [key: string]: string; } מילון שממפה את השמות של הפונקציות הרצויות בהגדרות_לשמות הפונקציות בפועל (כדי למנוע התנגשויות עם פונקציות משתמש).
נסיעה מחרוזת השיטה של כניסת פיסקה. ברירת המחדל היא שני רווחים, אבל מחוללי שפות עשויים לעקוף זאת כדי להגדיל את כניסת הפיסקה או לעבור לכרטיסיות.
INFINITE_LOOP_TRAP מחרוזת | null קוד שרירותי להחדרה למיקומים שעלולים לגרום ללולאות אינסופיות. כל המופעים של '%1' יוחלפו במזהה החסימה שנכשל. לדוגמה: checkTimeout(%1);\n
isInitialized boolean | null האם בוצעה קריאה ל-method init. גנרטורים המגדירים את הסימון הזה כ-FALSE לאחר היצירה ו-true in init יגרמו ל-blockToCode לפלוט אזהרה אם המחולל לא הופעל. אם לא בוצע שינוי בסימון הזה, לא תהיה לו השפעה.
name_ מחרוזת
nameDB_? שמות (אופציונלי) מסד נתונים של שמות משתנים והליכים.
ORDER_OVERRIDES מספר[][] רשימת צמדים חיצוניים-פנימיים שלא מחייבים סוגריים.
RESERVED_WORDS_ protected מחרוזת רשימה של מילים שמורות שמופרדות בפסיקים.
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_SUFFIX ו-INFINITE_LOOP_TRAP.
prefixLines(text, prefix) מוסיפים קידומת נפוצה בכל שורת קוד. מיועד לכניסת קוד או להוספת סמני תגובות.
provideFunction_(desiredName, code)

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

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

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

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