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:
- рд╣рд░ grammar rule рдХреЗ рд▓рд┐рдП рдПрдХ function рдмрдирд╛рдПрдВред
- Operators рдХреЗ рд▓рд┐рдП internal nodes рдмрдирд╛рдПрдВред
- Operands (identifiers, numbers) рдХреЗ рд▓рд┐рдП leaves рдмрдирд╛рдПрдВред
- 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 тЖТ