Simple, Interpreted, Marvelous Programming Language
מסמך אפיון
תמיר כהן
מטרת מסמך זה היא לאפיין ולארגן את שפת התכנות ולשמש כעזר בפיתוח האינטרפרטר לשפה.
SIMPL (ראשי תיבות של Simple, Interpreted, Marvelous Programming Language) היא שפת תכנות פשוטה המבוססת על השפה המפורסמת BASIC. השפה תהיה קלה לכתיבה ולקריאה ופשוטה ככל האפשר.
- Interpreter - תוכנה שמבצעת קוד שכתוב בשפת תכנות מסוימת.
- Token (אסימון) - כמו מילה במשפט - חלק קטן ופשוט מקוד המקור. לדוגמה, יכול להיות token של שם משתנה (identifier), של פעולת חשבון מסוימת (token של פלוס, מינוס), או של סוגריים.
- Lexing (ניתוח מילולי) - יצירת רשימה של tokens מקוד המקור.
- Scanner/Lexer - תוכנה שמבצעת את תהליך הLexing.
- Abstract Syntax Tree - הAST הוא ייצוג של קוד כעץ. הייצוג הרבה יותר נוח לקריאה על ידי תוכנה ומייצג עקרונות כמו סדר פעולות טבעית.
- Parsing (ניתוח מחרוזות) - יצירת AST מהרשימה של הtokens שיצר הScanner.
- Parser - תוכנה שמבצעת את תהליך הParsing.
- CLI - ממשק שורת הפקודה, ממשק משתמש לא גרפי בו המשתמש מכניס פקודות והתוכנה מבצעת אותן.
- Bytecode - ייצוג מכווץ של קוד בשפה פשוטה המדמה שפת מכונה.
המסמך מפרט את הדרישת של השפה SIMPL והInterpreter שיבצע את הקוד הכתוב בה.
פרק התיאור הכללי מתאר את הגורמים העיקריים המשפיעים על פיתוח המוצר ואת דרישותיו.
פרק הדרישות הספציפיות מחולק לדרישות מסוגים שונים, דרישות פונקציונליות (של השפה עצמה), דרישות ממשקים, ודרישות אחרות הקשורות יותר בפיתוח המוצר.
המוצר הוא שפת תכנות לכל דבר, המאפשרת למשתמש לכתוב תוכניות ולהריצן. השפה תכלול אריתמיקה פשוטה, משתנים, תנאים, לולאות, פרוצדורות, ואף שימוש בתוכנות חיצוניות.
קהל היעד של המוצר הוא מתכנתים מתחילים או אנשים שרוצים ללמוד לתכנת. השפה תהיה מאוד בסיסית ויחסית קלה ללמוד, ולא תבלבל את המשתמשים עם פיצ'רים יותר מסובכים שלא ישתמשו בהם. השפה תוכל לשמש כמדרגה לשפות תכנות יותר שימושיות ומסובכות כגון פייתון או ג'אוה. תיאורטית, השפה יכולה לשמש גם מתכנתים מנוסים, אך טבע השפה יהפוך אותה לחסרת תועלת מול שפה כמו פייתון, שגם היא קלה לכתיבה אך חזקה הרבה יותר.
על המערכת לבצע את ההוראות במהירות רבה. על המערכת לתמוך במספר מערכות הפעלה שונות. על המערכת לזהות שגיאות ולהציג אותן במפורט בפני המשתמש.
אספיק ליישם את כל המאפיינים המתוכננים לתוך המערכת. המערכת תרוץ בסביבת ווינדווס.
- אריתמיקה - פעולות חשבון וביצוען.
- משתנים - שמירת ערכים במשתנים וביצוע פעולות עליהם.
- משתנים קבועים שלא יכולים להשתנות.
- משתנים גלובליים.
- משתנים לוקאליים וscope.
- טיפוסי נתונים - int, float, boolean, string, array.
- תנאים וקפיצות - הרצה או דילוג על קוד על בסיס ערך מסוג boolean.
- if-elif-else.
- לולאות - חזרה על קוד על בסיס תנאי.
- לולאת for - מוסיפה גם הגדרה לפני הלולאה ופעולה בסופה.
- פרוצדורות ומאקרוים - ביצוע קטעי קוד מבלי לכתוב אותם פעמים רבות, אלא לקרוא להם בשם.
- פונקציות - פרוצדורות שיכולות להחזיר ערך.
- שימוש בפונקציות או תוכנות חיצוניות, על מנת לאפשר פעולות יותר מסובכות כגון תקשורת ברשת.
- ממשק CLI - נותן למשתמש להריץ קבצי קוד שכתב.
- ממשק בין הscanner לparser - הscanner צריך להעביר לparser את הtokens שיצר.
- ממשק בין הparser לinterpreter - הparser צריך להעביר לinterpreter את הAST שיצר מהtokens.
- ממשק REPL - עוד ממשק CLI, אך שנותן למשתמש להריץ קוד ישירות משורת הפקודה במקום מקובץ שיצר מראש.
- Lexing - יצירת תזרים tokens מקוד המקור.
- Parsing - יצירת AST מתזרים הtokens שיוצר הscanner.
- Bytecode Compilation - יצירת bytecode מהAST.
- Bytecode Interpreter/VM - מעבר על הbytecode וביצוע ההוראות.
- שגיאות - פירוט שגיאות לשורה והתו בהם קורה השגיאה.