מחלקה CodeGenerator
מחלקה למחולל קוד שמתרגם את הבלוקים לשפה.
Signature:
export declare class CodeGenerator
יצרנים
יצרן | גורמי שינוי | תיאור |
---|---|---|
(constructor)(name) | יצירה של מופע חדש של המחלקה CodeGenerator |
מאפיינים
נכס | גורמי שינוי | סוג | תיאור |
---|---|---|---|
COMMENT_WRAP | number | האורך המקסימלי של תגובה לפני גלישת הטקסט. לא נלקח בחשבון רמת כניסת פיסקה. | |
definitions_ | protected |
{ [key: string]: string; } | מילון של הגדרות שיודפס לפני הקוד. |
forBlock | רשומה<string, (חסימה: חסימה, מחולל: זה) => [string, number] | מחרוזת | null> | מילון של פונקציות של מחולל בלוקים, לפי סוג הבלוק. כל פונקציית מחולל בלוקים משתמשת בשני פרמטרים: - הבלוק ליצירת קוד בשביל מכונת CodeGenerator (או מחלקה משנית) שמפעילה את הקריאה, כדי שהפונקציה תוכל לקרוא לשיטות הקריאה שמפורטות בהמשך (למשל, blockToCode) או במחלקה משנה רלוונטית (למשל JavascripGenerator), והחזרות: - tuple של [קוד, קדימות] (לבלוקים של ערכים או ביטויים), או - מחרוזת שמכילה את הקוד שנוצר (לבלוקים של הצהרות) או - null אם לא צריך להוציא קוד לבלוק. |
|
FUNCTION_NAME_PLACEHOLDER_ | מחרוזת | הוא משמש כ-placeholder בפונקציות שהוגדרו באמצעות CodeGenerator.providerFunction_. זה לא יכול להיות קוד חוקי שיכול להופיע באופן לגיטימי בהגדרת פונקציה (או תגובה), והוא לא יכול לבלבל את המנתח של הביטוי הרגולרי. | |
FUNCTION_NAME_PLACEHOLDER_REGEXP_ | RegExp | ||
functionNames_ | protected |
{ [key: string]: string; } | מילון שממפה את שמות הפונקציות הרצויים בהגדרות_ לשמות של הפונקציות בפועל (כדי למנוע התנגשויות עם פונקציות המשתמש). |
תחושה | מחרוזת | השיטה של כניסת פיסקה. ברירת המחדל היא שני רווחים, אבל מחוללי שפות עשויים לבטל זאת כדי להגדיל את כניסת הפיסקה או לעבור לכרטיסיות. | |
INFINITE_LOOP_TRAP | מחרוזת | null | קוד שרירותי להחדרה למיקומים שעלולים לגרום ללולאות אינסופיות. כל אירוע של '%1' יוחלף במזהה החסימה. לדוגמה: checkTimeout(%1);\n |
|
isInitialized | boolean | null | האם בוצעה קריאה ל-method של האתחול. גנרטורים שמגדירים את הדגל הזה כ-FALSE לאחר היצירה ואת הערך true ב-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) | יצירת קוד לבלוק שצוין (ולבלוקים המצורפים). צריך לאתחל את המחולל לפני קריאת הפונקציה הזו. | |
Finished(code) | הוק (hook) להרצה של קוד בסוף יצירת הקוד. מחלקות משנה יכולות לבטל זאת, למשל להוסיף לקוד שנוצר הצהרות ייבוא או הגדרות של משתנים. | |
getProcedureName(name) | מקבל שם חוקי ייחודי להליך שהוגדר על ידי המשתמש. לפני שקוראים ל-method הזה, המאפיין nameDB_ של הכיתה צריך להיות כבר מאותחל. הפעולה הזו מתבצעת בדרך כלל בפונקציה init במחלקה של מחולל הקוד. |
|
getVariableName(nameOrId) | הפונקציה מקבלת שם חוקי ייחודי למשתנה בהגדרת המשתמש. לפני שקוראים ל-method הזה, המאפיין nameDB_ של הכיתה צריך להיות כבר מאותחל. הפעולה הזו מתבצעת בדרך כלל בפונקציה init במחלקה של מחולל הקוד. |
|
init(_workspace) | חיפוש בקוד שירוץ לפני שיצירת הקוד מתחילה. מחלקות משנה יכולות לבטל זאת, למשל כדי לאתחל את מסד הנתונים של שמות המשתנים. | |
injectId(msg, block) | הוספת מזהה בלוק להודעה כדי להחליף את '%1'. משמש עבור STATEMENT_PREFIX, STATEMENT_ כותבים ו-INFINITE_LOOP_TRAP. | |
prefixLines(text, prefix) | מוסיפים תחילית משותפת בכל שורת קוד. מיועדת לכניסות פסקה של קוד או להוספת סמני תגובה. | |
ProvideFunction_(desiredName, code) | מגדירים פונקציה בהגדרת המפתח (לא תהליך שמוגדר על ידי המשתמש) שתיכלל בקוד שנוצר. משמש ליצירת פונקציות עזר פרטיות. בפעם הראשונה שבה קוראים למחרוזת הזו עם שם רצוי מסוים, הקוד נשמר ונוצר שם אמיתי. לשיחות הבאות אין השפעה זהה, אבל יש להן ערך מוחזר זהה. מבצע הקריאה החוזרת הוא לוודא שאותו מיקום רצוי לא משמש לפונקציות סיוע שונות (למשל: להשתמש ב-"colorRandom" וב-"listRandom", ולא ב"אקראי"). אין סכנה להתנגשות עם מילים שמורות או עם שמות של משתנים או הנהלים שמוגדרים על ידי המשתמש. הקוד מקבל פלט כשמתבצעת קריאה ל-CodeGenerator.fi ספציפיות() . |
|
scrub_(_block, code, _opt_thisOnly) | משימות נפוצות ליצירת קוד מבלוקים. הוא נקרא מ-blockToCode והוא נקרא בכל בלוק, לא רק בלוקים ברמה העליונה. מחלקות משנה יכולות לבטל זאת, למשל כדי ליצור קוד להצהרות שאחרי החסימה, או לטפל בתגובות בבלוק שצוין ובבלוקים של ערכים מחוברים. | |
scrubNakedValue(line) | ערכים ללא קוד הם בלוקים ברמה העליונה עם פלטים שלא מחוברים לשום דבר. מחלקות משנה יכולות לבטל זאת, למשל אם השפה שלהם לא מאפשרת ערכי עירום. | |
statementToCode(block, name) | יצירת מחרוזת קוד שמייצגת את הבלוקים שמצורפים לקלט של ההצהרה בעלת השם. מוסיפים כניסת קוד. משתמשים בו בעיקר בגנרטורים. כשמנסים ליצור קוד לבדיקה באמצעות WorkspaceToCode או blockToCode. | |
valueToCode(block, name, outerOrder) | יצירת קוד שמייצג את קלט הערך שצוין. | |
workspaceToCode(workspace) | יצירת קוד לכל הבלוקים בסביבת העבודה בשפה שצוינה. |