Smart-World Surf

יחידה 3: ניתוח לקסיקלי וסינטקטי

איך מחשב מבין את מבנה הקוד.
אסימונים (Tokens)ביטויים רגולרייםדקדוקים חסרי הקשר (CFG)עצי ניתוח (Parse Trees)

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

ניתוח לקסיקלי: זיהוי אבני הבניין של הקוד

השלב הראשון בהבנת קוד המקור הוא הניתוח הלקסיקלי (Lexical Analysis), המכונה גם סריקה (Scanning). בשלב זה, הקומפיילר (או המפרש) קורא את קוד המקור תו אחר תו ומקבץ אותם ליחידות משמעותיות.

אסימונים (Tokens): היחידות הלוגיות הבסיסיות ביותר של שפת תכנות, המייצגות קטגוריה של לקסמות. לדוגמה, מזהה, מילת מפתח, אופרטור, מספר קבוע.
לקסמה (Lexeme): רצף תווים ספציפי בקוד המקור התואם לאסימון מסוים. לדוגמה, אם האסימון הוא "מזהה", הלקסמה יכולה להיות "x", "count", "myVariable".

ביטויים רגולריים להגדרת אסימונים

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

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

ניתוח סינטקטי: בניית מבנה הקוד

לאחר שהמנתח הלקסיקלי סיפק זרם של אסימונים, המנתח הסינטקטי (Syntactic Analysis), המכונה גם מנתח תחבירי (Parser), נכנס לפעולה. תפקידו הוא לבדוק אם רצף האסימונים תואם את כללי הדקדוק של השפה וליצור ייצוג מבני של הקוד.

דקדוקים חסרי הקשר (Context-Free Grammars - CFG): מודל פורמלי לתיאור התחביר של שפות תכנות. CFG מורכב מסט של כללי יצירה (Production Rules) המגדירים כיצד ניתן לבנות מבנים חוקיים מהאסימונים.

עצי ניתוח: ייצוג ויזואלי של המבנה

התוצר העיקרי של הניתוח הסינטקטי הוא עץ הניתוח, המכונה גם עץ תחבירי (Parse Tree) או עץ גזירה (Derivation Tree). עץ זה מציג את המבנה ההיררכי של הקוד בהתאם לכללי הדקדוק.

עצי ניתוח (Parse Trees): ייצוג גרפי של הגזירה של רצף אסימונים מכללי הדקדוק חסר ההקשר. השורש הוא סמל ההתחלה, הצמתים הפנימיים הם סמלים לא-טרמינליים, ועלי העץ הם סמלים טרמינליים (אסימונים).

עץ הניתוח מאפשר לקומפיילר להבין את המשמעות המבנית של הקוד, למשל, איזה אופרטור קודם לאיזה, או מהו גוף הלולאה. הוא מהווה בסיס לשלבים הבאים בקומפילציה, כמו ניתוח סמנטי ויצירת קוד ביניים.

הקשר בין ניתוח לקסיקלי לסינטקטי

שני השלבים הללו פועלים בתיאום הדוק, בדרך כלל באופן איטרטיבי. המנתח הסינטקטי "מבקש" מהמנתח הלקסיקלי את האסימון הבא בכל פעם שהוא זקוק לו כדי להמשיך בבניית עץ הניתוח.

ניתוח לקסיקלי

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

ניתוח סינטקטי

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

שאלות לדיון

  • הסבר את ההבדל המהותי בין אסימון ללקסמה, ותן דוגמה לכל אחד מהם בהקשר של שפת תכנות.
  • כיצד ביטויים רגולריים תורמים ליעילות ולדיוק של הניתוח הלקסיקלי? תאר מצב שבו הגדרה לא נכונה של ביטוי רגולרי יכולה לגרום לשגיאות.
  • מהו התפקיד של דקדוק חסר הקשר (CFG) בניתוח סינטקטי? ציין את ארבעת המרכיבים העיקריים של CFG.
  • בהינתן קטע קוד פשוט (לדוגמה: x = y + 5;), תאר בקצרה את תהליך הניתוח הלקסיקלי והסינטקטי שיעבור עליו, כולל התוצרים בכל שלב.

נקודות לתשובת מודל

  • אסימון ולקסמה: אסימון הוא קטגוריה (למשל, ID, NUMBER), לקסמה היא מופע ספציפי של הקטגוריה (למשל, "myVar", "123").
  • ביטויים רגולריים: מגדירים תבניות ללקסמות, מאפשרים זיהוי אוטומטי ויעיל של אסימונים. שגיאה בהגדרה עלולה לגרום לזיהוי שגוי או אי-זיהוי של לקסמות חוקיות.
  • דקדוק חסר הקשר (CFG): מגדיר את כללי התחביר של השפה. מרכיבים: סמלים טרמינליים, סמלים לא-טרמינליים, סמל התחלה, כללי יצירה.
  • עצי ניתוח: ייצוג היררכי של מבנה הקוד, נבנה על ידי הפארסר בהתאם ל-CFG. משמש לבדיקת תקינות תחבירית ולבסיס לשלבים הבאים.
  • אינטראקציה: הלקסר מספק אסימונים לפארסר, הפארסר בונה מהם את עץ הניתוח ובודק עמידה בכללי הדקדוק. כל שלב מטפל בסוג שגיאות שונה.
מצאתם טעות או שחסר משהו?
→ הקודמת
סקירה היסטורית ופרדיגמות
הבאה ←
סמנטיקה של שפות תכנות