شجرة AST
ماذا ستتعلّم: كيف تُمثَّل البرامج كشجرة، ونمط الزائر (Visitor) الذي يستهلكها.
الدور
shared/ast/ يُعرّف عقد الشجرة المجرّدة التي يبنيها المحلل النحوي ويستهلكها المفسّر
والمترجم. القاعدة ASTNode، ومنها Statement (جمل) وExpression (تعابير).
أنواع العقد (أمثلة)
- جمل:
IfStmt,WhileStmt,ForRangeStmt,ReturnStmt,BlockStmt,TryStmt,SwitchStmt,MatchStmt,ExprStmt، تصريحات (FunctionDecl,ClassDecl,VarDeclStmt,EnumDecl,StructDecl, …). - تعابير:
BinaryExpr,UnaryExpr,CallExpr,MethodCallExpr,MemberExpr,IndexExpr,LiteralExpr,VariableExpr,LambdaExpr,TernaryExpr,RangeExpr,ArrayExpr,MapExpr,NewExpr,ThisExpr/SuperExpr,AwaitExpr، …
العقدة المُنتَجة لكل قاعدة نحويّة مُوثَّقة في حقل
ast_nodeبمصدر القواعد. → grammar SoT.
نمط الزائر (Visitor)
العقد تُستهلَك عبر ASTVisitor (في shared/ast/include/ast_visitor.h): كل مستهلِك
(مفسّر، SIRBuilder، منسّق، LSP) يطبّق الزائر. هذا يحقّق مبدأ المفتوح/المغلق:
أضف مستهلِكًا جديدًا دون تعديل العقد.
flowchart LR
AST["عقد AST"] --> V{"ASTVisitor"}
V --> INT["InterpreterVisitor (تقييم)"]
V --> SIR["SIRBuilder (→ SIR)"]
V --> FMT["Formatter / LSP"]
إضافة عقدة AST
- عرّف الصنف في
shared/ast/include/(ورث منStatement/Expression). - أضف تصريحها في
ast_visitor.hودالة الزيارة. - نفّذ الزيارة في المفسّر (
interpreter/include/visitors/) وcompiler/src/frontend/. - التوافق الخلفيّ: إضافة عقدة مسموحة — تغيير معنى عقدة موجودة ممنوع (CW-24).
ملاحظات
- مرّر العقد الكبيرة بمرجع/مؤشّر ذكيّ؛ لا نسخ عميق إلا عبر
clone()صريح (CW-29). Value(وقت التشغيل) منفصل عن عقد AST — راجع نظام الأنواع.
اقرأ بعده: المفسّر الشجري.