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/)

المولّدالمصدر → الناتج
gen_keywords.pykeywords.yamlkeywords_generated.{h,cpp}
gen_types.pytypes.yaml → كود الأنواع المُولَّد
gen_builtins_registry.py / gen_all_builtins_yaml.pybuiltins/builtin_registry_generated.h
gen_error_messages.py / gen_sadinfo_errors.pyerrors/ → رسائل/تشخيص مُولَّد
gen_parser_grammar_docs.pygrammar/*.yamldocs/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.


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