קדם-מעבד

מתוך ויקיפדיה, האנציקלופדיה החופשית

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

תהליך ההידור בחלק מהשפות, למשל PL/I ו־C, מכיל שלב של קדם־עיבוד.

קדם־מעבדים מילוליים[עריכת קוד מקור | עריכה]

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

קדם־מעבד ב־C[עריכת קוד מקור | עריכה]

ערך מורחב – הקדם-מעבד של שפת C

הדוגמה הנפוצה ביותר לקדם־מעבד מילולי הוא הקדם־מעבד של C, המפרש שורות המתחילות בסימן # כהנחיות (directives) ובפרט ההנחיות: define#,‏ include#. מכיוון שהקדם־מעבד אינו יודע דבר אודות השפה, הוא עלול לבצע פעולות המחבלות בפעילות התוכנית ויש צורך בזהירות רבה מצד המתכנת.

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

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

קדם־מעבדים תחביריים[עריכת קוד מקור | עריכה]

קדם־מעבד תחבירי הוצג לראשונה במשפחת השפות LISP. תפקידו להמיר עצים תחביריים בהתאם למספר כללים המוגדרים על ידי המשתמש. בחלק מהשפות הכללים נכתבים בשפת התכנות עצמה, למשל בLISP וב־OCaml. שפות אחרות מסתמכות על שפה חיצונית להגדרת ההמרות, למשל קדם־מעבד XSL עבור XML.

קדם־מעבדים תחביריים משמשים בדרך כלל להתאמת תחביר של שפה, הרחבת שפה, הכללה של שפה המיועדת לתחום ספציפי (DSL) בתוך שפה למטרות כלליות.

ראו גם[עריכת קוד מקור | עריכה]