ניתוח מילולי

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

תוכנית או פונקציה אשר מבצעת את הניתוח המילולי נקראת מנתח מילולי (lexer) או סורק (scanner).

תפקידו של המנתח המילולי הוא לבדוק עבור כל משפט האם אבני הבניין שמרכיבות אותו הן חוקיות לפי הגדרות שפת התכנות. לרוב, הגדרת אבני הבניין החוקיות מתבצעת בעזרת ביטויים רגולריים, ובהתאמה הסורק מתבסס על אוטומט סופי. תהליך פירוק המשפט נקרא Tokenize, כלומר, סיווג כל אבני הבניין לקטגוריות שלהם. בתהליך זה כל מילה במשפט (Lexeme) מסווגת ומוחלפת באסימון (Token) אליו היא מתאימה. האסימון הוא למעשה מחרוזת שהוקצתה לה (assigned) משמעות כלשהי, והוא בנוי (structured) כזוג המורכב משם האסימון וערך האסימון (אופציונלי).[1] אסימונים נפוצים הם:

  • מזהה (identifier): שמות שהמתכנת בוחר;
  • מילת מפתח (keyword): שמות שכבר נמצאים בשפת התכנות;
  • מפריד (seperator): סימני פיסוק ומפרידים זוגיים;
  • אופרטור: סמלים המבצעים פעולות על ארגומנטים ומולידים תוצאות;
  • ליטרל (literal): ערך מספרי, לוגי, או טקסטואלי;
  • הערה (comment): שורה, בלוק של שורות.
שם אסימון ערכי אסימון לדוגמה
מזהה (identifier) x, color, UP
מילת מפתח (keyword)
שגיאות פרמטריות בתבנית:קוד

פרמטרים [ 2 ] לא מופיעים בהגדרת התבנית
if,
שגיאות פרמטריות בתבנית:קוד

פרמטרים [ 2 ] לא מופיעים בהגדרת התבנית
while,
שגיאות פרמטריות בתבנית:קוד

פרמטרים [ 2 ] לא מופיעים בהגדרת התבנית
return
מפריד (seperator) }, (, ;
אופרטור
שגיאות פרמטריות בתבנית:קוד

פרמטרים [ 2 ] לא מופיעים בהגדרת התבנית
+,
שגיאות פרמטריות בתבנית:קוד

פרמטרים [ 2 ] לא מופיעים בהגדרת התבנית
<,
שגיאות פרמטריות בתבנית:קוד

פרמטרים [ 2 ] לא מופיעים בהגדרת התבנית
=
ליטרל
שגיאות פרמטריות בתבנית:קוד

פרמטרים [ 2 ] לא מופיעים בהגדרת התבנית
true,
שגיאות פרמטריות בתבנית:קוד

פרמטרים [ 2 ] לא מופיעים בהגדרת התבנית
6.02e23,
שגיאות פרמטריות בתבנית:קוד

פרמטרים [ 2 ] לא מופיעים בהגדרת התבנית
"music"
הערה (comment)
שגיאות פרמטריות בתבנית:קוד

פרמטרים [ 2 ] לא מופיעים בהגדרת התבנית
/* Retrieves user data */,
שגיאות פרמטריות בתבנית:קוד

פרמטרים [ 2 ] לא מופיעים בהגדרת התבנית
// must be negative

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

דוגמהעריכה

הפקודה:

sum = a + b;

עשויה להיות מתורגמת לרצף האסימונים הבא:

Tok_id("sum")
Tok_assign
Tok_id("a")
Tok_plus
Tok_id("b")
Tok_semicolon

קישורים חיצונייםעריכה

הערות שולייםעריכה

  1. ^ page 111, "Compilers Principles, Techniques, & Tools, 2nd Ed." (WorldCat) by Aho, Lam, Sethi and Ullman, as quoted in https://stackoverflow.com/questions/14954721/what-is-the-difference-between-token-and-lexeme