سؤال

تستخدم قاعدة البرامج التي أقوم بتطويرها كمية كبيرة من yacc والتي لا أحتاج للتعامل معها.في بعض الأحيان أعتقد أنه سيكون من المفيد فهم بعض المشكلات التي أجدها ولكن في معظم الأوقات يمكنني أن أفلت من جهلي الكامل بـ yacc.

سؤالي هل هناك ما يكفي من المشاريع الجديدة التي لا تزال تستخدم yacc لضمان الوقت الذي سأحتاجه لتعلمها؟

يحرر:نظرًا لأن الاستجابة في الغالب لصالح تعلم Yacc، فهل هناك لغة مماثلة تنصح بها بدلاً من yacc؟

هل كانت مفيدة؟

المحلول

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

لسنوات عديدة، كانت الأداة الفعلية لتوليد التعليمات البرمجية لتحليل القواعد النحوية هي yacc، أو ابن عمها GNU، البيسون.

لقد سمعت مؤخرًا أن هناك بضعة أطفال جدد في المنطقة، لكن المبدأ هو نفسه:تكتب قواعد نحوية تعريفية بتنسيق يكون أكثر أو أقل في نموذج Backus-Naur (بي إن إف) و yacc/bison/أي شيء ينشئ لك بعض التعليمات البرمجية التي قد تكون كتابتها يدويًا مملة للغاية.

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

يحرر: نظرًا لسؤال المتابعة الخاص بك حول الأدوات الأخرى، فإن Yacc/Bison بالطبع هي الأفضل لمشاريع C/C++، نظرًا لأنها تولد كود C.هناك أدوات مماثلة للغات الأخرى.ليست كل القواعد النحوية متكافئة، ويمكن لبعض مولدات المحلل اللغوي أن تستوعب فقط القواعد النحوية ذات التعقيد المعين.لذلك قد تحتاج إلى العثور على أداة يمكنها تحليل قواعدك النحوية.يرى http://en.wikipedia.org/wiki/Comparison_of_parser_generators

نصائح أخرى

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

ولا XML بالنسبة لي، لا يا سيدي، هه: -)

وحلول باستخدام يكس / ياك هي خطوة من ملفات التكوين القديمة من خطوط key=val لأنها تسمح الهياكل الهرمية أفضل مثل:

server = "mercury" {
    ip = "172.3.5.13"
    gateway = "172.3.5.1"
}
server = "venus" {
    ip = "172.3.5.21"
    gateway = "172.3.5.1"
}

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

وهذا لأنني يفضلون تقديم البرامج في الوقت المحدد والميزانية بدلا من تقديم أكبر قدر من التكنولوجيا الجديدة أزيز الدوي - سوف موكلي لن تدفع لدراستي، انهم يريدون أولا وقبل كل شيء وأنا بالفعل خبير في الدعوى / ياك ويكون كل رمز قالب لفعل ذلك بسرعة.

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

وحكم آخر من الإبهام: إذا التكنولوجيا للأغراض العامة هو شائع بما يكفي أنك واجهت بالفعل، هو على الأرجح شائعا بما فيه الكفاية التي يجب أن تتعرف على ذلك، لأنك سوف ترى ذلك مرة أخرى في يوم واحد. من يدري: من خلال تعريف نفسك مع ذلك، وربما أضاف لك أداة مفيدة لالأدوات الخاصة بك ...

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

.

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

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

وأعمل على المشاريع التي تستخدم ياك. لا قانون جديد - ولكن كانوا الجديدة، انها تريد الاستمرار في استخدام ياك أو قريب (بيسون، Byacc، ...)

نعم، إني أعتبر أن التعلم قيمتها إذا كنت تعمل في C.

ضع في اعتبارك أيضا تعلم ANTLR، أو غيرها من مولدات محلل أكثر حداثة. ولكن معرفة ياك ستقف أنت في أيد أمينة - أنها سوف تساعدك على تعلم أي أدوات أخرى مشابهة جدا، لأن الكثير من النظرية الأساسية يشبه

وأنا لا أعرف عن ياك / البيسون على وجه التحديد، ولكن لقد استخدمت ANTLR، وكأس، jlex وjavacc. اعتقدت أنها ستكون فقط من أهمية accademic، ولكن كما اتضح كنا بحاجة إلى لغة مجال معين، وهذا أعطانا الحل أجمل بكثير من بعض "بساطة" (التعابير المنطقية القائم) موزعي هناك. قد تكون الصيانة قضية في العديد من البيئات، على الرغم - لأن معظم المبرمجون وهذه الأيام ليس لديها أي خبرة مع أدوات تحليل

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

وبالإضافة إلى نقطة أخرى للANTLR هي ANTLRWorks: بيئة تطوير ANTLR GUI الذي هو مساعدة حين كبيرة تطوير وتصحيح قواعد النحو الخاصة بك. أنا لم أرى نظام تحليل آخر الذي تدعمه مثل هذا IDE.

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

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top