عربيالفرنسيةالإسبانية

Ad


OnWorks فافيكون

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

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

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

برنامج:

اسم


yacc — مترجم آخر (التنمية)

موجز


ياك [-dltv] [− ب file_prefix] [ص Sym_prefix] قواعد

الوصف


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

تم وصف شكل ومعنى القواعد في قسم الوصف الموسع.

يجب أن يتم إنتاج كود مصدر C وملف الرأس في شكل مناسب كمدخل لـ C
المترجم (انظر c99).

OPTIONS


ياك يجب أن تتوافق المنفعة مع حجم التعريفات الأساسية لـ POSIX.1-2008 ، القسم
12.2, مرافق بناء الجملة التوجيهات، باستثناء المبدأ التوجيهي 9.

يجب دعم الخيارات التالية:

− ب file_prefix
استعمل file_prefix بدلا من y كبادئة لجميع أسماء ملفات الإخراج. الرمز
ملف علامة التبويب y.tab.c، ملف الرأس y.tab.h (تم إنشاؤه عندما − د محدد)، و
ملف الوصف y.output (تم إنشاؤه عندما محدد)، يجب تغييره إلى
file_prefix.tab.c, file_prefix.tab.hو file_prefix.انتاج، على التوالي.

− د اكتب ملف الرأس؛ بشكل افتراضي تتم كتابة ملف التعليمات البرمجية فقط. ال # تعريف
البيانات تربط رموز الرمز المميز المعينة من قبل ياك مع أعلن المستخدم
أسماء رمزية. وهذا يسمح للملفات المصدرية بخلاف علامة التبويب y.tab.c للوصول إلى الرمز المميز
رموز.

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

ص Sym_prefix
استعمل Sym_prefix بدلا من yy كبادئة لجميع الأسماء الخارجية التي تنتجها
ياك. يجب أن تتضمن الأسماء المتأثرة الوظائف yyparse() yylex()، و
yyerror()، والمتغيرات يلفال, yycharو yydebug. (في بقية
في هذا القسم، تتم الإشارة إلى الرموز الستة المذكورة باستخدام أسمائها الافتراضية
فقط كوسيلة راحة تدوينية.) قد تتأثر الأسماء المحلية أيضًا بـ ص
خيار؛ ومع ذلك، ص لا يؤثر الخيار # تعريف الرموز التي تم إنشاؤها بواسطة
ياك.

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

اكتب ملفًا يحتوي على وصف المحلل اللغوي وتقرير التعارضات
الناتجة عن الغموض في النحو.

العمليات


المعامل التالي مطلوب:

قواعد اسم مسار ملف يحتوي على تعليمات، يُسمى فيما بعد قواعد، ل
الذي سيتم إنشاء المحلل اللغوي. تم توضيح تنسيق القواعد في
قسم الوصف الموسع.

ستدين


غير مستعمل.

INPUT FILES


الملف قواعد يجب أن يكون ملفًا نصيًا منسقًا كما هو محدد في الوصف الموسع
والقسم الخاص به.

البيئة المتغيرات


يجب أن تؤثر متغيرات البيئة التالية على تنفيذ ياك:

لانج قم بتوفير قيمة افتراضية لمتغيرات التدويل غير المضبوطة أو
باطل. (انظر حجم التعريفات الأساسية لـ POSIX.1-2008 ، القسم 8.2,
التجارة في الخارج المتغيرات لأسبقية التدويل
المتغيرات المستخدمة لتحديد قيم الفئات المحلية.)

LC_ALL إذا تم التعيين على قيمة سلسلة غير فارغة ، فتجاوز قيم جميع القيم الأخرى
متغيرات التدويل.

LC_CTYPE تحديد الإعدادات المحلية لتفسير تسلسل بايت من البيانات النصية
كأحرف (على سبيل المثال ، أحادية البايت بدلاً من أحرف متعددة البايت بتنسيق
الحجج وملفات الإدخال).

رسائل LC
حدد الإعدادات المحلية التي يجب استخدامها للتأثير على تنسيق ومحتويات
رسائل التشخيص المكتوبة على خطأ قياسي.

نلسباث تحديد موقع كتالوجات الرسائل لمعالجتها رسائل LC.

لانج و LC_ * المتغيرات تؤثر على تنفيذ ياك فائدة كما ورد. ال رئيسي()
الوظيفة المحددة في ياك المكتبة يجب الاتصال:

setlocale(LC_ALL, "")

وبالتالي البرنامج الذي تم إنشاؤه بواسطة ياك سوف تتأثر أيضًا بمحتوياتها
المتغيرات في وقت التشغيل.

غير متزامن فعاليات


افتراضي.

STDOUT


غير مستعمل.

ستدير


إذا تم الكشف عن تعارضات التحول/التقليل أو تقليل/تقليل قواعد, ياك يكتب أ
الإبلاغ عن تلك التعارضات إلى الخطأ المعياري بصيغة غير محددة.

يجب أيضًا استخدام الخطأ القياسي للرسائل التشخيصية.

OUTPUT FILES


يجب أن يكون ملف التعليمات البرمجية وملف الرأس وملف الوصف عبارة عن ملفات نصية. كلهم
الموضحة في الأقسام التالية.

رمز قم بتقديم
يجب أن يحتوي هذا الملف على كود مصدر C لـ yyparse() وظيفة. يجب أن تحتوي
رمز لمختلف الإجراءات الدلالية مع استبدال الماكرو الذي يتم إجراؤه عليها
الموصوفة في قسم الوصف الموسع. ويجب أن تحتوي أيضًا على نسخة من # تعريف
البيانات في ملف الرأس. اذا كان ٪اتحاد يتم استخدام الإعلان، إعلان ل
يجب أيضًا تضمين YYSTYPE في هذا الملف.

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

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

وسعوا الوصف


ياك يقبل الأمر اللغة المستخدمة لتحديد القواعد النحوية للغة الهدف
ليتم تحليلها من خلال الجداول والتعليمات البرمجية التي تم إنشاؤها بواسطة ياك. اللغة المقبولة من قبل ياك ك
يتم وصف القواعد النحوية للغة الهدف أدناه باستخدام ملف ياك لغة الإدخال نفسها

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

نظرا لقواعد اللغة، و ياك تقوم الأداة المساعدة بإنشاء الملفات الموضحة في ملفات الإخراج
قسم. يمكن تجميع ملف التعليمات البرمجية وربطه باستخدام c99. إذا كان الإعلان و
لم تتضمن أقسام البرامج في الملف النحوي تعريفات لـ رئيسي() yylex()، و
yyerror()، يتطلب الإخراج المترجم الارتباط بالإصدارات المتوفرة خارجيًا منها
المهام. الإصدارات الافتراضية من رئيسي() و yyerror() يتم توفيرها في ياك مكتبة و
يمكن ربطها باستخدام y المعامل ل c99. ياك واجهات المكتبة لا تحتاج
واجهات الدعم مع غير الافتراضي yy بادئة الرمز. يوفر التطبيق
وظيفة المحلل المعجمي yylex()؛ ال ليكس تم تصميم الأداة المساعدة خصيصًا لـ
إنشاء مثل هذا الروتين.

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

الإدخال عبارة عن نص حر يتبع بنية القواعد المحددة أدناه.

معجمي الهيكلية of ال قواعد
ال , ، و يجب تجاهل الحرف، إلا أن
يجب التأكد من عدم ظهور الأسماء في الأسماء أو الأحرف المتعددة المحفوظة
حرف او رمز. يجب أن ترفق التعليقات في "/* */"، ويمكن أن تظهر أينما كان الاسم
صالح.

الأسماء ذات طول عشوائي، وتتكون من حروف ونقاط ('.') ، الشرطة السفلية ('_')، و
أرقام غير أولية الحروف الكبيرة والصغيرة مميزة. التطبيقات المطابقة
لا يجوز استخدام الأسماء التي تبدأ بـ yy or YY منذ ياك يستخدم المحلل اللغوي مثل هذه الأسماء. العديد من
تظهر الأسماء في الإخراج النهائي لـ ياك، وبالتالي يجب أن يتم اختيارهم للتوافق
مع أي قواعد إضافية تم إنشاؤها بواسطة مترجم C لاستخدامها. على وجه الخصوص تظهر
in # تعريف صياغات.

يجب أن يتكون الحرفي من حرف واحد محاط بأحرف ذات علامات اقتباس مفردة. كل
يجب أن تكون تسلسلات الهروب المدعومة لثوابت الأحرف وفقًا لمعيار ISO C
مدعوم من ياك.

تتم مناقشة العلاقة مع المحلل المعجمي بالتفصيل أدناه.

يجب أن يضمن التطبيق عدم استخدام حرف NUL في القواعد النحوية أو
حرفية.

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

عادة ياك يعين العلاقة بين الأسماء الرمزية التي يولدها وأسماءهم
القيمة الرقمية الأساسية. يتيح قسم الإعلانات إمكانية التحكم في
تعيين هذه القيم.

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

تأخذ المجموعة الأولى من المعلنين أدناه قائمة بالأسماء كوسائط. يمكن لتلك القائمة
اختياريًا، يُسبق باسم عضو اتحاد C (يُسمى a بطاقة أدناه) الظهور
في غضون "<" و ">". (استثناء من الاتفاقيات المطبعية لبقية هذا
حجم POSIX.1‐2008، في هذه الحالةبطاقة> لا يمثل المتغير metavariable ، ولكن
أحرف قوس الزاوية الحرفية المحيطة بالرمز.) استخدام بطاقة يحدد أن ملف
يجب أن تكون الرموز المميزة المذكورة في هذا السطر من نفس النوع C مثل عضو الاتحاد المشار إليه
بطاقة. سيتم مناقشة هذا بمزيد من التفصيل أدناه.

بالنسبة للقوائم المستخدمة لتحديد الرموز المميزة، يمكن أن يتبع أول ظهور لرمز مميز معين
عدد صحيح موجب (كسلسلة من الأرقام العشرية). إذا تم ذلك، القيمة الأساسية
المخصص له لأغراض معجمية يجب أن يؤخذ على أنه هذا الرقم.

يعلن ما يلي الاسم ليكون رمزا:

٪ رمز [<بطاقة>] الاسم [عدد] [الاسم [عدد]]

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

يعلن ما يلي الاسم ليكون رمزًا مميزًا، ويعطي الأسبقية له:

٪غادر [<بطاقة>] الاسم [عدد] [الاسم [عدد]]
٪يمين [<بطاقة>] الاسم [عدد] [الاسم [عدد]]

يمكن أن يظهر في هذا القسم سطر أو أكثر، يبدأ كل منها بأحد هذه الرموز.
جميع الرموز المميزة الموجودة على نفس السطر لها نفس مستوى الأسبقية والترابط؛ الخطوط
هي من أجل زيادة الأسبقية أو قوة الربط. ٪غادر يدل على أن
يتم ترك المشغلين على هذا الخط ترابطيين، و ٪يمين ويدل بالمثل على الحق
المشغلين النقابيين. لو بطاقة موجود، يجب أن يعلن عن نوع C ل الاسمكما هو موضح
For ٪ رمز.

يعلن ما يلي الاسم ليكون رمزا، ويشير إلى أنه لا يمكن استخدامه
بالترابط:

%nonassoc [<بطاقة>] الاسم [عدد] [الاسم [عدد]]

إذا واجه المحلل اللغوي استخدامًا اقترانيًا لهذا الرمز المميز، فإنه يُبلغ عن خطأ. لو بطاقة is
الحاضر، يجب أن يعلن عن نوع C ل الاسمكما هو موضح ل ٪ رمز.

وفيما يلي يعلن أن عضو النقابة الاسمs ليست محطات، وبالتالي فهي مطلوبة
لديك بطاقة الحقل في بدايته:

٪نوع <بطاقة> الاسم

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

كل اسم مستخدم في قواعد لم يتم تعريفها من قبل أ ٪ رمز, ٪غادر, ٪يمينالطرق أو %nonassoc
من المفترض أن يمثل الإعلان رمزًا غير طرفي. ال ياك يجب أن تقرير فائدة
خطأ لأي رمز غير طرفي لا يظهر على الجانب الأيسر لرمز واحد على الأقل
القاعدة النحوية.

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

المعلنون التاليون لا يتبعون النمط السابق.

ما يلي يعلن غير المحطة الاسم أن تكون بداية رمزالذي يمثل
البنية الأكبر والأكثر عمومية التي تصفها القواعد النحوية:

٪يبدأ الاسم

افتراضيًا، يكون هذا هو الجانب الأيسر من القاعدة النحوية الأولى؛ يمكن أن يكون هذا الافتراضي
تجاوز مع هذا الإعلان.

وفيما يلي يعلن ياك مكدس القيمة ليكون اتحادًا لأنواع القيم المختلفة
مرغوب.

٪اتحاد { الجسدي of الاتحاد (in C)}

يجب ألا يحتوي جسم الاتحاد على رموز معالجة مسبقة غير متوازنة للأقواس المتعرجة.

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

بدلا من ذلك، نظرا لوجود واحد على الأقلبطاقة> يتم استخدام البناء، ويمكن الإعلان عن الاتحاد
في ملف رأسي (والذي سيتم تضمينه في قسم الإعلانات باستخدام ملف تتضمن #
بناء داخل %{ و %}) و typedef و يستخدم لتعريف الرمز YYSTYPE الذي يمثله
هذا الاتحاد. تأثير ٪اتحاد هو تقديم إعلان YYSTYPE مباشرة من
ال ياك إدخال.

يمكن أن تظهر إعلانات وتعريفات لغة C في قسم الإعلانات المرفق
بالعلامات التالية:

%{ %}

يجب نسخ هذه البيانات في ملف التعليمات البرمجية، ويكون لها نطاق عالمي داخل ذلك
أنه يمكن استخدامها في القواعد وأقسام البرنامج. يجب ألا تحتوي البيانات على
"٪}" خارج تعليق، أو سلسلة حرفية، أو ثابت متعدد الأحرف.

يجب أن يضمن التطبيق إنهاء قسم الإقرارات بالرمز المميز %%.

قواعد قوانيـن in ياك
يحدد قسم القواعد القواعد النحوية الخالية من السياق التي سيتم قبولها بواسطة الوظيفة ياك
ينشئ تلك القواعد ويربطها بإجراءات لغة C والأسبقية الإضافية
معلومة. يتم وصف القواعد أدناه، ويتبع التعريف الرسمي.

يتكون قسم القواعد من قاعدة نحوية واحدة أو أكثر. القاعدة النحوية لها الشكل:

A : الجسم ;

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

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

العناصر التي يتكون منها الجسم هي:

الاسم, حرفي
وهذه تشكل قواعد النحو: الاسم إما رمز أو غير محطة;
حرفي يرمز إلى نفسه (أقل من علامات الاقتباس المطلوبة معجميًا).

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

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

الإجراء عبارة عن عبارة C تعسفية، وبالتالي يمكنه إجراء الإدخال أو الإخراج أو الاتصال
البرامج الفرعية، وتغيير المتغيرات الخارجية. الإجراء هو عبارة واحدة أو أكثر من عبارات C
محاطة بأقواس مجعدة "{" و "}". يجب ألا تحتوي البيانات على
رموز المعالجة المسبقة للأقواس المتعرجة غير المتوازنة.

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

$$ يمكن تعيين قيمة الإجراء عن طريق تعيينه إلى $$. إذا النوع
تم تمكين التحقق ولا يمكن تحديد نوع القيمة التي سيتم تعيينها
تحديد، قد يتم إنشاء رسالة تشخيصية.

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

$<بطاقة>عدد
هذه تتوافق تمامًا مع الرموز المقابلة بدون بطاقة
التضمين، ولكن يسمح بفحص صارم للنوع (ويمنع الملفات غير المرغوب فيها
نوع التحويلات). التأثير هو توسيع الماكرو للاستخدام بطاقة
لتحديد عنصر من اتحاد YYSTYPE (باستخدام dataname.tag).
وهذا مفيد بشكل خاص إذا عدد ليست إيجابية.

$<بطاقة>$ وهذا يفرض على المرجع نوع عضو الاتحاد المشار إليه
by بطاقة. ينطبق هذا البناء عند الإشارة إلى اليسار
تحدث قيمة السياق في القواعد، وتوفر ياك مع وسيلة
لاختيار نوع.

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

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

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

في حالة اتباع قسم من البرنامج، يجب على التطبيق التأكد من أن القواعد النحوية
تم إنهاؤه بواسطة %%.

البرامج القسم
برامج يمكن أن يتضمن القسم تعريف المحلل المعجمي yylex()، وأي
وظائف أخرى؛ على سبيل المثال، تلك المستخدمة في الإجراءات المحددة في القواعد النحوية. هو - هي
غير محدد ما إذا كان قسم البرامج يسبق أو يتبع الإجراءات الدلالية في
ملف الإخراج؛ لذلك، إذا كان التطبيق يحتوي على أي تعريفات ماكرو و
الإعلانات التي يقصد تطبيقها على الكود في الأفعال الدلالية، يجب أن يضعها
في غضون "%{ %}" في قسم التصريحات

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

يتم تعريف البنية المعجمية بشكل أقل دقة؛ معجمي الهيكلية of ال قواعد يحدد
معظم المصطلحات. المراسلات بين المصطلحات السابقة والرموز أدناه هي كما يلي
يتبع.

المعرف وهذا يتوافق مع مفهوم الاسم، معطى سابقا. ويشمل أيضا
حرفية كما تم تعريفها سابقًا.

C_IDENTIFIER
هذا اسم، ومن المعروف أيضًا أنه يتبعه حرف a . أ
الحرفي لا يمكن أن ينتج هذا الرمز المميز.

عدد سلسلة من الأرقام (عدد صحيح عشري غير سالب).

النوع, لليسار, علامة, LCURL, RCURL
هذه تتوافق مباشرة مع ٪نوع, ٪غادر, %%, %{و %}.

{ } يشير هذا إلى الكود المصدري للغة C، مع إمكانية تضمينه "$"
وحدات الماكرو كما نوقش سابقا.

/* قواعد For ال إدخال إلى yacc. */
/* الباقة الأساسية الإدخالات. */
/* متابعيك . المعترف بها by ال معجمي محلل. */

%token IDENTIFIER /* يتضمن المعرفات والقيم الحرفية */
%token C_IDENTIFIER /* المعرف (لكن ليس حرفيًا)
متبوعة ب :. */
%الرقم المميز /* [0-9][0-9]* */

/* الكلمات المحجوزة : %type=>TYPE %left=>LEFT، وهكذا */

%token LEFT RIGHT NONASSOC TOKEN PREC TYPE START UNION

%token MARK /* العلامة %%. */
%token LCURL /* العلامة %{. */
%token RCURL /* علامة %}. */

/* تمثل الأحرف الحرفية ذات 8 بت نفسها؛ */
/* يجب تحديد الرموز المميزة للأحرف متعددة البايت. */

%بدء المواصفات

%%

المواصفات: defs قواعد MARK الذيل
;
الذيل : مارك
{
/* في هذا الإجراء، قم بإعداد بقية الملف. */
}
| /* فارغ؛ العلامة الثانية اختيارية. */
;
التعريفات: /* فارغة. */
| مواطنه
;
def : معرف البداية
| اتحاد
{
/* انسخ تعريف الاتحاد إلى الإخراج. */
}
| LCURL
{
/* انسخ كود C إلى ملف الإخراج. */
}
RCURL
| علامة كلمة nlist
;
الكلمة: رمز
| غادر
| يمين
| نوناسوك
| يكتب
;
العلامة: /* فارغ: معرف علامة الاتحاد اختياري. */
| '<' المعرف '>'
;
قائمة n: nmno
| nlist nmno
;
nmno : IDENTIFIER /* ملاحظة: الحرفي غير صالح بنوع %. */
| رقم التعريف /* ملاحظة: غير صالح بنوع %. */
;

/* قسم القواعد */

القواعد: C_IDENTIFIER rbody prec
| قواعد القواعد
;
القاعدة: C_IDENTIFIER rbody prec
| '|' rbody prec
;
rbody : /* فارغ */
| معرف rbody
| فعل rbody
;
يمثل : '{'
{
/* إجراء النسخ، ترجمة $$، وما إلى ذلك. */
}
"}"
;
Prec : /* فارغ */
| معرف ما قبل
| قانون معرف PREC
| قبل ';'
;

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

الصراعات إما أن تحول/تقلل من الصراعات أو تقلل/تقلل من الصراعات. تحول/تقليل
الصراع هو حيث، بالنسبة لحالة معينة ورمز النظرة الأمامية، يكون كل من إجراء التحول و
تقليل العمل ممكن. يتم تقليل/تقليل الصراع في حالة معينة و
رمز lookahead، من الممكن إجراء تخفيضات بقاعدتين مختلفتين.

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

الأسبقيات والارتباطات المعلنة (انظر الإعلانات القسم) اعتادوا على
حل تعارضات التحليل على النحو التالي:

1. ترتبط الأسبقية والترابط بكل قاعدة نحوية؛ انها
الأسبقية والترابط للرمز الأخير أو الحرفي في نص القاعدة. لو
ال %prec يتم استخدام الكلمة الأساسية، فهي تتجاوز هذا الافتراضي. بعض القواعد النحوية قد لا
لها كل من الأسبقية والترابط.

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

3. عندما يكون هناك تعارض تحول/تقليل لا يمكن حله بموجب القاعدة 2، يكون التحول
منتهي. يتم حساب التعارضات التي تم حلها بهذه الطريقة في مخرجات التشخيص الموضحة في
خطأ معالجة.

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

لا يتم احتساب التعارضات التي تم حلها بالأسبقية أو الترابط في النقل/التخفيض
وتقليل/تقليل النزاعات التي أبلغ عنها ياك على أي خطأ قياسي أو في
ملف الوصف.

خطأ معالجة
الرمز خطأ يجب أن تكون محفوظة لمعالجة الأخطاء. الاسم خطأ يمكن استخدامها في
القواعد النحوية. يشير إلى الأماكن التي يمكن للمحلل أن يتعافى فيها من خطأ في بناء الجملة. ال
القيمة الافتراضية لـ خطأ يجب أن تكون 256. ويمكن تغيير قيمتها باستخدام أ ٪ رمز إعلان.
لا ينبغي للمحلل المعجمي إرجاع قيمة خطأ.

يجب أن يكتشف المحلل اللغوي وجود خطأ في بناء الجملة عندما يكون في حالة يرتبط فيها الإجراء
مع رمز lookahead هو خطأ. يمكن أن يتسبب الإجراء الدلالي في بدء المحلل اللغوي
معالجة الأخطاء عن طريق تنفيذ الماكرو YYERROR. عند تنفيذ YYERROR، يتم تنفيذ الدالة الدلالية
الإجراء يمرر التحكم مرة أخرى إلى المحلل اللغوي. لا يمكن استخدام YYERROR خارج نطاق الدلالات
الإجراءات.

عندما يكتشف المحلل اللغوي وجود خطأ في بناء الجملة، فإنه عادة ما يستدعي yyerror() بالحرف
سلسلة "بناء الجملة خطأ" كحجة لها. لا يجوز إجراء المكالمة إذا كان المحلل اللغوي لا يزال
التعافي من خطأ سابق عند اكتشاف الخطأ. يعتبر المحلل اللغوي
أن يتعافى من خطأ سابق حتى ينتقل المحلل اللغوي إلى ثلاثة على الأقل
رموز الإدخال العادية منذ اكتشاف الخطأ الأخير أو تنفيذ الإجراء الدلالي
الماكرو yyerrok. لا يجوز للمحلل استدعاء yyerror() عند تنفيذ YYERROR.

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

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

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

الماكرو yyerrok في العمل الدلالي يجب أن يتسبب في أن يتصرف المحلل كما لو كان قد فعل ذلك بالكامل
تعافى من أي أخطاء سابقة. الماكرو yyclearin يجب أن يتسبب في تجاهل المحلل اللغوي
رمز lookahead الحالي. إذا لم تتم قراءة رمز البحث الأمامي الحالي بعد،
yyclearin لن يكون لها أي تأثير.

يجب أن يتسبب الماكرو YYACCEPT في عودة المحلل اللغوي بالقيمة صفر. الماكرو YYABORT
يجب أن يتسبب في عودة المحلل بقيمة غير صفرية.

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

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

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

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

الانتهاء ال البرنامج
بالإضافة إلى yyparse() و yylex()، وظائف yyerror() و رئيسي() المطلوبة ل
جعل برنامج كامل. يمكن أن يوفر التطبيق رئيسي() و yyerror()، أو تلك
يمكن الحصول على الروتين من ياك مكتبة.

ياك المكتبة
يجب أن تظهر الوظائف التالية فقط في ياك مكتبة يمكن الوصول إليها من خلال y
المعامل ل c99; وبالتالي يمكن إعادة تعريفها من خلال تطبيق مطابق:

مادبا رئيسي(باطل)
يجب استدعاء هذه الوظيفة yyparse() والخروج بقيمة غير محددة. افعال اخرى
ضمن هذه الوظيفة غير محددة.

مادبا yyerror(CONST دبابة *s)
يجب أن تكتب هذه الوظيفة الوسيطة المنتهية بـ NUL إلى الخطأ القياسي، متبوعةً بـ
أ .

ترتيب y و l المعاملات الممنوحة ل c99 غير مهمة؛ يجب على التطبيق
إما تقديم الخاصة بها رئيسي() وظيفة أو التأكد من ذلك y تسبق l.

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

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

متى تم تحديد ملف التعليمات البرمجية بحيث، إذا لم يكن YYDEBUG موجودًا بالفعل
تم تحديده في وقت التجميع (باستخدام ملف c99 − د خيار YYDEBUG، على سبيل المثال)، يجب على YYDEBUG
يتم تعيينها بشكل صريح على 1. متى لم يتم تحديده، يجب إنشاء ملف التعليمات البرمجية بحيث،
إذا لم يتم تعريف YYDEBUG بالفعل، فيجب تعيينه بشكل صريح على الصفر.

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

خوارزميات
المحلل اللغوي الذي أنشأه ياك تنفذ لالر(1) خوارزمية التحليل كما هو موثق في
الأدب. من غير المحدد ما إذا كان المحلل اللغوي يعتمد على الجدول أو مشفر بشكل مباشر.

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

تحدد أدبيات نظرية التحليل هذه المفاهيم.

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

الجدول: داخلي حدود in ياك

┌───────────────────┬────────────── ────────── ─────┐
│ │ الحد الأدنى │ │
قصرأقصىالوصف
├───────────────────┼────────────── ────────── ─────┤
│{NTERMS} │ 126 │ عدد الرموز المميزة. │
│{NNONTERM} │ 200 │ عدد المحطات غير الطرفية. │
│{NPROD} │ 300 │ عدد القواعد. │
│{NSTATES} │ 600 │ عدد الولايات. │
│{MEMSIZE} │ 5200 │ طول القواعد. المجموع │
│ │ │ الطول، في الأسماء (الرموز و │
│ │ │ غير المحطات) من جميع │
│ │ │ قواعد النحو. │
│ │ │ يتم حساب الجانب الأيسر بـ │
│ │ │ كل قاعدة، حتى لو لم تكن │
│ │ │ مكرر بشكل صريح مثل │
│ │ │ المحدد في قواعد قوانيـن in
│ │ │ ياك. │
│{ACTSIZE} │ 4000 │ عدد الإجراءات. ``الإجراءات'' │
│ │ │ هنا (وفي الوصف │
│ │ │ ملف) يشير إلى إجراءات المحلل اللغوي │
│ │ │ (التحويل والتقليل وما إلى ذلك) وليس │
│ │ │ إلى الإجراءات الدلالية المحددة في │
│ │ │ قواعد قوانيـن in ياك. │
└─────────┴─────────┴────────────── ────────── ─────┘

EXIT الوضع


يتم إرجاع قيم الخروج التالية:

0 إتمام بنجاح.

> 0 حدث خطأ.

عواقب OF أخطاء


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

متابعيك أقسام . غنيا بالمعلومات.

تطبيق الاستعمال


تواجه التطبيقات التاريخية تعارضات في الأسماء yacc.tmp, yacc.acts,
yacc.debug, علامة التبويب y.tab.c, y.tab.hو y.output إذا كان هناك أكثر من نسخة واحدة ياك يعمل في
دليل واحد في وقت واحد. ال − ب تمت إضافة الخيار للتغلب على هذه المشكلة. ال
مشكلة ذات صلة بالسماح متعددة ياك كان الموزعون ليتم وضعها في نفس الملف
تم تناوله بإضافة أ ص خيار لتجاوز الترميز الثابت مسبقًا yy بادئة متغيرة.

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

يحتاج المشغلون الأحاديون الذين يمثلون نفس الرمز المميز للمشغل الثنائي بشكل عام إلى
تم تعديل الأسبقية. يتم التعامل مع هذا من خلال %prec الرمز الاستشاري المرتبط بـ
قاعدة نحوية معينة تحدد ذلك العامل الأحادي. (يرى قواعد قوانيـن in ياك.)
ليس مطلوبًا من التطبيقات استخدام هذا العامل مع العوامل الأحادية، ولكن القواعد النحوية
التي لا تتطلب ذلك نادرة.

أمثلة


الوصول إلى ياك يتم الحصول على المكتبة باستخدام معاملات البحث في المكتبة c99. لاستخدام ال
ياك مكتبة رئيسي():

c99 علامة التبويب y.tab.c y

كلا ال ليكس مكتبة و ياك تحتوي المكتبة رئيسي(). للوصول إلى ياك رئيسي():

c99 علامة التبويب y.tab.c lex.yy.c y l

هذا يضمن أن ياك يتم البحث في المكتبة أولا، بحيث تكون رئيسي() مستعمل.

التاريخية ياك تحتوي المكتبات على وظيفتين بسيطتين يتم ترميزهما عادةً
عن طريق مبرمج التطبيق تشبه هذه الوظائف الكود التالي:

تتضمن #
مادبا الرئيسي (باطل)
{
خارجي مادبا yyparse();

setlocale(LC_ALL, "");

/* إذا تم إنشاء المحلل اللغوي التالي بواسطة lex، فإن
يجب أن يكون التطبيق حريصًا للتأكد من أن LC_CTYPE
ويتم تعيين LC_COLLATE على لغة POSIX. */
(باطل) yyparse();
عودة (0) ؛
}

#يشمل

int yyerror(const char *msg)
{
(باطل) fprintf(stderr, "%s\n", msg);
عودة (0) ؛
}

الأساس المنطقي


المراجع في تمت الإشارة إليه الوثائق قد يكون من المفيد في بناء المحلل اللغوي
مولد كهرباء. مقالة DeRemer وPennello المشار إليها (جنبًا إلى جنب مع الأعمال المتعلقة بها
المراجع) يصف تقنية لإنشاء المحلل اللغوي الذي يتوافق مع هذا الحجم من
POSIX.1-2008. ويتواصل العمل في هذا المجال، لذا ينبغي على المنفذين التشاور
الأدبيات الحالية قبل القيام بأي تطبيقات جديدة. مقالة Knuth الأصلية هي
الأساس النظري لهذا النوع من المحلل اللغوي، لكن الجداول التي ينشئها غير عملية
كبيرة بالنسبة للقواعد النحوية المعقولة ويجب عدم استخدامها. ""ما يعادل"" الصياغة هي
مصمم للتأكد من أن أفضل الطاولات موجودة لالر(1) يمكن توليدها.

كان هناك ارتباك بين فئة القواعد والخوارزميات اللازمة لإنشاءها
الموزعون والخوارزميات اللازمة لتحليل اللغات. كلهم معقول
متعامد. على وجه الخصوص، مولد محلل يقبل النطاق الكامل لـ LR1
لا تحتاج القواعد النحوية إلى إنشاء جدول أكثر تعقيدًا من الجدول المقبول SLR(1) (أ
فئة ضعيفة نسبيًا من قواعد LR) لقواعد النحو التي تصادف وجودها SLR(1). مثل هذا
التنفيذ لا يحتاج إلى الاعتراف بالحالة أيضًا؛ يمكن أن يؤدي ضغط الجدول إلى SLR1
جدول (أو حتى أصغر من ذلك) دون التعرف على القواعد النحوية SLR(1). ال
سرعة LR(1) يعتمد المحلل اللغوي لأي فئة بشكل أكبر على تمثيل الجدول و
الضغط (أو إنشاء الكود إذا تم إنشاء محلل مباشر) بدلاً من الفصل
القواعد النحوية التي يتعامل معها منشئ الجدول.

تعتمد سرعة مولد المحلل اللغوي إلى حد ما على فئة القواعد النحوية
مقابض. ومع ذلك، كانت خوارزميات مقالة Knuth الأصلية لإنشاء موزعي LR
حكم عليها مؤلفها بأنها بطيئة بشكل غير عملي في ذلك الوقت. على الرغم من أن LR الكامل هو أكثر من ذلك
معقدة من لالر(1)، مع تحسن سرعات الكمبيوتر والخوارزميات، الفرق (من حيث
أصبح وقت تنفيذ ساعة الحائط المقبول) أقل أهمية.

يتم تحذير المؤلفين المحتملين من مقالة DeRemer وPennello المشار إليها
تم الاستشهاد به سابقًا يحدد وجود خطأ (الإفراط في تبسيط حساب لالر1
مجموعات lookahead) في بعض لالر(1) بيانات الخوارزمية التي سبقتها
النشر. يجب أن يأخذوا الوقت الكافي للبحث عن تلك الورقة، بالإضافة إلى الأوراق الحالية ذات الصلة
العمل، وخاصة أهو.

− ب تمت إضافة الخيار لتوفير طريقة محمولة للسماح ياك للعمل على
عدة موزعين منفصلين في نفس الدليل. إذا كان الدليل يحتوي على أكثر من واحد
ياك القواعد، ويتم إنشاء كلا النحويين في نفس الوقت (على سبيل المثال، بواسطة أ
موازى جعل البرنامج)، نتائج الصراع. في حين أن الحل ليس في الممارسة التاريخية،
فهو يصحح النقص المعروف في التطبيقات التاريخية. وكانت التغييرات المقابلة
تم إجراؤها على كافة الأقسام التي تشير إلى أسماء الملفات علامة التبويب y.tab.c (الآن ``ملف التعليمات البرمجية'')،
y.tab.h (الآن ``ملف الرأس'')، و y.output (الآن ``ملف الوصف'').

النحو ل ياك يعتمد الإدخال على وثائق System V. الوصف النصي
يظهر هناك أن "؛" مطلوب في نهاية القاعدة. النحو و
التنفيذ لا يتطلب هذا. (استخدام C_IDENTIFIER يؤدي إلى حدوث انخفاض في
المكان الصحيح.)

أيضًا، في هذا التنفيذ، يتم إنشاء بنيات مثل ٪ رمز يمكن إنهاؤها بواسطة أ
لكن هذا لا يجوز في النحو. الكلمات الرئيسية مثل ٪ رمز يمكن
تظهر أيضًا بأحرف كبيرة، والتي لم تتم مناقشتها مرة أخرى. في معظم الأماكن حيث '٪' يستخدم ،
يمكن استبدالها، وهناك تهجئات بديلة لبعض الرموز
(فمثلا، ٪اليسار يمكن أن يكون "%<" أو حتى "\<").

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

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

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

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

تتضمن الرسائل الإحصائية من العديد من التطبيقات التاريخية الأنواع التالية من
المعلومات:

n/512 محطات، n/300 غير المحطات الطرفية
n/600 القواعد النحوية، n/1500 ولاية
n التحول / تقليل، n تقليل/تقليل الصراعات المبلغ عنها
n/350 مجموعة عمل مستخدمة
الذاكرة: الحالات، الخ. n/ 15000، محلل n/ 15000
n/600 مجموعة أمامية مميزة
n إغلاقات إضافية
n إدخالات التحول, n الاستثناءات
n انتقل إلى الإدخالات
n الإدخالات المحفوظة افتراضيًا
مساحة المحسن المستخدمة: الإدخال n/15000، الإخراج n/ 15000
n إدخالات الجدول، n صفر
الحد الأقصى للانتشار: nالحد الأقصى للإزاحة: n

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

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

لم يتم وصف تقارير الأخطاء القياسية بشكل محدد لأنها نادرًا ما تُستخدم
التطبيقات المطابقة ولم يكن هناك سبب لتقييد عمليات التنفيذ.

تعترف بعض التطبيقات "={" بما يعادل "{" لأنه يظهر في التاريخ
توثيق. تم التعرف على هذا البناء وتوثيقه على أنه قديم منذ فترة طويلة
1978، في المشار إليه ياك: بعد آخر مترجم مترجم. هذا الحجم من POSIX.1‐2008
اختار تركها كما عفا عليها الزمن وحذفها.

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

المستقبل اتجاهات


لا شيء.

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


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

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

  • 1
    itop - المصدر المفتوح ITSM CMDB
    itop - المصدر المفتوح ITSM CMDB
    بوابة عمليات تكنولوجيا المعلومات: مفتوحة بالكامل
    المصدر ، ITIL ، الخدمة المستندة إلى الويب
    بما في ذلك أداة إدارة بشكل كامل
    CMDB قابل للتخصيص ونظام مكتب المساعدة و
    رجل وثيقة ...
    قم بتنزيل itop - ITSM CMDB OpenSource
  • 2
    كليمنتين
    كليمنتين
    كليمنتين هي موسيقى متعددة المنصات
    مشغل ومنظم مكتبة مستوحى من
    أمروك 1.4 لديها سريع و
    واجهة سهلة الاستخدام ، وتتيح لك
    البحث و ...
    تحميل كليمنتين
  • 3
    XISMuS
    XISMuS
    تنبيه: التحديث التراكمي 2.4.3 له
    أطلق سراحه !! التحديث يعمل لأي
    الإصدار 2.xx السابق. في حالة الترقية
    من الإصدار v1.xx ، يرجى التنزيل و
    ط ...
    تنزيل XISMuS
  • 4
    الوجه
    الوجه
    برنامج تتبع الرأس المعياري أن
    يدعم العديد من أدوات تتبع الوجوه والمرشحات
    وبروتوكولات اللعبة. بين المتعقبين
    هم SM FaceAPI ، رئيس AIC بالقصور الذاتي
    تعقب ...
    تنزيل facetracknoir
  • 5
    كود PHP QR
    كود PHP QR
    PHP QR Code مفتوح المصدر (LGPL)
    مكتبة لتوليد رمز الاستجابة السريعة ،
    الباركود ثنائي الأبعاد. مرتكز على
    مكتبة libqrencode C ، توفر API لـ
    إنشاء شريط رمز الاستجابة السريعة ...
    تنزيل PHP QR Code
  • 6
    مجاني
    مجاني
    Freeciv هو حر قائم على الدور
    لعبة استراتيجية متعددة اللاعبين ، وفي كل منها
    يصبح اللاعب قائدًا لـ
    الحضارة تقاتل من أجل الحصول على
    الهدف النهائي: أن تصبح ...
    تنزيل Freeciv
  • أكثر "

أوامر لينكس

Ad