לאנשים רבים יש קשיים או תסכולים משפות התכנות שבהם הם משתמשים כל יום. חלק רוצים שהדברים יטופלו בצורה מופשטת יותר, בעוד שאחרים לא אוהבים יישום של תכונות שהם היו 'סטנדרטיים'. בין אם אתה איש מקצוע או רק חובב, פעמים רבות אתה עלול למצוא את עצמך רוצה ליצור שפת תכנות חדשה.
צעדים
שלב 1. הכירו את הטכנולוגיה
אינך יכול ליצור שפת תכנות אם אינך יודע כיצד להשתמש במחשב.
שלב 2. הכירו את הטרמינולוגיה
כותבי המהדרים משתמשים לעתים קרובות במינוחים לא מוכרים. קרא על מהדרים לפני שתמשיך. הקפד לדעת את כל מה שאתה צריך לדעת.
שלב 3. החליטו על איזו בעיה השפה שלכם פותרת
האם הוא מטפל בבעיה ספציפית לתחום, או שמא מדובר בשפה למטרות כלליות?
שלב 4. תחשוב על הסמנטיקה של השפה שלך ועל המושגים שלה
- האם אתה מתיר גישה ישירה למצביע או לא?
- מהם סוגי הנתונים של השפה שלך?
- האם זו שפה סטטית או דינאמית?
- מהו דגם הזיכרון שלך? האם אתה מתכוון להשתמש באספן זבל או בניהול זיכרון ידני? (אם אתה משתמש באספן זבל, התכונן לכתוב אחד או התאם אחד קיים לשפה שלך.)
- איך מתמודדים עם במקביל? האם אתה מתכוון להשתמש בדגם הברגה/נעילה פשוט או משהו מורכב יותר כמו לינדה או דוגמנית השחקן? (מכיוון שבימינו למחשבים יש ליבות מרובות.)
- האם יש פונקציות פרימיטיביות המוטמעות בשפה או שהכל יבוא מספרייה?
- מהי הפרדיגמה או הפרדיגמות של השפה שלך? פוּנקצִיוֹנָלִי? מונחה עצמים? אב טיפוס (כמו JavaScript)? מכוון היבט? מכוון לתבנית? או משהו חדש לגמרי?
- כיצד השפה שלך תתממשק עם ספריות ושפות קיימות (בעיקר C)? נקודה זו חשובה אם אתה בונה שפה ספציפית לתחום.
- לבסוף, חלק מהתשובות לשאלות אלה עונות על השלב השני ויעזרו לך לענות על השלב הבא.
שלב 5. חשוב על כמה משימות ספציפיות שמישהו ירצה שיוכל לבצע עם השפה שלך
לדוגמה, 'הם עשויים לרצות לכוון רובוט לעקוב אחר שורה' או 'אולי הם רוצים ליצור בו תוכניות שולחן עבודה ניידות יחסית' או 'אולי ירצו ליצור בעזרתו יישומי אינטרנט'.
שלב 6. התנסו ברעיונות תחביר (הטקסט של השפה) בדוגמאות שלעיל
היזהר לשמור את השפה שלך בקטגוריית השפות ללא הקשר או משהו בתוכה. מחולל הניתוח שלך ותעריך אותו בהמשך
שלב 7. כתוב דקדוק רשמי לתחביר
שלב 8. החליטו אם השפה תתפרש או תורכב
כלומר, בעולם המפורש המשתמש שלך בדרך כלל יערוך את התוכנית שלך בעורך ויפעיל אותה ישירות על המתורגמן; בעוד בעולם המקובץ, המשתמש שלך יערוך את התוכנית שלך, יאסוף אותה, ישמור את הפעלה המתקבלת במקום כלשהו ויפעיל אותה.
שלב 9. כתוב את הסורק והנתח הקדמי או מצא כלי שעוזר לך בכך
כמו כן, חשוב כיצד המהדר/המתורגמן שלך יזהיר את המשתמש שלך מפני תוכניות שגויות ושגיאות תחביר
שלב 10. השתמש במידע הניתוח כדי לכתוב את קוד האובייקט או ייצוג ביניים
תן למנתח ליצור AST, ולאחר מכן צור את קוד האובייקט שלך מ- AST באמצעות שלושה כתובות כתובת או אחיו הגדול SSA, ולאחר מכן צור טבלת סמלים להגדרת הפונקציות, המשתנים הגלובליים שלך וכו '.
כמו כן, בהתאם לשפה שלך, ייתכן שתרצה גם ליצור טבלאות מצביע וירטואליות או טבלאות מידע לשיעורים שלך (על מנת לתמוך בהשתקפות או ב- RTTI)
שלב 11. כתוב את ההפעלה או מחולל הקוד שיקשר הכל יחד
שלב 12. כתוב תוכניות בדיקה רבות לבדיקת השפה
אתה רוצה ליצור תוכניות המדגישות את עול הדקדוק הפורמלי שלך על מנת לראות שהמהדר שלך מקבל את כל מה שיש בתוך ההגדרה שלך ודוחה את כל מה שמחוצה לו
שלב 13. שקול כיצד המשתמש יביא לאיתור באגים של תוכניות משלו
שלב 14. אם השפה שלך משתמשת בספרייה סטנדרטית, תרצה לכתוב אותה
יחד עם אספן זבל או תכונות זמן ריצה אחרות אם אתה צריך את זה.
באופן ספציפי, אם אתה כותב מהדר, תזדקק לקוד שמערכת ההפעלה תבצע על מנת להתחיל להריץ את קוד המשתמש (לדוגמה, הקצאת כל המשתנים הגלובליים)
שלב 15. פרסם את השפה שלך, יחד עם המפרט שלה וכמה דוגמאות של מה שאתה יכול לעשות בה
אל תשכח לתעד כיצד תוכל להשתלב עם ספריות קיימות, שפות וכיצד להשתמש בתכונות זמן הריצה ו/או הספרייה הסטנדרטית
וידאו - על ידי שימוש בשירות זה, מידע מסוים עשוי להיות משותף עם YouTube
טיפים
- התחל בעיצוב השפה שלך ואל תכתוב שום קוד, עד שאתה שבע רצון וענה על כל (או רוב) השאלות או הבעיות הקשורות לעיצוב שלך מכיוון שקל יותר לשנות את העיצוב מוקדם יותר מאשר מאוחר יותר.
- דע את פלטפורמת היעד שלך (מערכת הפעלה וספריות) עבור המהדר/המתורגמן שלך, אחרי הכל, אתה הולך להשתמש בה ולתפעל אותו.
אזהרות
- תחשוב אם אתה באמת צריך שפה חדשה, ומה יש לשפה שלך לחדשות שאין לשפות אחרות (זה עשוי להיות שילוב של תכונות או תכונה אחת).
- קשה לכתוב שפות אם אתה לא יודע מה אתה עושה. גם זה דורש הרבה תרגול.
- היכונו לבלות קצת זמן בעיצוב שפות, מכיוון שלא תהיה לכם אפשרות לשנות את השפה לאחר שכתבתם את המהדר ועברתם את נקודת העיצוב.
- אל תנסה לבסס את התכונות שלך לאיחוד של מספר שפות, כמו להגיד שהשפה שלך תהיה איחוד של שפה X, שפה Y ושפה Z. ההיסטוריה הראתה לנו ששפות שנוצרו בצורה כזו לעולם לא יצלחו, או שכולם היו מתכנתים PL/1 במקום משהו המבוסס על C.