Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

توليد الكود (codegen)

ماذا ستتعلّم: كيف تتحوّل ملفّات YAML إلى كود C++ وتوثيق، وأين المولّدات.

الخطّ

flowchart LR
  Y["language-truth/*.yaml"] --> P["scripts/codegen/gen_*.py"]
  P --> H["shared/*/generated/*.{h,cpp}"]
  P --> D["docs/ (توثيق مُولَّد)"]
  H --> B["بناء C++ (CMake)"]

المولّدات (scripts/codegen/)

📏 المقيس على dev: 79 ملفَّ بايثون في scripts/codegen/، منها 31 بالبادئة gen_ (مولِّد فعليّ) و22 بالبادئة check_ (حرّاسٌ وفاحصون)، و5 في _lib/ (مكتباتٌ مساعدة)، والباقي (21) اختباراتُ test_* وسكربتاتُ ترحيلٍ لمرّةٍ واحدة. الجدولُ أدناه عيّنةٌ تشرح النمط، لا جردًا كاملًا — الجردُ في المجلّد نفسِه.

المولّدالمصدر → الناتج
gen_keywords.pykeywords.yaml → keywords_generated.{h,cpp}
gen_types.pytypes.yaml → كود الأنواع المُولَّد
gen_builtins_registry.py / gen_all_builtins_yaml.pybuiltins/ → builtin_registry_generated.h
gen_error_messages.pyerrors/ → رسائل/تشخيص مُولَّد (أداةُ sadinfo ومولِّدُها gen_sadinfo_errors.py تقاعدا في تمّوز ٢٠٢٦ — #144)
gen_parser_grammar_docs.pygrammar/*.yaml → docs/parser_rule/_generated/
check_grammar_conformance.pyيفحص تغطية القواعد وتماسك وسوم الاختبارات

اكتشف الواجهة بـpython scripts/codegen/<gen>.py --help. بعضها يعمل عبر CMake عند البناء.

قواعد ذهبيّة

  • لا تحرّر generated/ يدويًّا — عدّل YAML ثم أعد التوليد.
  • ضمّن المُولَّد في الـcommit مع YAML (متطابقين) — هو جزء من «قائمة الملفّات».
  • فحص CI: مولّدات --check (مثل gen_parser_grammar_docs.py --check) تفشل إن تباعد المُولَّد عن المصدر.

نمط مولّد التوثيق (مثال متقدّم)

gen_parser_grammar_docs.py يقرأ قواعد الإنتاج (grammar/*.yaml) ويُنتج لكل قاعدة: BNF + المسار إلى دالة المحلل (maps_to) ⇒ عقدة AST + مخطّط Mermaid آليّ + روابط «يستدعي/مُستدعى». ثم --check يضمن بقاء التوثيق محدَّثًا في CI. → قواعد المحلل SoT.


اقرأ بعده: قواعد المحلل كمصدر موحّد.