Syntax Directed Definitions (SDD) and Construction of Syntax Trees | рд╕рд┐рдВрдЯреИрдХреНрд╕ рдирд┐рд░реНрджреЗрд╢рд┐рдд рдкрд░рд┐рднрд╛рд╖рд╛рдПрдБ рдФрд░ рд╕рд┐рдВрдЯреИрдХреНрд╕ рд╡реГрдХреНрд╖ рдирд┐рд░реНрдорд╛рдг - Compiler Design Notes 2025

Syntax Directed Definitions (SDD) and Construction of Syntax Trees | рд╕рд┐рдВрдЯреИрдХреНрд╕ рдирд┐рд░реНрджреЗрд╢рд┐рдд рдкрд░рд┐рднрд╛рд╖рд╛рдПрдБ рдФрд░ рд╕рд┐рдВрдЯреИрдХреНрд╕ рд╡реГрдХреНрд╖ рдирд┐рд░реНрдорд╛рдг - Compiler Design Notes 2025


рд╕рд┐рдВрдЯреИрдХреНрд╕ рдирд┐рд░реНрджреЗрд╢рд┐рдд рдкрд░рд┐рднрд╛рд╖рд╛рдПрдБ (Syntax Directed Definitions) рдФрд░ рд╕рд┐рдВрдЯреИрдХреНрд╕ рд╡реГрдХреНрд╖ рдирд┐рд░реНрдорд╛рдг (Construction of Syntax Trees)

Compiler Design рдореЗрдВ Syntax Directed Definitions (SDD) рдПрдХ рдРрд╕рд╛ рдврд╛рдВрдЪрд╛ рд╣реИ рдЬреЛ рд╡реНрдпрд╛рдХрд░рдг (Grammar) рдХреЛ рдЕрд░реНрде (Semantics) рд╕реЗ рдЬреЛрдбрд╝рддрд╛ рд╣реИред рдпрд╣ Compiler рдХреЛ Syntax Tree (рдпрд╛ Parse Tree) рдмрдирд╛рдиреЗ, expressions evaluate рдХрд░рдиреЗ, рдФрд░ intermediate code generate рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИред

ЁЯУШ Syntax Directed Definitions (SDD) рдХреНрдпрд╛ рд╣реИ?

Syntax Directed Definition рдПрдХ рдРрд╕реА formal method рд╣реИ рдЬрд┐рд╕рдореЗрдВ grammar рдХреЗ рд╕рд╛рде semantic rules рдЬреЛрдбрд╝реЗ рдЬрд╛рддреЗ рд╣реИрдВред рдкреНрд░рддреНрдпреЗрдХ grammar rule рдХреЗ рд╕рд╛рде attributes рдФрд░ actions associate рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ рдЬреЛ program рдХреЗ рдЕрд░реНрде рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВред

рдЙрджрд╛рд╣рд░рдг:

E тЖТ E1 + T      { E.val = E1.val + T.val }
E тЖТ T           { E.val = T.val }
T тЖТ T1 * F      { T.val = T1.val * F.val }
T тЖТ F           { T.val = F.val }
F тЖТ (E)         { F.val = E.val }
F тЖТ num         { F.val = num.lexval }

рдпрд╣ SDD grammar Arithmetic Expression рдХрд╛ рдореВрд▓реНрдп рдирд┐рдХрд╛рд▓ рд╕рдХрддрд╛ рд╣реИ рдЬреИрд╕реЗ (3 + 4) * 5ред

---

тЪЩя╕П SDD рдХреЗ рдШрдЯрдХ:

  • ЁЯФ╣ Attributes: Grammar symbols рдХреЗ рд╕рд╛рде рдЬреБрдбрд╝реЗ рдорд╛рди рдпрд╛ рдЧреБрдгред
  • ЁЯФ╣ Semantic Rules: рд╡реЗ рдирд┐рдпрдо рдЬреЛ attributes рдХреЛ calculate рдХрд░рддреЗ рд╣реИрдВред

ЁЯУЧ Attributes рдХреЗ рдкреНрд░рдХрд╛рд░:

  • 1я╕ПтГг Synthesized Attributes: Child nodes рд╕реЗ parent nodes рддрдХ рдЬрд╛рдирдХрд╛рд░реА рд▓реЗ рдЬрд╛рддреЗ рд╣реИрдВред
  • 2я╕ПтГг Inherited Attributes: Parent рдпрд╛ sibling nodes рд╕реЗ child nodes рддрдХ рдЬрд╛рдирдХрд╛рд░реА рд▓реЗ рдЬрд╛рддреЗ рд╣реИрдВред

рдЙрджрд╛рд╣рд░рдг:

S тЖТ A B
A тЖТ a
B тЖТ b

рдпрджрд┐ B рдХреЛ A рдХреА value рдЪрд╛рд╣рд┐рдП, рддреЛ рд╡рд╣ Inherited Attribute рдХрд╣рд▓рд╛рдПрдЧрд╛ред

---

ЁЯзй Syntax Directed Translation (SDT):

рдЬрдм SDD рдореЗрдВ semantic rules рдХреЗ рд╕рд╛рде-рд╕рд╛рде actions рднреА рдЬреЛрдбрд╝реЗ рдЬрд╛рддреЗ рд╣реИрдВ, рддреЛ рдЗрд╕реЗ Syntax Directed Translation (SDT) рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрди actions рдХреЛ grammar rules рдореЗрдВ curly braces { } рдХреЗ рднреАрддрд░ рд▓рд┐рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдЙрджрд╛рд╣рд░рдг:

E тЖТ E1 + T  { print('+') }
E тЖТ T
T тЖТ T1 * F  { print('*') }
T тЖТ F
F тЖТ (E)
F тЖТ id      { print(id.name) }

рдпрд╣ postfix expression (Reverse Polish Notation) generate рдХрд░рддрд╛ рд╣реИред

---

ЁЯзо S-Attributed Definition (Synthesized Attributes Only):

рдпрджрд┐ grammar рдореЗрдВ рдХреЗрд╡рд▓ synthesized attributes рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рддреЛ рдЙрд╕реЗ S-Attributed Definition рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред

рдЙрджрд╛рд╣рд░рдг:

E тЖТ E1 + T  { E.val = E1.val + T.val }
E тЖТ T       { E.val = T.val }
T тЖТ num     { T.val = num.lexval }

рдпрд╣ syntax tree рдХреЛ bottom-up рддрд░реАрдХреЗ рд╕реЗ evaluate рдХрд░рддрд╛ рд╣реИред

---

ЁЯУШ L-Attributed Definition:

рдпрджрд┐ grammar рдореЗрдВ synthesized рдФрд░ рдХреБрдЫ inherited attributes рджреЛрдиреЛрдВ рдХрд╛ рдкреНрд░рдпреЛрдЧ рд╣реЛ, рддреЛ рдЙрд╕реЗ L-Attributed Definition рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред

рдЙрджрд╛рд╣рд░рдг:

E тЖТ T E'
E' тЖТ + T { E'.inh = E.inh + T.val } E'
E' тЖТ ╬╡   { E.val = E'.inh }

рдпрд╣ top-down evaluation рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рд╣реЛрддрд╛ рд╣реИред

---

ЁЯзй Syntax Tree (рд╕рд┐рдВрдЯреИрдХреНрд╕ рд╡реГрдХреНрд╖):

Syntax Tree рдПрдХ simplified Parse Tree рд╣реЛрддрд╛ рд╣реИ рдЬреЛ рдХреЗрд╡рд▓ рдЖрд╡рд╢реНрдпрдХ operators рдФрд░ operands рдХреЛ рджрд┐рдЦрд╛рддрд╛ рд╣реИред рдпрд╣ compiler рдХреЗ Intermediate Representation рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИред

ЁЯУШ рдЙрджрд╛рд╣рд░рдг:

Expression: (3 + 4) * 5

Parse Tree:

        E
       /|\
      E + T
     /   /|\
    T   F * F
   |   |   |
   F   id  id

Syntax Tree:

     *
    / \
   +   5
  / \
 3   4

ЁЯУЧ Syntax Tree Construction Algorithm:

  1. рд╣рд░ grammar rule рдХреЗ рд▓рд┐рдП рдПрдХ function рдмрдирд╛рдПрдВред
  2. Operators рдХреЗ рд▓рд┐рдП internal nodes рдмрдирд╛рдПрдВред
  3. Operands (identifiers, numbers) рдХреЗ рд▓рд┐рдП leaves рдмрдирд╛рдПрдВред
  4. Recursive connections рдмрдирд╛рдПрдВред

тЪЩя╕П Example Code (Syntax Tree Node Creation):

struct Node {
  char op;
  struct Node *left, *right;
};

Node* makeNode(char op, Node* left, Node* right) {
  Node* node = (Node*)malloc(sizeof(Node));
  node->op = op;
  node->left = left;
  node->right = right;
  return node;
}
---

ЁЯза Evaluation Using Syntax Trees:

Syntax Tree рдХрд╛ рдЙрдкрдпреЛрдЧ expression evaluation рдФрд░ intermediate code generation рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

Example:

Infix: (3 + 4) * 5
Postfix: 3 4 + 5 *
---

ЁЯЪА рдЖрдзреБрдирд┐рдХ рдЙрдкрдпреЛрдЧ (2025 рдореЗрдВ):

  • ЁЯФ╣ AI-assisted Tree Builders тАУ Syntax tree generation with semantic taggingред
  • ЁЯФ╣ Visualization Tools тАУ Tree diagrams using compiler IDEsред
  • ЁЯФ╣ Machine Learning Parsers тАУ Syntax + meaning extraction combinedред
---

ЁЯУЩ рдирд┐рд╖реНрдХрд░реНрд╖:

Syntax Directed Definitions Compiler Design рдХреА рд░реАрдврд╝ рд╣реИрдВред рдпреЗ Grammar рдФрд░ Semantics рдХреЗ рдмреАрдЪ рдкреБрд▓ рдХрд╛ рдХрд╛рдо рдХрд░рддреА рд╣реИрдВред Syntax Tree Intermediate Code Generation рдХрд╛ рдкрд╣рд▓рд╛ рдЪрд░рдг рд╣реИ рдФрд░ рдЖрдзреБрдирд┐рдХ Compiler Tools рдореЗрдВ рдЗрд╕рдХреА рднреВрдорд┐рдХрд╛ рдФрд░ рднреА рдордЬрдмреВрдд рд╣реЛрддреА рдЬрд╛ рд░рд╣реА рд╣реИред

Related Articles

Symbolic Debugging of Optimized Code | рдСрдкреНрдЯрд┐рдорд╛рдЗрдЬрд╝реНрдб рдХреЛрдб рдХрд╛ рдкреНрд░рддреАрдХрд╛рддреНрдордХ рдбреАрдмрдЧрд┐рдВрдЧ

рдСрдкреНрдЯрд┐рдорд╛рдЗрдЬрд╝реНрдб рдХреЛрдб рдХрд╛ рдкреНрд░рддреАрдХрд╛рддреНрдордХ рдбреАрдмрдЧрд┐рдВрдЧ (Symbo...

Read More тЖТ

Data Flow Analysis of Structured Flow Graph | рд╕реНрдЯреНрд░рдХреНрдЪрд░реНрдб рдлреНрд▓реЛ рдЧреНрд░рд╛рдл рдХрд╛ рдбреЗрдЯрд╛ рдлреНрд▓реЛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг

рд╕реНрдЯреНрд░рдХреНрдЪрд░реНрдб рдлреНрд▓реЛ рдЧреНрд░рд╛рдл рдХрд╛ рдбреЗрдЯрд╛ рдлреНрд▓реЛ рд╡рд┐рд╢реНрд▓реЗрд...

Read More тЖТ

Code Improving Transformations in Compiler Design | рдХреЛрдб рд╕реБрдзрд╛рд░ рдкрд░рд┐рд╡рд░реНрддрди рдХреА рдЙрдиреНрдирдд рддрдХрдиреАрдХреЗрдВ

рдХреЛрдб рд╕реБрдзрд╛рд░ рдкрд░рд┐рд╡рд░реНрддрди рдХреА рдЙрдиреНрдирдд рддрдХрдиреАрдХреЗрдВ (Code Improving Tran...

Read More тЖТ

Introduction to Global Data Flow Analysis | рдЧреНрд▓реЛрдмрд▓ рдбреЗрдЯрд╛ рдлреНрд▓реЛ рдПрдирд╛рд▓рд┐рд╕рд┐рд╕ рдХрд╛ рдкрд░рд┐рдЪрдп

рдЧреНрд▓реЛрдмрд▓ рдбреЗрдЯрд╛ рдлреНрд▓реЛ рдПрдирд╛рд▓рд┐рд╕рд┐рд╕ рдХрд╛ рдкрд░рд┐рдЪрдп (Introduction to Global...

Read More тЖТ

Loop Optimization | рд▓реВрдк рдСрдкреНрдЯрд┐рдорд╛рдЗрдЬрд╝реЗрд╢рди

рд▓реВрдк рдСрдкреНрдЯрд┐рдорд╛рдЗрдЬрд╝реЗрд╢рди (Loop Optimization in Compiler Design) Loop Optimiza...

Read More тЖТ