GoGPT Best VPN GoSearch

OnWorks فافيكون

gpp - عبر الإنترنت في السحابة

قم بتشغيل gpp في موفر الاستضافة المجاني OnWorks عبر Ubuntu Online أو Fedora Online أو محاكي Windows عبر الإنترنت أو محاكي MAC OS عبر الإنترنت

هذا هو الأمر gpp الذي يمكن تشغيله في موفر الاستضافة المجاني OnWorks باستخدام إحدى محطات العمل المجانية المتعددة عبر الإنترنت مثل Ubuntu Online أو Fedora Online أو محاكي Windows عبر الإنترنت أو محاكي MAC OS عبر الإنترنت

برنامج:

اسم


GPP - المعالج المسبق العام

موجز


الناتج المحلي الإجمالي [-{س|O} ملف] [-أنا/تشمل/المسار] [-دname=val ...]
[-z|+z] [-x] [-m] [-C|-T|-H|-X|-P|-U ... [-M ...]]
[-ن|+ن] [+ج str1 str2] [+ق str1 str2 c]
[-ج str1] [--نوسدينك] [--نوكورينك]
[--curdirinclast] [--warninglevel n]
[--includemarker شارع] [--يشمل ملف]
[شرير]

gpp --مساعدة

gpp --version

الوصف


GPP عبارة عن معالج مسبق للأغراض العامة مع بناء جملة قابل للتخصيص، ومناسب لمجموعة واسعة
من مهام المعالجة المسبقة. استقلالها عن أي لغة برمجة يجعلها أكثر من ذلك بكثير
متعدد الاستخدامات من cpp، في حين أن تركيبه أخف وأكثر مرونة من تركيب m4.

يستهدف GPP جميع مهام المعالجة المسبقة الشائعة حيث لا يكون cpp مناسبًا وحيث لا
هناك حاجة إلى ميزات متطورة للغاية. لكي تكون قادرًا على المعالجة بكفاءة متساوية
ملفات نصية أو كود المصدر في مجموعة متنوعة من اللغات، فإن بناء الجملة المستخدم بواسطة GPP كامل
قابل للتخصيص. التعامل مع التعليقات والسلاسل متقدم بشكل خاص.

في البداية، يفهم GPP فقط مجموعة صغيرة من وحدات الماكرو المضمنة، والتي تسمى وحدات الماكرو الفوقية.
تسمح وحدات الماكرو الفوقية هذه بتعريف المستخدم وحدات الماكرو وكذلك بعض العمليات الأساسية
تشكيل جوهر نظام المعالجة المسبقة، بما في ذلك الاختبارات الشرطية، والحساب
التقييم، ومطابقة أحرف البدل (القفز)، ومواصفات بناء الجملة. كل ماكرو المستخدم
تعريفات عالمية -- أيوتظل صالحة حتى تتم إزالتها صراحةً؛ وحدات الماكرو الفوقية
لا يمكن إعادة تعريفها. مع كل تعريف ماكرو مستخدم، يتتبع GPP ما يقابله
مواصفات بناء الجملة بحيث يمكن استدعاء الماكرو بأمان بغض النظر عن أي ماكرو لاحق
التغيير في وضع التشغيل.

بالإضافة إلى وحدات الماكرو، يفهم GPP التعليقات والسلاسل، التي يمكن بناء جملتها وسلوكها
يمكن تخصيصها على نطاق واسع لتناسب أي غرض معين. التعليقات والسلاسل داخليا
نفس البناء، لذا فإن كل ما ينطبق على التعليقات ينطبق على السلاسل أيضًا.

OPTIONS


يتعرف GPP على مفاتيح وخيارات سطر الأوامر التالية. لاحظ أن -nostdinc،
-nocurinc، -curdirinclast، -warninglevel، و -includemarker خيارات من الإصدار 2.1 و
في وقت سابق تم إهمالها ولا ينبغي استخدامها. استخدم متغيرات "الخيار الطويل" بدلاً من ذلك
(-نوسدينك، وما إلى ذلك.).

-h --مساعدة
اطبع رسالة تعليمات قصيرة.

--الإصدار
طباعة معلومات الإصدار.

-o ملف
حدد الملف الذي يجب إرسال كل المخرجات إليه (افتراضيًا، يتم إرسال كل شيء
إلى الإخراج القياسي).

-O ملف
تحديد الملف الذي سيتم إرسال جميع المخرجات إليه؛ يتم إرسال الإخراج في وقت واحد إلى
com.stdout.

-I/تشمل/المسار
تحديد المسار حيث تتضمن # سيبحث meta-macro عن ملفات التضمين إذا كانت موجودة
غير موجودة في الدليل الحالي. الافتراضي هو / البيرة / تتضمن إذا لا -أنا
تم تحديد الخيار. يمكن تحديد خيارات متعددة -I للبحث في عدة خيارات
الدلائل.

-Dname=val
تحديد الماكرو المستخدم الاسم على قدم المساواة فال. وهذا يعادل تماما استخدام
القادم # تعريف meta-macro، ولكنه يجعل من الممكن تحديد وحدات الماكرو من الأمر-
خط. لو فال يشير إلى الوسائط أو وحدات الماكرو الأخرى، التي يجب أن تتوافق معها
بناء جملة الوضع المحدد في سطر الأوامر. بدءًا من الإصدار 2.1،
يُسمح بتسمية وسيطة الماكرو في سطر الأوامر. بناء الجملة هو كما يلي:
-Dالماكرو(أرج 1،...)=تعريف. يتم تحديد الوسائط في بناء جملة النمط C،
بدون أي مسافة بيضاء، ولكن يجب أن يظل التعريف متوافقًا مع بناء الجملة
الوضع المحدد في سطر الأوامر.

+z اضبط وضع النص على وضع Unix (فاصل LF). أي حرف CR في الإدخال هو
التخلص منه بشكل منهجي. هذا هو الإعداد الافتراضي في أنظمة Unix.

-z اضبط وضع النص على وضع DOS (فاصل CR-LF). في هذا الوضع جميع أحرف CR موجودة
تتم إزالتها من الإدخال، ويتم تحويل كافة أحرف LF الإخراج إلى CR-LF. هذا
هو الإعداد الافتراضي إذا تم تجميع GPP باستخدام خيار WIN_NT.

-x تمكين استخدام # exec ميتا ماكرو. منذ # exec يتضمن إخراج
سطر أوامر shell التعسفي، قد يسبب تهديدًا أمنيًا محتملاً، وبالتالي
معطل ما لم يتم تحديد هذا الخيار.

-m قم بتمكين الوضع التلقائي للتبديل إلى وضع توافق CPP إذا كان اسم ملف
ينتهي الملف المضمن بـ `.h' أو `.c'. هذا يجعل من الممكن تضمين رأس C
الملفات مع تعديلات طفيفة فقط.

-n منع إزالة أحرف السطر الجديد أو المسافات البيضاء من الإدخال عندما
أنها تحدث كنهاية مكالمة ماكرو أو تعليق. بشكل افتراضي، عندما يكون السطر الجديد
أو حرف المسافة البيضاء يشكل نهاية الماكرو أو التعليق الذي يتم تحليله كجزء
لاستدعاء الماكرو أو التعليق وبالتالي إزالته من الإخراج. استخدم الخيار -n
للاحتفاظ بالحرف الأخير في دفق الإدخال إذا كان عبارة عن مسافة بيضاء أو سطر جديد.
يتم تنشيط هذا في أوضاع CPP وProlog.

+n عكس -ن. هذا هو الوضع الافتراضي في كافة الأوضاع باستثناء CPP وProlog. ملحوظة
يجب وضع +n بعد -C أو -P من أجل الحصول على أي تأثير.

-U أرج 1 أرج 9
الوضع المحدد من قبل المستخدم. تعتبر وسيطات سطر الأوامر التسعة التالية
على التوالي، تسلسل بداية الماكرو، وتسلسل نهاية الماكرو لمكالمة بدون
الحجج، تسلسل بداية الوسيطة، فاصل الوسيطة، نهاية الوسيطة
التسلسل، قائمة الأحرف المراد تكديسها لموازنة الوسيطة، قائمة
الأحرف المراد فكها، السلسلة التي سيتم استخدامها للإشارة إلى الوسيطة
الرقم، وأخيرًا حرف الاقتباس (إذا لم يكن هناك أي حرف، فيجب أن تكون سلسلة فارغة
متاح). تنطبق هذه الإعدادات على كل من وحدات ماكرو المستخدم ووحدات الماكرو التعريفية، ما لم
يتم استخدام الخيار -M لتحديد الإعدادات الأخرى لوحدات الماكرو الوصفية. راجع القسم الخاص
مواصفات بناء الجملة لمزيد من التفاصيل.

-M أرج 1 أرج 7
مواصفات الوضع المعرفة من قبل المستخدم لوحدات الماكرو الوصفية. لا يمكن استخدام هذا الخيار إلا
مع -م. تعتبر وسيطات سطر الأوامر السبعة التالية
على التوالي، تسلسل بداية الماكرو، وتسلسل نهاية الماكرو لمكالمة بدون
الحجج، تسلسل بداية الوسيطة، فاصل الوسيطة، نهاية الوسيطة
التسلسل، وقائمة الأحرف المراد تكديسها لموازنة الوسيطات، وقائمة
شخصيات لتفكيك. انظر أدناه لمزيد من التفاصيل.

(إفتراضي الوضع)
الوضع الافتراضي هو وضع يشبه CPP بشكل غامض، لكنه لا يتعامل مع التعليقات، و
يعرض حالات عدم التوافق المختلفة مع CPP. وحدات الماكرو الوصفية النموذجية ووحدات ماكرو المستخدم
يبدو مثل هذا:

#تعريف س ص
ماكرو (الأرجنتين،...)

هذا الوضع يعادل

-U "" "" "(" ""، ")" "(" ")" "#" "\\"
-M "#" "\n" " " " " "\n" "(" ")"

-C وضع التوافق CPP. هذا هو الوضع الذي يكون فيه سلوك GPP هو الأقرب إليه
أن حزب الشعب الكمبودي. على عكس الوضع الافتراضي، يحدث توسيع الماكرو التعريفي فقط عند
بداية السطور، وتعليقات C والسلاسل مفهومة. هذا الوضع هو
أي ما يعادل

-n -U "" "" "(" ""، ")" "(" ")" "#" ""
-M "\n#\w" "\n" " " " "\n" "" ""
+c "/*" "*/" +c "//" "\n" +c "\\\n" ""
+s "\"" "\"" "\\" +s "'" "'" "\\"

-T وضع يشبه TeX. في هذا الوضع، تبدو وحدات الماكرو الوصفية النموذجية ووحدات ماكرو المستخدم كما يلي:

\تعريف {س} {y}
\ماكرو {أرج} {...}

لا توجد تعليقات مفهومة. هذا الوضع يعادل

-U "\\" "" "{" "}{" "}" "{" "}" "#" "@"

-H وضع يشبه HTML. في هذا الوضع، تبدو وحدات الماكرو الوصفية النموذجية ووحدات ماكرو المستخدم كما يلي:

<#تعريف س|ص>
<#وسيطة الماكرو|...>

لا توجد تعليقات مفهومة. هذا الوضع يعادل

-U "<#" ">" "\B" "|" ">" "<" ">" "#" "\\"

-X وضع يشبه XHTML. في هذا الوضع، تبدو وحدات الماكرو الوصفية النموذجية ووحدات ماكرو المستخدم كما يلي:

<#تعريف س|ص/>
<#وسيطة الماكرو|.../>

لا توجد تعليقات مفهومة. هذا الوضع يعادل

-U "<#" "/>" "\B" "|" "/>" "<" ">" "#" "\\"

-P وضع يشبه CPP متوافق مع Prolog. يختلف هذا الوضع عن وضع التوافق CPP
من خلال تعامله مع التعليقات، ويعادل

-n -U "" "" "(" ""، ")" "(" ")" "#" ""
-M "\n#\w" "\n" " " " "\n" "" ""
+ccss "\!o/*" "*/" +ccss "%" "\n" +ccii "\\\n" ""
+s "\"" "\"" "" +s "\!#'" "'" ""

+c str1 str2
تحديد التعليقات. أي حدث غير مقتبس من str1 سيتم تفسيرها على أنها
بداية تعليق. جميع المدخلات حتى التكرار التالي الأول لـ str2 سوف
يتم التخلص منها. يمكن استخدام هذا الخيار عدة مرات لتحديد أنواع مختلفة من
محددات التعليق المعلمة الاختيارية يمكن تحديدها لتغيير
سلوك التعليق و على سبيل المثالأو قم بتحويلها إلى سلسلة أو تجاهلها تحت
ظروف معينة، انظر أدناه.

-c str1
قم بإلغاء تحديد التعليقات أو السلاسل. مواصفات التعليق/السلسلة التي بدايتها
التسلسل str1 تم حذفه. وهذا مفيد لتغيير التعليق المضمن
مواصفات الوضع القياسي -- على سبيل المثال، وضع التوافق CPP.

+s str1 str2 c
تحديد السلاسل. أي حدث غير مقتبس من str1 سيتم تفسيرها على أنها
بداية سلسلة. جميع المدخلات حتى التكرار التالي الأول لـ str2 سوف
يكون الإخراج كما هو دون أي تقييم. المحددات نفسها هي الإخراج. لو c
إذا كانت غير فارغة، فسيتم استخدام الحرف الأول منها كـ a اقتباس سلسلة حرف -- أيأو المعلم
الشخصية التي وجودها مباشرة قبل حدوثها str2 يمنع ذلك من
إنهاء السلسلة. المعلمة الاختيارية يمكن تحديدها لتغيير
سلوك السلسلة و على سبيل المثال، وتحويله إلى تعليق، وتمكين التقييم الكلي
داخل السلسلة، أو تجاهل مواصفات السلسلة تحت بعض
ظروف. انظر أدناه.

-s str1
قم بإلغاء تحديد التعليقات أو السلاسل. مطابق لـ -ج.

--يشمل ملف
طريقة عملنا ملف قبل شرير

--نوستدينك
لا تبحث عن ملفات التضمين في الدليل القياسي /usr/include.

--nocurinc
لا تبحث عن تضمين الملفات في الدليل الحالي.

--curdirinclast
ابحث عن تضمين الملفات في الدليل الحالي بعد الدلائل المحددة بواسطة
-I وليس قبلهم.

--warninglevel n
اضبط مستوى التحذير على n (0، 1 أو 2). الافتراضي هو 2 (الأكثر مطولة).

--includemarker شارع
تعقب تتضمن # التوجيهات عن طريق إدراج علامة في دفق الإخراج. ال
يتم تحديد تنسيق العلامة بواسطة شارع، والتي يجب أن تحتوي على ثلاثة تكرارات لـ
الشخصية % (أو مكافئ ?). يتم استبدال التواجد الأول بالسطر
رقم، والثاني باسم الملف، والثالث بـ 1 أو 2 أو فارغ. عندما
تم تحديد الخيار في الوضع الافتراضي أو وضع cpp أو Prolog، ويبذل GPP قصارى جهده لضمان ذلك
أرقام الأسطر هذه هي نفسها في الإخراج كما في الإدخال عن طريق إدراج فارغ
خطوط في مكان التعاريف أو التعليقات.

شرير حدد ملف إدخال يقرأ منه GPP مدخلاته. إذا لم يكن هناك ملف الإدخال
المحدد، تتم قراءة الإدخال من الإدخال القياسي.

بناء الجملة SPECIFICATION


بناء جملة استدعاء الماكرو كما يلي: يجب أن يبدأ بتسلسل من الأحرف
مطابقة الماكرو بداية تسلسل كما هو محدد في الوضع الحالي، تليها على الفور
باسم الماكرو، والذي يجب أن يكون صالحًا معرف -- أي، تسلسل الحروف،
أرقام أو شرطات سفلية ("_"). يجب أن يتبع اسم الماكرو أ في صفقات الماكرو النهاية
تسلسل إذا لم يكن للماكرو أي وسائط، أو من خلال سلسلة من الوسائط التي بدأها
حجة بداية تسلسل. ثم يتم فصل الوسائط المختلفة بواسطة حجة
الفاصل، وينتهي الماكرو بـ a التداول الطويل الماكرو النهاية تسلسل.

في جميع الحالات، معلمات السياق الحالي - أي، تم تمرير الحجج إلى
الجسم الذي يتم تقييمه - يمكن الإشارة إليه باستخدام حجة مرجع تسلسل
متبوعًا برقم بين 1 و9. وبدلاً من ذلك، يمكن تسمية معلمات الماكرو (انظر
أقل). علاوة على ذلك، لتجنب التداخل بين بناء جملة GPP ومحتويات الملف
ملف الإدخال، أ اقتبس حرف متوفر. يمكن استخدام حرف الاقتباس لمنع
تفسير استدعاء ماكرو أو تعليق أو سلسلة على أنها أي شيء غير النص العادي. الإقتباس
الحرف "يحمي" الحرف التالي، ويتم إزالته دائمًا أثناء التقييم.
يتم تقييم حرفي الاقتباس المتتاليين كحرف اقتباس واحد.

أخيرًا، لتسهيل التحديد الصحيح للوسيطات، يمكن "تكديس" بعض الأحرف
عندما تحدث في وسيطة ماكرو، بحيث ينتهي فاصل الوسيطة أو تسلسل الماكرو
لا يتم تحليلها إذا كان نص الوسيطة غير متوازن. يسمح هذا بتداخل مكالمات الماكرو
دون استخدام علامات الاقتباس. إذا كانت هناك حاجة إلى وسيطة متوازنة بشكل غير صحيح، فاقتبس الأحرف
يجب إضافتها أمام بعض الأحرف المكدسة لجعلها متوازنة.

يمكن أن تختلف تسلسلات بناء الماكرو الموضحة أعلاه بالنسبة لوحدات الماكرو الوصفية ووحدات الماكرو
وحدات ماكرو المستخدم: هذا هو الحال في وضع CPP، على سبيل المثال. لاحظ أنه نظرًا لأن وحدات الماكرو الفوقية يمكنها ذلك
تحتوي على ما يصل إلى وسيطتين فقط، وقواعد ترسيم الوسيطة الثانية إلى حد ما
يُسمح بالتسلسلات الفاصلة للوسائط غير المقتبسة وغير المقتبسة في الوسيطة الثانية لـ
ميتا ماكرو.

ما لم يتم تحديد أحد أوضاع التشغيل القياسية، يمكن تحديد تسلسلات بناء الجملة المذكورة أعلاه
المحددة إما في سطر الأوامر، باستخدام خيارات -M و -U على التوالي لـ meta-
وحدات الماكرو ووحدات ماكرو المستخدم، أو داخل ملف الإدخال عبر ملف #الوضع هدف و #الوضع المستخدم ميتا
مكالمات الماكرو. في كلتا الحالتين، يتكون وصف الوضع من تسعة معلمات للمستخدم
مواصفات الماكرو، وهي تسلسل بداية الماكرو، وتسلسل نهاية الماكرو القصير، و
تسلسل بداية الوسيطة، فاصل الوسيطة، تسلسل نهاية الماكرو الطويل، السلسلة
سرد الأحرف المراد تكديسها، والسلسلة التي تسرد الأحرف المراد فكها، والوسيطة
التسلسل المرجعي، وأخيرا حرف الاقتباس. كما هو موضح أدناه، هذه التسلسلات
يجب أن يتم توفيره باستخدام بناء جملة سلاسل C؛ يجب أن يبدأوا بحرف غير أبجدي رقمي
الحرف، وفي السلاسل الخمس الأولى يمكن استخدام تسلسلات مطابقة خاصة (انظر
أقل). إذا كانت الوسيطة المقابلة لحرف الاقتباس عبارة عن سلسلة فارغة، فهذا
تم تعطيل وظيفة الوسيطة. بالنسبة للمواصفات الفوقية الكلية هناك سبعة فقط
المعلمات، حيث تتم مشاركة التسلسل المرجعي للوسيطة وحرف الاقتباس مع
بناء جملة الماكرو المستخدم.

بنية التعليق/السلسلة هي كما يلي: يجب أن تبدأ بتسلسل
الأحرف المطابقة للمعطى تعليق/سلسلة بداية تسلسل، وينتهي دائمًا عند الأول
حدوث تعليق/سلسلة النهاية تسلسل، إلا إذا سبقه عدد فردي من
تواجدات اقتباس سلسلة حرف (إذا تم تحديد مثل هذا الحرف). في
يمكن تحديد تعليق/سلاسل معينة في بعض الحالات لتمكين تقييم الماكرو داخل ملف
تعليق/سلسلة؛ في هذه الحالة، إذا تم تعريف حرف الاقتباس لوحدات الماكرو، فيمكن أن يكون كذلك
يتم استخدامه أيضًا لمنع انتهاء التعليق/السلسلة، مع اختلاف الماكرو
تتم إزالة حرف الاقتباس دائمًا من الإخراج بينما تتم إزالة حرف الاقتباس دائمًا
انتاج. لاحظ أيضًا أنه في ظل ظروف معينة يمكن أن تكون مواصفات التعليق/السلسلة
معاق، وفي هذه الحالة يتم ببساطة تجاهل تسلسل بداية التعليق/السلسلة. وأخيرا، فإنه
من الممكن تحديد أ سلسلة تحذير حرف الذي وجوده داخل تعليق/سلسلة
سيؤدي إلى قيام GPP بإخراج تحذير (وهذا مفيد لتحديد موقع السلاسل غير المنتهية في cpp
وضع). لاحظ أنه لا يُسمح لملفات الإدخال أن تحتوي على تعليقات/سلاسل غير منتهية.

يمكن الإعلان عن مواصفات التعليق/السلسلة من داخل ملف الإدخال باستخدام الملف #الوضع
التعليق استدعاء ميتا ماكرو (أو ما يعادله #الوضع سلسلة) ، وفي هذه الحالة عدد C
السلاسل التي سيتم تقديمها كوسائط لوصف التعليق/السلسلة يمكن أن تكون في أي مكان بينهما
اثنان وأربعة: الوسيطتان الأوليتان (إلزامية) هما تسلسل البداية والنهاية
التسلسل، ويمكن الاستفادة من التسلسلات المطابقة الخاصة (انظر أدناه). لا يجوز لهم ذلك
تبدأ بالأحرف الأبجدية الرقمية. الحرف الأول من الوسيطة الثالثة، إذا كان هناك
one، يتم استخدامه كحرف اقتباس سلسلة (استخدم سلسلة فارغة لتعطيل
وظيفة)، ويتم استخدام الحرف الأول من الوسيطة الرابعة، إذا كان هناك واحد
كحرف تحذير السلسلة. يمكن أيضًا إعطاء المواصفات من سطر الأوامر،
وفي هذه الحالة يجب أن تكون هناك وسيطتان في حالة استخدام الخيار +c وثلاث في حالة استخدام +s
الخيار.

يتم تحديد سلوك التعليق/السلسلة بواسطة سلسلة معدلة مكونة من ثلاثة أحرف، والتي
يمكن تمريرها كوسيطة اختيارية إما إلى خيارات سطر الأوامر +c/+s أو إلى
#الوضع التعليق/#الوضع سلسلة وحدات الماكرو الفوقية. إذا لم يتم تحديد سلسلة معدلة، فسيتم تعيين القيمة الافتراضية
القيمة هي "ccc" للتعليقات و"sss" للسلاسل. الحرف الأول يتوافق مع
السلوك داخل مكالمات ماكرو التعريف (بما في ذلك تعريفات ماكرو المستخدم نظرًا لأنها تأتي بالداخل
a # تعريف استدعاء meta-macro)، يتوافق الحرف الثاني مع السلوك داخل المستخدم-
معلمات الماكرو، والحرف الثالث يتوافق مع السلوك خارج أي ماكرو
يتصل. يمكن أن يأخذ كل من هذه الأحرف القيم التالية:

i تعطيل مواصفات التعليق/السلسلة.

c تعليق (لا تقييم ولا إخراج).

s السلسلة (يتم إخراج السلسلة وتسلسلاتها المحددة كما هي).

q سلسلة مقتبسة (يتم إخراج السلسلة كما هي، بدون تسلسلات محددة).

C التعليق الذي تم تقييمه (يتم تقييم وحدات الماكرو، ولكن يتم تجاهل الإخراج).

S سلسلة تم تقييمها (يتم تقييم وحدات الماكرو، ويتم إخراج المحددات).

Q سلسلة مقتبسة تم تقييمها (يتم تقييم وحدات الماكرو، ولا يتم إخراج المحددات).

ملاحظة مهمة: أي حدوث لتسلسل بداية التعليق/السلسلة داخل آخر
يتم دائمًا تجاهل التعليق/السلسلة، حتى إذا تم تمكين تقييم الماكرو. بعبارة أخرى،
لا يمكن تداخل التعليقات/السلاسل. على وجه الخصوص، يمكن أن يكون معدّل "Q" طريقة ملائمة
تحديد صيغة للتعطيل المؤقت لجميع مواصفات التعليقات والسلاسل.

يجب دائمًا توفير سلاسل مواصفات بناء الجملة كسلاسل C، سواء كانت كذلك
تعطى كحجج ل #الوضع استدعاء meta-macro أو على سطر الأوامر الخاص بقشرة Unix. لو
يتم تقديم وسيطات سطر الأوامر عبر طريقة أخرى غير واجهة Unix القياسية، ثم يتم توفير وسيطات سطر الأوامر
يجب محاكاة سلوك الصدفة - أي، يجب إزالة علامات الاقتباس "" المحيطة، كلها
يجب استبدال تكرارات `\\' بخط مائل عكسي واحد، وبالمثل يجب أن يكون `\"'
تم استبداله بـ `"'. يتم التعرف على تسلسلات مثل `\n' بواسطة GPP ويجب تركها كما هي.

يمكن استخدام تسلسلات خاصة تطابق مجموعات فرعية معينة من مجموعة الأحرف. هم من
النموذج `\x'، أين x هي واحدة من:

b يتطابق مع أي تسلسل مكون من مسافة واحدة أو أكثر أو أحرف علامة التبويب (`\b' مطابق لـ
``).

w يطابق أي تسلسل مكون من صفر أو أكثر من المسافات أو أحرف الجدولة.

B يطابق أي تسلسل لواحد أو أكثر من المسافات أو علامات التبويب أو أحرف السطر الجديد.

W يطابق أي تسلسل مكون من صفر أو أكثر من المسافات أو علامات التبويب أو أحرف السطر الجديد.

a حرف أبجدي (من "a" إلى "z" ومن "A" إلى "Z").

A حرف أبجدي، أو مسافة، أو علامة تبويب، أو سطر جديد.

# رقم (من "0" إلى "9").

i حرف معرف. مجموعة الأحرف المطابقة قابلة للتخصيص باستخدام
#الوضع محارف id يأمر. يتطابق الإعداد الافتراضي مع الأحرف الأبجدية الرقمية و
الشرطة السفلية (من "a" إلى "z"، ومن "A" إلى "Z"، ومن "0" إلى "9" و"_").

t حرف علامة التبويب.

n حرف السطر الجديد.

o شخصية المشغل. مجموعة الأحرف المطابقة قابلة للتخصيص باستخدام
#الوضع محارف op يأمر. يتطابق الإعداد الافتراضي مع جميع الأحرف الموجودة
"+-*/\^<>=`~:.?@#&!%|"، باستثناء وضع Prolog حيث `!'، `%' و`|' غير صحيح
متطابق.

O حرف عامل أو حرف قوس. مجموعة إضافية متطابقة
يمكن تخصيص الأحرف مقارنةً بـ `\o' باستخدام #الوضع محارف من قبل
يأمر. الإعداد الافتراضي هو أن تكون الأحرف الموجودة في "()[]{}" كأقواس.

علاوة على ذلك، كل هذه المجموعات الفرعية المطابقة باستثناء `\w' و `\W' يمكن إبطالها عن طريق إدراج
`!' -- أيبكتابة `\!x"بدلاً من"\"x'.

لاحظ سمة مميزة مهمة ل بداية متواليات: عندما الحرف الأول من أ
تسلسل بداية الماكرو أو التعليق/السلسلة هو ' ' أو أحد التسلسلات الخاصة المذكورة أعلاه، فهو كذلك
لا يعتبر جزءًا من التسلسل نفسه ولكن يتم استخدامه بدلاً من ذلك للتحقق من السياق: for
على سبيل المثال، تسلسل البداية الذي يبدأ بـ '\n' يتطابق فقط مع بداية السطر، ولكن
لا يعتبر حرف السطر الجديد المطابق جزءًا من التسلسل. وبالمثل بداية
التسلسل الذي يبدأ بـ ' ' يتطابق فقط في حالة وجود بعض المسافات البيضاء، ولكن المطابقة
لا تعتبر المسافة البيضاء جزءًا من تسلسل البداية وبالتالي يتم إرسالها إلى
انتاج. إذا تم إجراء فحص السياق في بداية الملف (أو بشكل عام
لأي هيئة سيتم تقييمها)، والنتيجة هي نفس المطابقة مع حرف السطر الجديد
(وهذا يجعل من الممكن أن يبدأ ملف وضع CPP بمكالمة ماكرو تعريفية).

تمت إضافة قاعدتين خاصتين لبناء الجملة في الإصدار 2.1. أولاً، مراجع الوسيطة (#n) لا يوجد
يعد تقييمها عندما تكون خارج نطاق استدعاءات وتعريفات الماكرو. ومع ذلك، هم
لم يعد مسموحًا له بالظهور (ما لم يكن محميًا بأحرف الاقتباس) داخل استدعاء لـ a
ماكرو المستخدم المحدد؛ السلوك الحالي (متوافق مع الإصدارات السابقة) هو إزالتها بصمت
من المدخلات إذا حدث ذلك.

ثانيًا، إذا كان التسلسل النهائي (إما لوحدات الماكرو أو التعليقات) يتكون من سطر جديد واحد
الطابع، وإذا كانت قواعد ترسيم الحدود تؤدي إلى التقييم في سياق نهائي
حرف السطر الجديد غائب، ويتجاهل GPP بصمت السطر الجديد المفقود بدلاً من إنتاجه
خطا. والنتيجة الرئيسية هي أنه يمكن الآن تداخل المكالمات الفوقية الكلية بطريقة بسيطة
في الأوضاع القياسية وCPP وProlog.

التقييم قواعد


تتم قراءة الإدخال بشكل تسلسلي وتفسيره وفقًا لقواعد الوضع الحالي. الجميع
تتم مطابقة نص الإدخال أولاً مع تسلسلات بداية التعليق/السلسلة المحددة لـ
الوضع الحالي (باستثناء تلك التي تم تعطيلها بواسطة المعدل 'i')، ما لم يكن الجسم موجودًا
التقييم هو محتويات التعليق/السلسلة التي يتيح معدّلها تقييم الماكرو.
يتم التحقق أولاً من أحدث مواصفات التعليق/السلسلة المحددة. مهم
ملاحظة: قد لا تظهر التعليقات بين اسم الماكرو ووسائطه (عند القيام بذلك
يؤدي إلى سلوك غير محدد).

أي شيء ليس تعليقًا/سلسلة تتم مطابقته بعد ذلك مع استدعاء ماكرو تعريفي محتمل،
وإذا فشل ذلك أيضًا، مقابل استدعاء ماكرو محتمل للمستخدم. يخضع كل النص المتبقي
استبدال التسلسل المرجعي للوسيطة بنص الوسيطة ذي الصلة (فارغ ما لم
الجسم الذي يتم تقييمه هو تعريف ماكرو المستخدم) وإزالة الاقتباس
الشخصية إذا كان هناك واحد.

لاحظ أنه يتم تمرير وسيطات الماكرو التعريفي إلى الماكرو التعريفي قبل أي تقييم
(على الرغم من أن الماكرو التعريفي قد يختار تقييمها، راجع أوصاف الماكرو التعريفي أدناه).
في حالة #الوضع الماكرو التعريفي، يضيف GPP مؤقتًا مواصفات التعليق/السلسلة
لتمكين التعرف على سلاسل C ("...") ومنع أي تقييم بداخلها، لذلك لا
تداخل الأحرف التي يتم وضعها في وسيطات السلسلة C #الوضع مع الالجائزة
بناء الجملة الحالي هو أن يخشى.

من ناحية أخرى، يتم تقييم الوسائط الخاصة بماكرو المستخدم بشكل منهجي، ثم
تم تمريرها كمعلمات سياق إلى نص تعريف الماكرو، والذي يتم تقييمه باستخدام ذلك
بيئة. الاستثناء الوحيد هو عندما يكون تعريف الماكرو فارغًا، وفي هذه الحالة يكون
لا يتم تقييم الحجج. لاحظ أن GPP يعود مؤقتًا إلى الوضع الذي
تم تعريف الماكرو من أجل تقييمه، لذلك يعد تغييره آمنًا تمامًا
وضع التشغيل بين وقت تعريف الماكرو ووقت استدعائه.
على العكس من ذلك، إذا كان ماكرو المستخدم يرغب في العمل مع الوضع الحالي بدلاً من ذلك
تم استخدامه لتعريفه، فهو يحتاج إلى البدء بـ #الوضع على استعادة اتصل وانتهى بـ أ #الوضع
حفظ مكالمة.

يمكن تعريف ماكرو المستخدم باستخدام الوسائط المسماة (انظر # تعريف الوصف أدناه). في هذا
في هذه الحالة، عندما يتم تقييم تعريف الماكرو، تتسبب كل معلمة مسماة في حدوث خطأ
سيتم إنشاء تعريف ماكرو افتراضي مؤقت للمستخدم؛ قد يتم استدعاء مثل هذا الماكرو فقط
بدون وسيطات ويقوم ببساطة بإرجاع نص الوسيطة المقابلة.

لاحظ أنه نظرًا لأنه يتم تقييم وحدات الماكرو عند استدعائها وليس عند استدعائها
المحددة، فإن أي محاولة لاستدعاء ماكرو عودي تؤدي إلى سلوك غير محدد إلا في
حالة محددة للغاية عند استخدام الماكرو # صندوق لمحو نفسه بعد عدد لا نهائي من الحلقات
التكرارات.

أخيرًا، تحدث حالة خاصة عندما لا يشتمل تعريف المستخدم على ماكرو
يتم استدعاء الوسائط (لا الوسائط المسماة ولا التسلسل المرجعي للوسيطة) في a
الوضع الذي يكون فيه تسلسل نهاية الماكرو القصير للمستخدم فارغًا (على سبيل المثالأو وضع cpp أو TeX). في هذا
الحالة من المفترض أن تكون الاسم المستعار الماكرو: يتم تقييم وسيطاتها أولاً في التيار
الوضع كالمعتاد، ولكن بدلاً من تمريره إلى تعريف الماكرو كمعلمات (والتي
سيؤدي إلى التخلص منها) يتم إلحاقها فعليًا بتعريف الماكرو،
باستخدام قواعد بناء الجملة للوضع الذي تم فيه تعريف الماكرو والنص الناتج
يتم تقييمه مرة أخرى. لذلك من المهم ملاحظة أنه في حالة الاسم المستعار للماكرو،
يتم في الواقع تقييم الوسائط مرتين في وضعين مختلفين.

وحدات الماكرو الفوقية


يتم دائمًا تعريف وحدات الماكرو هذه مسبقًا. يعتمد تسلسل الاتصال الفعلي على التيار
وضع؛ هنا نستخدم تدوينًا يشبه cpp.

# تعريف x y
وهذا يحدد الماكرو المستخدم x as y. y يمكن أن يكون أي إدخال GPP صالحًا، وربما لـ
المثال يشير إلى وحدات الماكرو الأخرى. x يجب أن يكون معرف (أي، تسلسل من
الأحرف الأبجدية الرقمية و'_')، ما لم يتم تحديد الوسائط المسماة. لو x is
تم تعريفه بالفعل، تتم الكتابة فوق التعريف السابق. إذا لم يكن هناك حجة ثانية
معطى، x سيتم تعريفه على أنه ماكرو لا يُخرج شيئًا. لا x ولا y .
تقييمها؛ يتم تقييم تعريف الماكرو فقط عند استدعائه، وليس عندما يتم استدعاؤه
أعلن.

من الممكن أيضًا تسمية الوسائط في تعريف ماكرو: في هذه الحالة،
حجة x يجب أن يكون استدعاء ماكرو للمستخدم تكون جميع وسيطاته عبارة عن معرفات. هؤلاء
تصبح المعرفات متاحة كوحدات ماكرو للمستخدم داخل تعريف الماكرو؛ هؤلاء
يجب استدعاء وحدات الماكرو الافتراضية بدون وسيطات، وتقييمها وفقًا لما يقابلها
المعلمة الكلية.

#defeval x y
هذا يعمل بطريقة مماثلة ل # تعريفولكن الحجة الثانية y مقيم
في الحال. نظرًا لأنه يتم أيضًا تقييم تعريفات الماكرو الخاصة بالمستخدم في كل مرة
يسمى، وهذا يعني أن الماكرو y سيخضع اثنان تقييمات متتالية. ال
فائدة #defeval أمر كبير لأنه الطريقة الوحيدة لتقييم شيء ما
أكثر من مرة، وهو ما قد يكون ضروريًا لفرض تقييم حجج الوصف الوصفي
الماكرو الذي لا يقوم عادةً بإجراء أي تقييم. ولكن منذ كل الحجة
تُفهم المراجع التي تم تقييمها في وقت التحديد على أنها حجج النص في
التي يتم تعريف الماكرو وليس كوسائط الماكرو نفسه،
عادة يتعين على المرء استخدام حرف الاقتباس لمنع التقييم الفوري
مراجع الحجة.

# صندوق x
يؤدي هذا إلى إزالة أي تعريف موجود للماكرو المستخدم x.

#ifdef x
هذا يبدأ كتلة مشروطة. يتم تقييم كل ما يلي فقط إذا كان
معرف x يتم تعريفه، وحتى إما أ #else أو #endif تم التوصل إلى البيان.
ومع ذلك، لاحظ أن النص الذي تم التعليق عليه لا يزال يتم فحصه بدقة، وبالتالي فإن تركيبه
يجب أن تكون صالحة. ومن القانوني بشكل خاص أن يكون لديك #else or #endif بيان
تظهر إنهاء الكتلة الشرطية فقط كنتيجة لتوسيع ماكرو المستخدم
وليس صراحة في الإدخال.

# يارب x
هذا يبدأ كتلة مشروطة. يتم تقييم كل ما يلي فقط إذا كان
معرف x غير محدد.

#ifeq x y
هذا يبدأ كتلة مشروطة. يتم تقييم كل ما يلي فقط إذا كان
نتائج التقييمات x و y متطابقة مثل سلاسل الأحرف. أي
يتم تجاهل المسافة البيضاء البادئة أو اللاحقة لإجراء المقارنة. لاحظ أنه في وضع CPP
يُفهم أي حرف مسافة بيضاء غير مقتبسة على أنه نهاية الوسيطة الأولى،
لذلك فمن الضروري أن نكون حذرين.

#ifneq x y
هذا يبدأ كتلة مشروطة. يتم تقييم كل ما يلي فقط إذا كان
نتائج التقييمات x و y ليست متطابقة (حتى تصل إلى الرائدة أو
زائدة بيضاء).

#else يؤدي هذا إلى تبديل القيمة المنطقية للكتلة الشرطية الحالية. ما يلي هو
يتم تقييمه إذا وفقط إذا تم التعليق على الإدخال السابق.

#endif يؤدي هذا إلى إنهاء الكتلة الشرطية التي بدأها أ #لو... ميتا ماكرو.

تتضمن # ملف
يؤدي هذا إلى قيام GPP بفتح الملف المحدد وتقييم محتوياته، وإدراج ملف
النص الناتج في الإخراج الحالي. كافة وحدات الماكرو المحددة للمستخدم لا تزال متاحة
في الملف المضمن، وبشكل متبادل جميع وحدات الماكرو المحددة في الملف المضمن
تكون متاحة في كل ما يلي. يتم البحث عن ملف التضمين أولاً
الدليل الحالي، ثم، إذا لم يتم العثور عليه، في أحد الدلائل المحددة
عن طريق -I خيار سطر الأوامر (أو / البيرة / تتضمن إذا لم يتم تحديد أي دليل).
لاحظ أنه، لأسباب التوافق، من الممكن وضع اسم الملف بينهما
"" أو <>.

الترتيب الذي يتم به البحث في الدلائل المختلفة عن ملفات التضمين هو
تتأثر -نوستدينك, -nocurinc و -curdirinclast خيارات سطر الأوامر.

عند تضمين ملف، يقوم GPP على الفور بحفظ نسخة من وضع التشغيل الحالي
على مكدس الوضع، ويستعيد وضع التشغيل في نهاية المضمن
ملف. قد يتجاوز الملف المضمن هذا السلوك من خلال البدء بـ a #الوضع على استعادة
دعوة وتنتهي ب #الوضع دفع يتصل. بالإضافة إلى ذلك، عندما -m سطر الأوامر
عند تحديد الخيار، سيتحول GPP تلقائيًا إلى وضع توافق cpp
عند تضمين ملف ينتهي اسمه إما بـ ".c" أو ".h".

# exec أمر
يؤدي هذا إلى قيام GPP بتنفيذ سطر الأوامر المحدد وتضمين المعيار الخاص به
الإخراج في الإخراج الحالي. لاحظ أنه لأسباب أمنية، فإن هذا الماكرو التعريفي هو
تعطيل ما لم -x تم تحديد علامة سطر الأوامر. إذا كان استخدام # exec ليس
مسموح به، تتم طباعة رسالة تحذيرية ويتم ترك الإخراج فارغًا. نلاحظ أن
يتم تقييم سطر الأوامر المحدد قبل تنفيذه، مما يسمح باستخدامه
وحدات الماكرو في سطر الأوامر. ومع ذلك، يتم تضمين إخراج الأمر حرفيًا
ولا يتم تقييمها. إذا كنت بحاجة إلى تقييم المخرجات، فيجب عليك استخدام #defeval
(انظر أعلاه) للتسبب في تقييم مزدوج.

#eval على سبيل المثال
إنّ كافة أنواع عهود الـ #eval محاولات ميتا ماكرو للتقييم على سبيل المثال أولاً عن طريق توسيع وحدات الماكرو (عادي
تقييم GPP) ثم عن طريق إجراء التقييم الحسابي و/أو أحرف البدل
مطابقة. بناء الجملة وأسبقية عامل التشغيل للتعبيرات الحسابية هي
كما هو الحال في C؛ العوامل الوحيدة المفقودة هي <<، >>، ?:، والمهمة
العاملين.

تتوفر مطابقة أحرف البدل بنمط POSIX ("التألق") على POSIX فقط
التطبيقات ويمكن استدعاؤها باستخدام عامل التشغيل =~. باختصار، "؟" اعواد الكبريت
أي حرف واحد، يتطابق "*" مع أي سلسلة (بما في ذلك السلسلة الفارغة)، و
"[...]" يطابق أيًا من الأحرف الموجودة بين قوسين. فئة "[...]" هي
يتم استكماله عندما يكون الحرف الأول بين القوسين هو '!'. الشخصيات في أ
يمكن أيضًا تحديد فئة "[...]" كنطاق باستخدام الحرف "-" -- على سبيل المثال,
"[FN]" يعادل "[FGHIJKLMN]".

إذا لم تتمكن من تعيين قيمة رقمية للنتيجة، فإن النص الذي تم إرجاعه هو ببساطة
نتيجة التوسع الكلي دون أي تقييم حسابي. الوحيد
الاستثناءات لهذه القاعدة هي عوامل المقارنة ==، !=، <، >، <=، و >=
والتي، إذا لم يتم تقييم أحد الجوانب إلى رقم، قم بإجراء مقارنة السلسلة
بدلاً من ذلك (تجاهل المسافات الزائدة والبادئة). بالإضافة إلى ذلك، طول(...)
يقوم العامل الحسابي بإرجاع الطول بالأحرف للوسيطة التي تم تقييمها.

داخل التعابير الحسابية مُعرف(...) ماكرو مستخدم خاص أيضًا
متاح: يستغرق وسيطة واحدة فقط، والتي لم يتم تقييمها، وترجع 1 إذا كانت
هو اسم ماكرو المستخدم و0 بخلاف ذلك.

#إذا على سبيل المثال
يستدعي هذا الماكرو التعريفي المقيم الحسابي/الجلابي بنفس الطريقة التي يتم بها
#eval ويقارن نتيجة التقييم بالسلسلة "0" لبدء عملية
كتلة مشروطة. على وجه الخصوص، لاحظ أن القيمة المنطقية ل على سبيل المثال هو دائما صحيح
عندما لا يمكن تقييمه إلى رقم.

#elif على سبيل المثال
يمكن استخدام هذا الماكرو التعريفي لتجنب التداخل #إذا الظروف. #إذا #elif
#endif ما يعادل #إذا #else #إذا #endif #endif.

#الوضع الكلمة
يتحكم هذا الماكرو التعريفي في وضع تشغيل GPP. انظر أدناه للحصول على قائمة #الوضع
أوامر.

#خط يتم تقييم هذا الماكرو التعريفي إلى رقم السطر لملف الإدخال الحالي.

#ملف يقوم هذا الماكرو التعريفي بتقييم اسم ملف الإدخال الحالي كما يظهر
في سطر الأوامر أو في الوسيطة ل تتضمن #. إذا كان GPP يقرأ مدخلاته
من ستدين، ثم #ملف يتم تقييمه إلى "stdin".

#التمر معاهدة المواد الانشطارية
يتم تقييم هذا الماكرو التعريفي إلى التاريخ والوقت الحاليين بالتنسيق بواسطة ملف
سلسلة التنسيق المحددة معاهدة المواد الانشطارية. انظر القسم تاريخ لأي لبس الوقت تحويلات المواصفات
أدناه.

#خطأ MSG
يؤدي هذا الماكرو التعريفي إلى ظهور رسالة خطأ تحتوي على اسم الملف الحالي ورقم السطر،
ومع النص MSG، ليتم طباعتها على جهاز الخطأ القياسي. تالي
ثم يتم إحباط المعالجة.

#تحذير MSG
يؤدي هذا الماكرو التعريفي إلى ظهور رسالة تحذير تحتوي على اسم الملف الحالي ورقم السطر،
ومع النص MSG، ليتم طباعتها على جهاز الخطأ القياسي. تالي
ثم يتم استئناف المعالجة.

المفتاح لمرونة GPP هو #الوضع ميتا ماكرو. حجة الأولى هي دائما واحدة من
قائمة بالكلمات الرئيسية المتاحة (انظر أدناه)؛ الوسيطة الثانية هي دائمًا سلسلة من
الكلمات مفصولة بمسافات بيضاء. وبصرف النظر عن ربما أولهم، كل من هذه الكلمات
هو دائمًا محدد أو محدد بناء جملة، ويجب توفيره كسلسلة C محددة
بواسطة علامات الاقتباس المزدوجة (""). تسلسلات المطابقة الخاصة المختلفة المدرجة في القسم الخاص
تتوفر مواصفات بناء الجملة. أي #الوضع يتم تحليل الأمر في الوضع الذي يكون فيه "...".
من المفهوم أنها سلسلة من النمط C، لذلك من الآمن وضع أي حرف بداخلها
سلاسل. لاحظ أيضًا أن الوسيطة الأولى لـ #الوضع (الكلمة الرئيسية) لا يتم تقييمها أبدًا،
بينما يتم تقييم الوسيطة الثانية (باستثناء محتويات سلاسل C بالطبع)،
بحيث يمكن الحصول على مواصفات بناء الجملة كنتيجة لتقييم الماكرو.

المتاح #الوضع الأوامر هي:

#الوضع حفظ / #الوضع دفع
ادفع مواصفات الوضع الحالي إلى مكدس الوضع.

#الوضع على استعادة / #الوضع فرقعة
مواصفات وضع البوب ​​من مكدس الوضع.

#الوضع معيار الاسم
حدد أحد الأوضاع القياسية. يجب أن تكون الوسيطة الوحيدة واحدة من: default
(الوضع الافتراضي)؛ CPP، C (وضع CPP)؛ تكس، تكس (وضع تكس)؛ أتش تي أم أل، HTML (وضع HTML)؛
XHTML، XHTML (وضع XHTML)؛ برولوج، برولوج (وضع برولوج). يجب أن يكون اسم الوضع
تعطى مباشرة، وليس كسلسلة C.

#الوضع المستخدم "s1" "s9"
تحديد بناء جملة ماكرو المستخدم. الوسائط التسعة، جميعها سلاسل C، هي الوضع
مواصفات وحدات ماكرو المستخدم (راجع خيار سطر الأوامر -U والقسم الخاص بـ
مواصفات النحو). لا تتأثر مواصفات الماكرو الفوقية.

#الوضع هدف {مستخدم | "s1" "s7"}
تحديد بناء جملة التعريف الماكرو. إما الحجة الوحيدة هي المستخدم (وليس كسلسلة)، و
يتم نسخ مواصفات وضع المستخدم ماكرو إلى وضع الماكرو التعريفي
المواصفات، أو يجب أن يكون هناك سبع وسيطات سلسلة، وأهميتها هي
كما هو الحال بالنسبة لخيار سطر الأوامر -M (راجع القسم الخاص بمواصفات بناء الجملة).

#الوضع اقتبس ["ج"]
مع عدم وجود وسيطة أو "" كوسيطة، تتم إزالة مواصفات حرف الاقتباس و
تعطيل وظيفة الاقتباس. مع وسيطة سلسلة واحدة، الحرف الأول
يتم اعتبار السلسلة لتكون حرف الاقتباس الجديد. حرف الاقتباس يمكن أن يكون
ليست أبجدية رقمية ولا '_'، ولا يمكن أن تكون إحدى التسلسلات المطابقة الخاصة.

#الوضع التعليق [سكس] "يبدأ" "نهاية" ["ج" ["ج"]]
أضف مواصفات التعليق. اختياريًا وسيطة أولى تتكون من ثلاثة
يمكن استخدام الأحرف غير المضمنة في " " لتحديد معدل التعليق/السلسلة
(راجع القسم الخاص بمواصفات بناء الجملة). المعدل الافتراضي هو مجلس التعاون الجمركي. الأول
يتم استخدام وسيطتين من السلسلة كتسلسلات بداية ونهاية للتعليق على التوالي. ال
تعد وسيطة السلسلة الثالثة اختيارية ويمكن استخدامها لتحديد علامة اقتباس سلسلة
شخصية. (إذا كان ""، فسيتم تعطيل الوظيفة.) السلسلة الرابعة
الوسيطة اختيارية ويمكن استخدامها لتحديد تحذير ترسيم الحدود
شخصية. (إذا كان ""، فسيتم تعطيل الوظيفة.)

#الوضع سلسلة [سكس] "يبدأ" "نهاية" ["ج" ["ج"]]
أضف مواصفات السلسلة. مطابقة ل #الوضع التعليق إلا أن الافتراضي
المعدل هو سسس.

#الوضع لا تعليق / #الوضع لم سلسلة ["يبدأ"]
بدون وسيطة، قم بإزالة كافة مواصفات التعليق/السلسلة. مع سلسلة واحدة
الوسيطة، احذف مواصفات التعليق/السلسلة التي يكون تسلسل بدايتها هو
جدال.

#الوضع com.servivelf { on | خصم | 1 | 0 }
ما يعادل -n تبديل سطر الأوامر. إذا كانت الحجة on or 1، أي سطر جديد
أو حرف مسافة بيضاء ينهي مكالمة ماكرو أو يتم ترك تعليق/سلسلة في ملف
تيار الإدخال لمزيد من المعالجة. إذا كانت الحجة خصم or 0 هذه الميزة
ذوي الاحتياجات الخاصة.

#الوضع محارف { id | op | من قبل } "خيط"
حدد مجموعات الأحرف التي سيتم استخدامها لمطابقة \o، و\O، و\i الخاص
تسلسلات. يجب أن تكون الوسيطة الأولى واحدة من id (المجموعة المتطابقة مع \i)، op (لل
مجموعة مطابقة لـ \o) أو من قبل (المجموعة التي تطابقها \O بالإضافة إلى المجموعة التي تطابقها
\س). "خيط" عبارة عن سلسلة C تسرد جميع الأحرف المراد وضعها في المجموعة. ممكن
تحتوي فقط على تسلسلات المطابقة الخاصة \a، \A، \b، \B، و\# (الآخر
التسلسلات والتسلسلات المنفية غير مسموح بها). عندما يتم العثور على "-".
بين حرفين غير خاصين، يؤدي هذا إلى إضافة جميع الأحرف بينهما (على سبيل المثال "AZ"
يتوافق مع كافة الأحرف الكبيرة). أن يكون لديك "-" في المجموعة المطابقة أيضًا
ضعه في الموضع الأول أو الأخير أو ضعه بجوار تسلسل \x.

تاريخ لأي لبس الوقت تحويلات المواصفات


يتم نسخ الأحرف العادية الموضوعة في سلسلة التنسيق دون تحويل.
يتم تقديم محددات التحويل بواسطة حرف `%'، ويتم استبدالها على النحو التالي:

%a اسم يوم من أيام الأسبوع المختصر وفقًا للإعدادات المحلية الحالية.

%A اسم يوم الأسبوع الكامل وفقًا للإعدادات المحلية الحالية.

%b اسم الشهر المختصر وفقًا للإعدادات المحلية الحالية.

%B اسم الشهر بالكامل وفقًا للإعدادات المحلية الحالية.

%c تمثيل التاريخ والوقت المفضل للإعدادات المحلية الحالية.

%d يوم الشهر كرقم عشري (النطاق من 01 إلى 31).

%F يعادل٪ Y-٪ m-٪ d (تنسيق التاريخ ISO 8601).

%H الساعة كرقم عشري باستخدام تنسيق 24 ساعة (النطاق من 00 إلى 23).

%I الساعة كرقم عشري باستخدام تنسيق 12 ساعة (النطاق من 01 إلى 12).

%j يوم من السنة كرقم عشري (النطاق 001 إلى 366).

%m الشهر كرقم عشري (النطاق من 01 إلى 12).

%M الدقيقة كرقم عشري (النطاق من 00 إلى 59).

%p إما `AM' أو `PM' حسب قيمة الوقت المحددة أو ما يقابلها
سلاسل للغة الحالية. يتم التعامل مع الظهر على أنه "مساءً" ومنتصف الليل على أنه "صباحًا".

%R الوقت في تدوين 24 ساعة (٪ H:٪ M).

%S الثاني كرقم عشري (النطاق من 00 إلى 61).

%U رقم الأسبوع من العام الحالي كرقم عشري، يتراوح من 00 إلى 53،
بدءًا من يوم الأحد الأول باعتباره اليوم الأول من الأسبوع 01.

%w يوم الأسبوع كعلامة عشرية، يتراوح من 0 إلى 6، والأحد هو 0.

%W رقم الأسبوع من العام الحالي كرقم عشري، يتراوح من 00 إلى 53،
بدءًا من أول يوم اثنين باعتباره اليوم الأول من الأسبوع 01.

%x تمثيل التاريخ المفضل للإعدادات المحلية الحالية بدون الوقت.

%X تمثيل الوقت المفضل للإعدادات المحلية الحالية بدون التاريخ.

%y السنة كرقم عشري بدون قرن (النطاق 00 إلى 99).

%Y السنة كرقم عشري بما في ذلك القرن.

%Z المنطقة الزمنية أو الاسم أو الاختصار.

%% حرف "%" حرفي.

اعتمادًا على مترجم C والمكتبة المستخدمة لتجميع GPP، قد يكون هناك المزيد من التحويلات
المحددات المتاحة. راجع وثائق المترجم الخاص بك لـ strftime () وظيفة.
ومع ذلك، لاحظ أن أي محددات تحويل غير مذكورة أعلاه قد لا تكون قابلة للنقل عبرها
منشآت GPP.

أمثلة


فيما يلي مثال أساسي لا يحتاج إلى شرح في الوضع القياسي أو وضع CPP:

#تعريف FOO هذا هو
#تعريف شريط الرسالة.
#تعريف العقدة #1 #2
كونكات (فو، بار)
#ifeq (concat(foo,bar)) (foo bar)
هذا هو الإخراج.
#else
هذا ليس الإخراج.
#endif

باستخدام تسمية الوسيطة، CONCAT يمكن بدلاً من ذلك تعريف الماكرو على أنه

#define concat(x,y) xy

في وضع TeX وباستخدام تسمية الوسيطة، يصبح المثال نفسه:

\define{FOO}{هذا هو}
\define{BAR}{رسالة.}
\تعريف{\concat{x}{y}}{\x \y}
\concat{\FOO}{\BAR}
\ifeq{\concat{foo}{bar}}{foo bar}
هذا هو الإخراج.
\آخر
هذا ليس الإخراج.
\إنهاء إذا

في وضع HTML وبدون تسمية الوسائط، يحصل المرء على ما يلي:

<#تعريف FOO|هذا>
<#تعريف شريط|رسالة.>
<#تعريف العقدة|#1 #2>
<#concat <#FOO>|<#BAR>>
<#ifeq <#concat foo|bar>|foo bar>
هذا هو الإخراج.
<#آخر>
هذا ليس الإخراج.
<#endif>

يوضح المثال التالي (في الوضع القياسي) استخدام حرف الاقتباس:

#define FOO هذا هو \
تعريف متعدد الأسطر.
#define BLAH(x) حجتي هي x
بلاه (اورف)
\BLAH(urf)

لاحظ أن التعريف متعدد الأسطر صالح أيضًا في وضعي cpp وProlog على الرغم من
غياب حرف الاقتباس، لأنه يتم تفسير '\' متبوعًا بسطر جديد على أنه a
تعليق وتجاهلها.

في وضع CPP، يتم فهم سلاسل C والتعليقات على هذا النحو، كما هو موضح في ملف
المثال التالي:

#تعريف بلاه فو
الخ الخ الخ */
"إنها /*سلسلة*/!"

الفرق الرئيسي بين وضع Prolog ووضع CPP هو التعامل مع السلاسل و
التعليقات: في Prolog، قد لا تبدأ السلسلة '...' مباشرة بعد الرقم، و/*...*/
لا يجوز أن يبدأ التعليق مباشرة بعد حرف عامل التشغيل. علاوة على ذلك، التعليقات هي
لا تتم إزالتها من الإخراج إلا إذا حدثت في أمر #.

الاختلافات بين وضع CPP والوضع الافتراضي أعمق: في الوضع الافتراضي #commands
قد تبدأ في أي مكان، بينما في وضع CPP يجب أن تكون في بداية السطر؛ الافتراضي
ليس لدى الوضع أي معرفة بالتعليقات والسلاسل، ولكن لديه حرف اقتباس ('\')، بينما cpp
يحتوي الوضع على مواصفات تعليق/سلسلة واسعة النطاق ولكن لا يوجد حرف اقتباس. وعلاوة على ذلك، فإن
يجب وضع أقواس صحيحة في الوسائط الخاصة بوحدات الماكرو الوصفية في الوضع الافتراضي، في حين لا يوجد مثل هذا
يتم إجراء الفحص في وضع CPP.

وهذا يجعل من السهل تداخل مكالمات الماكرو التعريفي في الوضع الافتراضي مقارنةً بوضع CPP. ل
على سبيل المثال، ضع في اعتبارك إدخال وضع HTML التالي، والذي يختبر مدى توفر ملف
# exec أمر:

<#ifeq <#exec echo بلاه>|بلاه
> #exec مسموح به <#else> #exec غير مسموح به <#endif>

لا يوجد ما يعادل وضع CPP، بينما في الوضع الافتراضي يمكن ترجمته بسهولة إلى

#ifeq (#exec echo بلاه
) (بلا
)
\#التنفيذ مسموح به
#else
\#exec غير مسموح به
#endif

من أجل تداخل مكالمات ماكرو التعريف في وضع CPP، من الضروري تعديل الوضع
الوصف، إما عن طريق تغيير بناء جملة استدعاء الماكرو الفوقي، أو بشكل أكثر أناقة عن طريق التعريف
سلسلة صامتة واستخدام حقيقة أن السياق في بداية التقييم
السلسلة هي حرف السطر الجديد:

# سلسلة الوضع QQQ "$" "$"
#ifeq $#exec صدى بلاه
$ $ بلاه
$
\#التنفيذ مسموح به
#else
\#exec غير مسموح به
#endif

ومع ذلك، لاحظ أنه لا يمكن تداخل التعليقات/السلاسل ("..." داخل $...$ ستوضع
لم يتم اكتشافه)، لذا يجب على المرء أن يكون حذرًا بشأن ما يجب تضمينه داخل مثل هذا الصمت
سلسلة تم تقييمها. في هذا المثال، تم تقديم تداخل الماكرو الفوقي الفضفاض في الإصدار 2.1
يجعل من الممكن استخدام الإصدار الأبسط التالي:

#ifeq بلاه #exec echo -n بلاه
\#التنفيذ مسموح به
#else
\#exec غير مسموح به
#endif

تذكر أن وحدات الماكرو التي لا تحتوي على وسيطات تُفهم فعليًا على أنها أسماء مستعارة عندما تكون كذلك
يتم استدعاؤها باستخدام الوسائط، كما هو موضح في المثال التالي (الوضع الافتراضي أو وضع CPP):

#تعريف DUP(x)xx
#تعريف FOO فقلت: DUP
فو (بلاه)

فائدة #defeval يتم عرض الماكرو التعريفي من خلال المثال التالي في وضع HTML:

<#تعريف التطبيق|<#درجة الحرارة الدفاعية|<\##1 \#1>><#درجة الحرارة #2>>
<#تعريف <#foo x>|<#x> و <#x>>
<#تطبيق foo|بلاه>

السبب #defeval المطلوب هو أنه بما أن كل شيء يتم تقييمه في مسار واحد،
يجب إنشاء الإدخال الذي سيؤدي إلى استدعاء الماكرو المطلوب أولاً
تقييم الوسيطات التي تم تمريرها إلى APPLY قبل تقييمها مرة ثانية.

لترجمة هذا المثال في الوضع الافتراضي، يحتاج المرء إلى اللجوء إلى الأقواس بالترتيب
لتداخل استدعاء #defeval داخل تعريف APPLY، ولكن يجب القيام بذلك بدونه
إخراج الأقواس. الحل الأسهل هو

#define BALANCE(x) x
#define APPLY(f,v) BALANCE(#defeval TEMP f
درجة الحرارة (ت))
#تعريف foo(x) x وx
تطبيق (\foo، بلاه)

كما هو موضح أعلاه، فإن أبسط إصدار في وضع CPP يعتمد على تحديد تقييم صامت
سلسلة للعب دور الماكرو BALANCE.

يوضح المثال التالي (الوضع الافتراضي أو وضع CPP) التقييم الحسابي:

#تعريف × 4
الجواب هو:
#التقييم x*x + 2*(16-x) + 1998%x

#إذا تم تعريفها(x)&&!(3*x+5>17)
يجب أن يكون هذا الإخراج.
#endif

للإنهاء، إليك بعض الأمثلة التي تتضمن تبديل الوضع. المثال التالي هو
لا تحتاج إلى شرح (تبدأ في الوضع الافتراضي):

#دفع الوضع
#تعريف f(x)xx
# الوضع القياسي تكس
\و{بلاه}
\mode{string}{"$" "$"}
\mode{comment}{"/*" "*/"}
$\f{urf}$ /* بلاه */
\define{FOO}{bar/* والمزيد */
\ الوضع {البوب}
و($FOO$)

من الأمثلة الجيدة حيث يصبح الوضع المحدد من قبل المستخدم مفيدًا هو مصدر GPP لهذا المستند
(متوفر مع توزيع كود مصدر GPP).

تطبيق آخر مثير للاهتمام هو فرض تقييم انتقائي لوحدات الماكرو في سلاسل C
عندما تكون في وضع CPP. على سبيل المثال، خذ بعين الاعتبار الإدخال التالي:

#تعريف بلاه (x) "فقال: x"
بلاه (فو)

من الواضح أن المرء يريد المعلمة x ليتم توسيعها داخل السلسلة. هناك
عدة طرق للتغلب على هذه المشكلة:

#دفع الوضع
#وضع الأنف "\""
#تعريف بلاه (x) "فقال: x"
#وضع البوب

#وضع الاقتباس """
#تعريف بلاه(x) `"وقال: x`"

# سلسلة الوضع QQQ "$$" "$$"
#حدد بلاه(x) $$"وقال: x"$$

الطريقة الأولى طبيعية جدًا، ولكن بها إزعاج كونها طويلة ومطولة
تحييد دلالات السلسلة، بحيث يكون وجود مثيل غير مقيم لـ "x" في ملف
السلسلة، أو حدوث '/*'، سيكون مستحيلاً دون اللجوء إلى المزيد
التشوهات.

الطريقة الثانية أكثر كفاءة قليلاً بسبب وجود عرض أسعار محلي
تجعل الشخصية من السهل التحكم في ما يتم تقييمه وما لا يتم تقييمه، ولكن لديه
العيب هو أنه من المستحيل في بعض الأحيان العثور على حرف اقتباس معقول بدونه
الاضطرار إما إلى تغيير الملف المصدر بشكل كبير أو إحاطته داخل ملف #الوضع دفع البوب
بناء. على سبيل المثال، أي تكرار لـ '/*' في السلسلة يجب أن يتم اقتباسه.

توضح الطريقة الأخيرة كفاءة السلاسل التي تم تقييمها في سياق
تقييم انتقائي: نظرًا لأنه لا يمكن تداخل التعليقات/السلاسل، فإن أي تكرار لـ """ أو
يتم إخراج '/*' داخل '$$' كنص عادي، كما هو متوقع داخل سلسلة، وفقط
تم تمكين التقييم الكلي. لاحظ أيضًا أن هناك قدرًا أكبر من الحرية في اختيار أ
محدد السلسلة من اختيار حرف الاقتباس.

بدءًا من الإصدار 2.1، يمكن تداخل مكالمات ماكرو التعريف بشكل أكثر كفاءة في الوضع الافتراضي، cpp
وأوضاع البرولوج. وهذا يجعل من السهل إنشاء إصدار مستخدم من الماكرو التعريفي، أو
زيادة العداد:

#تعريف مايفال #التقييم #1

#تعريف × 1
#الهزيمة x #التقييم x+1

التبادل المتقدم أمثلة


فيما يلي بعض الأمثلة على الإنشاءات المتقدمة باستخدام GPP. إنهم يميلون إلى أن يكونوا محرجين جدًا
ويجب اعتباره دليلاً على قيود GPP.

المثال الأول هو ماكرو عودي. المشكلة الرئيسية هي أنه (بما أن GPP يقيم
كل شيء) يجب أن يكون الماكرو العودي حذرًا جدًا بشأن الطريقة التي تتم بها العودية
تم إنهاؤه لتجنب السلوك غير المحدد (في معظم الأحيان سوف يتعطل GPP ببساطة).
على وجه الخصوص، الاعتماد على أ #إذا/#آخر/#endif البناء لإنهاء العودية غير ممكن
وينتج عنه حلقة لا نهائية، لأن GPP يقوم بفحص مكالمات الماكرو الخاصة بالمستخدم حتى في
فرع غير مقيم من الكتلة الشرطية. الطريقة الآمنة للمضي قدمًا هي على سبيل المثال
يلي (نعطي المثال في وضع TeX):

\تعريف{العد التنازلي}{
\إذا{#1}
#1...
\تعريف{حلقة}{\العد التنازلي}
\آخر
القيام به.
\تعريف{حلقة} {}
\إنهاء إذا
\ حلقة {\ إيفال {#1-1}}
}
\العد التنازلي{10}

مثال آخر، في وضع CPP:

# سلسلة الوضع QQQ "$" "$"
#define المثلث(x,y) y \
$#if الطول(ص)
$#تعريف iter$ $#endif
$ iter(x,*y)
مثلث(20)

ما يلي هو محاولة (للأسف ضعيفة جدًا) لتنفيذ الوظيفة
التجريد في GPP (في الوضع القياسي). فهم هذا المثال ولماذا لا يمكن صنعه
أبسط بكثير هو تمرين متروك للقارئ الفضولي.

# سلسلة الوضع "`" "`" "\\"
#define ASIS(x) x
#define SILENT(x) ASIS()
#define EVAL(x,f,v) SILENT(
سلسلة #mode QQQ "`" """ "\\"
# ديفيفال TEMP0 س
# ديفيفال TEMP1 (
\#تعريف \TEMP2(TEMP0) و
)
درجة الحرارة1
)TEMP2(ت)
#define LAMBDA(x,f,v) SILENT(
#ifneq (v) ()
#define TEMP3(a,b,c) EVAL(a,b,c)
#else
#define TEMP3(a,b,c) \LAMBDA(a,b)
#endif
)TEMP3(x,f,v)
#define EVALAMBDA(x,y) SILENT(
# ديفيفال TEMP4 س
# ديفيفال TEMP5 ذ
)
#define APPLY(f,v) SILENT(
#defeval TEMP6 ASIS(\EVA)f
درجة الحرارة6
)EVAL(TEMP4,TEMP5,v)

وهذا يؤدي إلى النتائج التالية:

لامدا(ض،ض+ض)
=> لامدا(ض،ض+ض)

لامدا(ض،ض+ض،2)
=> 2+2

#define f LAMBDA(y,y*y)
f
=> لامدا(ص،ص*ص)

تطبيق (و، بلاه)
=> بلاه* بلاه

تطبيق(لامدا(ر،tt)،(tt))
=> (ر ر) (ر ر)

LAMBDA(x,تطبيق(f,(x+x)),urf)
=> (urf+urf)*(urf+urf)

تطبيق(تطبيق(LAMBDA(x,LAMBDA(y,x*y)),foo),bar)
=> فو*بار

#define test LAMBDA(y,`#ifeq y urf
y هو urf#else
y ليس urf#endif
`)
تطبيق (اختبار، urf)
=> urf هو urf

تطبيق (اختبار، فو)
=> foo ليس urf

استخدم gpp عبر الإنترنت باستخدام خدمات onworks.net


خوادم ومحطات عمل مجانية

قم بتنزيل تطبيقات Windows و Linux

أوامر لينكس

Ad




×
الإعلانات
❤️تسوق أو احجز أو اشترِ هنا - بدون تكلفة، مما يساعد على إبقاء الخدمات مجانية.