המונח "הידור" מפנה לכאן. לערך העוסק במושג ביהדות, ראו הידור מצווה.
תרשים המתאר פעולת מהדר בעל מספר שפות ומספר יעדים
**מְהַדֵּר** (באנגלית: **Compiler**) הוא תוכנית מחשב המתרגמת משפת מחשב אחת לשפת מחשב אחרת. המהדר הקלאסי מקבל כקלט תוכנית הכתובה בשפה עילית ומתרגם אותה לתוכנית בשפת מכונה. מהדר תואם בדרך כלל לסוג מעבד מסוים בלבד, ולגרסת שפה מסוימת, ותוצריו לא יהיו תואמים למעבד אחר. פעולת המהדר קרויה **הידוּר**.

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

תהליך בניית תוכנת מחשב מתחלק לשני שלבּים עיקריים - הידור וקישור. המהדר אחראי על תהליך ההידור. בתהליך ה**הידור** ממיר המהדר את הקוד שכתב המתכנת, לשפת מכונה, כך שעבור כל קובץ שעבר הידור נוצר קובץ מקביל בשפת מכונה. קובץ זה מסומן בדרך כלל כקובץ OBJ (או O במהדרים אחרים).
תהליך ה**הידור** מורכב ממספר תת-שלבים עיקריים: ניתוח מילולי, ניתוח תחבירי, ניתוח סמנטי, ולבסוף שלב יצירת קוד המכונה.

בתהליך ה**קישור** מקושרים ביחד קבצים אלה לתוצר סופי - תוכנה שניתנת לביצוע במעבד ובמערכת הפעלה מסוימת.

מהדרים של שפות תכנות מסוימות מפיקים קוד למעבד וירטואלי שאינו מיושם באופן ישיר בחומרה. דוגמה לשפות כאלה - ‏Java‏,
‎C#‎ ו-Smalltalk. היתרון בשיטה זו הוא היכולת להריץ את אותו קובץ מהודר במעבדים מסוגים שונים.

רקע
---

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

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

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

שגיאות זמן הידור
----------------

שגיאות זמן הידור הן שם כולל לשגיאות שעל המהדר לזהות כבר בשלב ה**הידור**.
שגיאות מסוגים שונים יתגלו בשלבים שונים בזמן ההידור.

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

תלוי באופי השגיאה, זיהוי שגיאת זמן הידור עלולה לעצור את כל פעולת ההידור, או לאפשר לתהליך להמשיך.

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

ראו גם
------

* מקשר
* מונחים בתוכנה
* GNU bison
* מהדורה

קישורים חיצוניים
----------------

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

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

1. ↑  Chengnian Sun, Vu Le, Qirun Zhang, Zhendong Su, Toward understanding compiler bugs in GCC and LLVM, **Proceedings of the 25th International Symposium on Software Testing and Analysis**, ISSTA 2016, Association for Computing Machinery, 2016-07-18, עמ' 294–305 doi: 10.1145/2931037.2931074

| תחומים במדעי המחשב |
| --- |
| יסודות מתמטים | לוגיקה מתמטית • תורת הקבוצות • תורת המספרים • תורת הגרפים • תורת הטיפוסים • תורת הקטגוריות • אנליזה נומרית • תורת האינפורמציה |
| תורת החישוביות | תורת האוטומטים • תורת הרקורסיה • תורת הסיבוכיות • מחשוב קוונטי |
| אלגוריתמים ומבנה נתונים | אנליזה של אלגוריתמים • גאומטריה חישובית |
| שפות תכנות ומהדרים | מפרש • פרדיגמת תכנות (תכנות פרוצדורלי • תכנות מונחה עצמים • תכנות פונקציונלי • תכנות לוגי) |
| חישוב מבוזר ועיבוד מקבילי | עיבוד מקבילי • מחשוב סריגי • בקרת מקביליות |
| הנדסת תוכנה | ניתוח מערכות מידע • עיצוב תוכנה • תכנות מחשבים • שיטות פורמליות • בדיקות תוכנה • מתודולוגיית פיתוח תוכנה |
| תקשורת | ניתוב • טופולוגיית רשת • קריפטוגרפיה |
| מסד נתונים | מסד נתונים יחסי • SQL • תנועה • אינדקסים • כריית מידע • CAP theorem |
| בינה מלאכותית | חשיבה אוטומטית • בלשנות חישובית • ראייה ממוחשבת • עיבוד שפה טבעית • בינה חישובית • מערכת מומחה • למידה חישובית • רובוטיקה |
| גרפיקה | הדמיה ממוחשבת • הנפשה ממוחשבת • עיבוד תמונה |
| שפות פורמליות | שפה רגולרית • שפה חסרת הקשר • שפה תלוית הקשר • ההיררכיה של חומסקי |
| שימושים במדע | ביואינפורמטיקה • מדעים קוגניטיביים • כימיה חישובית • פיזיקה חישובית • אנליזה נומרית |

|  |  |
| --- | --- |
| בקרת זהויות עריכת הנתון בוויקינתונים | 
* NLI: 987007531795805171
* BNE: XX532454
* BnF: cb120631538 (data)
* GND: 4148248-7
* LCCN: sh86007588
* NDL: 01191219
* NKC: ph316225

 |