א מהדר הוא תכנית זה מתורגם לקריאה אנושית קוד מקור לקוד מכונה להפעלה של מחשב. כדי לעשות זאת בהצלחה, על קוד הקריאה לבני אדם לעמוד בתקן תחביר כללים של שפת תכנות שהיא כתובה בה. המהדר הוא רק תוכנית ואינו יכול לתקן את הקוד עבורך. אם אתה שוגה, עליך לתקן את התחביר או שהוא לא ילבש.
מה קורה כשמרכיבים קוד?
המורכבות של המהדר תלויה בתחביר של השפה וכמה הפשטה שפת תכנות זו מספק. מהדר C הוא הרבה יותר פשוט מאשר מהדר עבור C ++ או C #.
ניתוח לקסי
בעת ההרכבה, המהדר קורא לראשונה זרם של תווים מקובץ קוד מקור ומייצר זרם של אסימונים לקסיקליים. לדוגמה, קוד C ++:
int C = (A * B) +10;
ניתן לנתח כאסימונים אלה:
- הקלד "int"
- משתנה "C"
- שווים
- סוגר שמאל
- משתנה "A"
- פעמים
- משתנה "B"
- סוגר ימין
- ועוד
- מילולית "10"
ניתוח תחבירי
הפלט הלקסיקלי עובר לחלק המנתח התחבירי של המהדר, המשתמש בכללי הדקדוק כדי להחליט אם הקלט תקף או לא. אלא אם כן משתנים A ו- B הוכרזו בעבר והיו בהיקפים, המהדר יכול לומר:
- 'A': מזהה לא מוצהר.
אם הם היו מוכרזים אך לא אותחלו. המהדר מפרסם אזהרה:
- משתנה מקומי 'A' משמש מבלי לאתחל.
אסור להתעלם מאזהרות המהדר. הם יכולים לשבור את הקוד שלך בדרכים מוזרות ובלתי צפויות. תקן תמיד אזהרות מהדר.
מעבר או שניים?
כמה שפות תכנות נכתבות כך שמהדר יכול לקרוא את קוד המקור רק פעם אחת ולייצר את קוד המכונה. פסקל היא שפה כזו. רב מהדרים דורשים לפחות שני מעברים. לפעמים זה בגלל הצהרות קדימה של פונקציות או שיעורים.
ב- C ++ ניתן להכריז על מחלקה אך לא להגדיר אותה עד מאוחר יותר. המהדר אינו מסוגל להבין כמה זיכרון הכיתה זקוקה לו עד שהוא אוצר את גוף הכיתה. עליו לקרוא מחדש את קוד המקור לפני יצירת קוד ההתקן הנכון.
יצירת קוד מכונה
בהנחה שהמהדר מסיים בהצלחה את הניתוחים הלקסיקליים והתחביריים, השלב האחרון הוא יצירת קוד מכונה. זהו תהליך מסובך, במיוחד עם מעבדים מודרניים.
המהירות של הידור הפעלה הקוד צריך להיות מהיר ככל האפשר ויכול להשתנות מאוד בהתאם לאיכות הקוד שנוצר וכמה אופטימיזציה התבקשה.
מרבית המהדרים מאפשרים לך לציין את כמות האופטימיזציה - הידועה בדרך כלל כקובצי באגים מהירים ואופטימיזציה מלאה עבור הקוד ששוחרר.
יצירת קוד מאתגרת
כותב המהדר עומד בפני אתגרים בעת כתיבת מחולל קוד. מעבדים רבים מזרזים את העיבוד באמצעות
- צנרת הוראות
- פנימי מטמון.
אם כל ההוראות בתוך קוד לולאה ניתן לערוך בבית מעבד מטמון, אז הלולאה הזו פועלת הרבה יותר מהר מאשר כאשר המעבד צריך להביא הוראות מה- RAM הראשי. מטמון המעבד הוא גוש זיכרון המובנה בשבב ה- CPU אליו ניגשים הרבה יותר מהר מאשר נתונים ב- RAM הראשי.
מטמון ותורים
לרוב המעבדים יש תור של אחזור מראש בו המעבד קורא הוראות למטמון לפני שהוא מבצע אותם. אם קורה סניף מותנה, על המעבד לטעון מחדש את התור. יש לייצר את הקוד כדי למזער את זה.
למעבדים רבים חלקים נפרדים עבור:
- חשבון מספר שלם (מספרים שלמים)
- אריתמטיקה של נקודה צפה (מספרים שברים)
פעולות אלה יכולות לרוב לרוץ במקביל להגברת המהירות.
מהדרים בדרך כלל מייצרים קוד מכונה לקבצי אובייקט שהם אז מקושרים יחד על ידי תוכנית קישוריות.