קדם-מעבד – הבדלי גרסאות

תוכן שנמחק תוכן שנוסף
מאין תקציר עריכה
שורה 1:
ב[[מדעי המחשב]] '''קדם מעבד''' הוא תוכנית המעבדת קלט ויוצרת ממנו פלט המיועד להיות קלט לתוכנית אחרת, בדרך כלל עבור [[מהדר]]. סוג העיבוד תלוי בטבעו של הקדם מעבד, ישנם קדם מעבדים הבנויים להחלפה טקסטואלית של [[מאקרו (תכנות)|פקודות מאקרו]] גרידא, בעוד אחרים כוללים יכולות מלאות של שפת תכנות.
 
תהליך ה[[מהדר|הידור]] בחלק מהשפות, למשל [[PL/I]] ו-[[‏C (שפת תכנות)|C]], מכיל שלב של קדם-עיבוד.
 
==קדם מעבדים מילוליים==
קדם מעבדים מילוליים הם הקדם מעבדים מהרמה הנמוכה ביותר של קדם מעבדים, המבצעים [[ניתוח מילולי]] בלבד, על ידי החלפת סדרות תויםתווים בסדרות תויםתווים אחרות על פי הגדרת המשתמש. בייחוד משמשים להחלפה טקסטואלית של [[מאקרו (תכנות)|פקודות מאקרו]], ולהכללה של קובצי כותרת (header files).
===קדם מעבד ב-[[‏C (שפת תכנות)|C]]===
הדוגמה הנפוצה ביותר לקדם מעבד מילולי הוא קדם המעבד של [[‏C (שפת תכנות)|C]], המפרש שורות המתחילות בסימן # כהנחיות (directives) ובפרט ההנחיות: define#,{{כ}} include#. בגלל שהקדם מעבד לא יודע דבר אודות השפה, הוא עלול לבצע פעולות המחבלות בפעילות התוכנית ויש צורך בזהירות רבה מצד המתכנת.
 
הנחיות קדם מעבד לשם ביצוע החלפות מאקרו, מבוצעות על ידי ההנחייהההנחיה define#. הנחייה זו משמשת להגדרת שמות משמעותיים לקבועים על ידי כתיבת השם ולאחריו הקבוע המבוקש. שימוש נוסף נעשה על ידי הצמדת סוגריים לשם, בתוך הסוגריים כותבים את הפרמטרים של פקודת המאקרו, ולאחר מכן כותבים את פקודת המאקרו, תוך שימוש בפרמטרים. קדם המעבד יחליף כל מופע של פרמטר בשמו של הפרמטר שנשלח לפקודה.
 
הנחיית הכללה של קובצי כותרת נעשית על ידי include#. שימוש בפונקציות הנמצאות בקבצים שונים, בין מהספרייה הסטנדרטית ובין מקבצים של המתכנת, מצריכה הכרזה על הפונקציות וכדי לחסוך כתיבה של ההכרזות בכל תוכנית מכלילים קבצים של הכרזות, הנקראים קובצי כותרת על ידי הנחייה זו.
 
==קדם מעבדים תחביריים==
קדם מעבד תחבירי הוצג לראשונה במשפחת השפות [[LISP]]. תפקידו להמיר עצים תחביריים בהתאם למספר כללים המוגדרים על ידי המשתמש. בחלק מהשפות הכללים נכתבים בשפת התכנות עצמה, למשל ב[[LISP]] ובOCamlוב-OCaml. שפות אחרות מסתמכות על שפה חיצונית להגדרת ההמרות, למשל קדם מעבד [[XSL]] עבור [[XML]].
 
קדם מעבדים תחביריים משמשים בדרך כלל להתאמת תחביר של שפה, הרחבת שפה, הכללה של שפה המיועדת לתחום ספציפי (DSL) בתוך שפה למטרות כלליות.