Skip to content

Latest commit

 

History

History
88 lines (62 loc) · 5.66 KB

characterization.md

File metadata and controls

88 lines (62 loc) · 5.66 KB

SIMPL

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 וביצוע ההוראות.
  • שגיאות - פירוט שגיאות לשורה והתו בהם קורה השגיאה.