Syntax Analysis and Context-Free Grammars (CFGs) | рд╡рд╛рдХреНрдп рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдФрд░ рд╕рдВрджрд░реНрдн-рдореБрдХреНрдд рд╡реНрдпрд╛рдХрд░рдг - Compiler Design Notes 2025
Syntax Analysis and Context-Free Grammars (CFGs) | рд╡рд╛рдХреНрдп рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдФрд░ рд╕рдВрджрд░реНрдн-рдореБрдХреНрдд рд╡реНрдпрд╛рдХрд░рдг - Compiler Design Notes 2025
рд╡рд╛рдХреНрдп рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдФрд░ рд╕рдВрджрд░реНрдн-рдореБрдХреНрдд рд╡реНрдпрд╛рдХрд░рдг (Syntax Analysis and Context-Free Grammars - CFGs)
Syntax Analysis рдХрдВрдкрд╛рдЗрд▓рд░ рдХрд╛ рджреВрд╕рд░рд╛ рдкреНрд░рдореБрдЦ рдЪрд░рдг рд╣реИ, рдЬреЛ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреА рд╕рдВрд░рдЪрдирд╛ (structure) рдХреА рдЬрд╛рдВрдЪ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдЪрд░рдг рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЗ рд╡рд╛рдХреНрдп (statements) рднрд╛рд╖рд╛ рдХреЗ рдирд┐рдпрдореЛрдВ рдХреЗ рдЕрдиреБрд░реВрдк рд╣реИрдВред рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП Context-Free Grammar (CFG) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
ЁЯУШ Syntax Analysis рдХреНрдпрд╛ рд╣реИ?
Syntax Analysis рдХрд╛ рдореБрдЦреНрдп рдЙрджреНрджреЗрд╢реНрдп рд╣реИ тАФ рдпрд╣ рдЬрд╛рдВрдЪрдирд╛ рдХрд┐ рдЯреЛрдХрдиреНрд╕ рдХрд╛ рдЕрдиреБрдХреНрд░рдо (sequence of tokens) рднрд╛рд╖рд╛ рдХреЗ рд╡реНрдпрд╛рдХрд░рдг (grammar) рдХреЗ рдЕрдиреБрд░реВрдк рд╣реИ рдпрд╛ рдирд╣реАрдВред рдпрд╣ рдХрд╛рд░реНрдп Parser рджреНрд╡рд╛рд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ рдПрдХ Parse Tree рдпрд╛ Syntax Tree рдмрдирд╛рддрд╛ рд╣реИред
рдЙрджрд╛рд╣рд░рдг:
Input Code: a = b + c * d; Tokens: ID = ID + ID * ID
Parser рдЗрд╕реЗ Grammar Rules рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд╡рд┐рд╢реНрд▓реЗрд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд Parse Tree рдмрдирд╛рддрд╛ рд╣реИ:
=
/
a +
/
b *
/
c d
ЁЯза Syntax Analysis рдХреЗ рдЙрджреНрджреЗрд╢реНрдп:
- ЁЯФ╣ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреА рд╕рдВрд░рдЪрдирд╛ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдирд╛ред
- ЁЯФ╣ Grammar рдирд┐рдпрдореЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░ parsing рдХрд░рдирд╛ред
- ЁЯФ╣ Syntax Errors рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ред
- ЁЯФ╣ Syntax Tree рддреИрдпрд╛рд░ рдХрд░рдирд╛ рдЬреЛ рдЕрдЧрд▓реА stages (Semantic Analysis) рдХреЗ рд▓рд┐рдП input рдмрдиреЗред
тЪЩя╕П Syntax Analysis рдХреЗ рдкреНрд░рдХрд╛рд░:
- Top-Down Parsing: рд░реВрдЯ рд╕реЗ рд╢реБрд░реВ рд╣реЛрдХрд░ leaves рддрдХ рд╡рд┐рд╢реНрд▓реЗрд╖рдгред
- Bottom-Up Parsing: Leaves рд╕реЗ рд╢реБрд░реВ рд╣реЛрдХрд░ рд░реВрдЯ рддрдХ рд╡рд┐рд╢реНрд▓реЗрд╖рдгред
ЁЯУЧ Context-Free Grammar (CFG) рдХреНрдпрд╛ рд╣реИ?
Context-Free Grammar (CFG) рдПрдХ рдФрдкрдЪрд╛рд░рд┐рдХ рд╡реНрдпрд╛рдХрд░рдг рд╣реИ рдЬреЛ рдХрд┐рд╕реА рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ рдХреА рд╡рд╛рдХреНрдп рд╕рдВрд░рдЪрдирд╛ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИред рдпрд╣ рднрд╛рд╖рд╛ рдХреА рд╡реИрдз рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЛ rule-based рддрд░реАрдХреЗ рд╕реЗ рд╡рд░реНрдгрд┐рдд рдХрд░рддрд╛ рд╣реИред
CFG рдХреА рдкрд░рд┐рднрд╛рд╖рд╛:
CFG рдХреЛ рдЪрд╛рд░ рдШрдЯрдХреЛрдВ рд╕реЗ рдорд┐рд▓рдХрд░ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
G = (V, T, P, S)
- V: Variables (Non-terminals)
- T: Terminals (Tokens рдпрд╛ Symbols)
- P: Production Rules
- S: Start Symbol
рдЙрджрд╛рд╣рд░рдг:
Arithmetic Expression рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд░рд▓ CFG:
E тЖТ E + T | T T тЖТ T * F | F F тЖТ (E) | id
рдпрд╣ grammar рдЗрди expressions рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ:
a + b * c (a + b) * c
ЁЯзй Parse Tree рдХреНрдпрд╛ рд╣реИ?
Parse Tree grammar рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреА hierarchical structure рдХреЛ рджрд░реНрд╢рд╛рддрд╛ рд╣реИред рдкреНрд░рддреНрдпреЗрдХ non-terminal рдПрдХ subtree рдХреЛ рджрд░реНрд╢рд╛рддрд╛ рд╣реИ рдФрд░ terminal symbols leaves рдХреЗ рд░реВрдк рдореЗрдВ рд╣реЛрддреЗ рд╣реИрдВред
ЁЯУК Parse Tree Example:
E
тФЬтФАтФА E
тФВ тФФтФАтФА id
тФЬтФАтФА +
тФФтФАтФА T
тФЬтФАтФА T
тФВ тФФтФАтФА id
тФЬтФАтФА *
тФФтФАтФА F
тФФтФАтФА id
ЁЯУЪ Derivations in Grammar:
- Leftmost Derivation: рд╣рд░ рдЪрд░рдг рдореЗрдВ рд╕рдмрд╕реЗ рдмрд╛рдПрдБ non-terminal рдХреЛ expand рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
- Rightmost Derivation: рд╣рд░ рдЪрд░рдг рдореЗрдВ рд╕рдмрд╕реЗ рджрд╛рдПрдБ non-terminal рдХреЛ expand рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдЙрджрд╛рд╣рд░рдг:
E тЖТ E + T тЖТ T + T тЖТ F + T тЖТ id + T тЖТ id + F тЖТ id + id
тЪЩя╕П Ambiguity in CFG:
рдпрджрд┐ рдПрдХ string рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ Parse Tree рдмрдирд╛рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рддреЛ grammar ambiguous рдХрд╣рд▓рд╛рддрд╛ рд╣реИред
рдЙрджрд╛рд╣рд░рдг:
E тЖТ E + E | E * E | id
тАЬid + id * idтАЭ рдХреЗ рд▓рд┐рдП рджреЛ Parse Trees рд╕рдВрднрд╡ рд╣реИрдВ:
- + рдкрд╣рд▓реЗ evaluate рд╣реЛ
- * рдкрд╣рд▓реЗ evaluate рд╣реЛ
рдЗрд╕ ambiguity рдХреЛ Operator Precedence Rules рд╕реЗ рд╣рдЯрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
ЁЯУШ Syntax Errors:
- ЁЯФ╣ Missing Semicolon (;)
- ЁЯФ╣ Mismatched Parentheses ()
- ЁЯФ╣ Unrecognized tokens
ЁЯзо Error Recovery Techniques:
- Panic Mode: рдХреБрдЫ symbols рдХреЛ рдЫреЛрдбрд╝рдХрд░ рдЖрдЧреЗ рдмрдврд╝рдирд╛ред
- Phrase-Level Recovery: Missing symbol рдЬреЛрдбрд╝рдирд╛ред
- Error Productions: Grammar рдореЗрдВ error patterns рд╢рд╛рдорд┐рд▓ рдХрд░рдирд╛ред
- Global Correction: рдиреНрдпреВрдирддрдо рд╕рдВрд╢реЛрдзрди рджреНрд╡рд╛рд░рд╛ error рд╕реБрдзрд╛рд░ред
ЁЯЪА рдЖрдзреБрдирд┐рдХ рдкрд░рд┐рдкреНрд░реЗрдХреНрд╖реНрдп (2025 рдореЗрдВ CFGs рдФрд░ Parsing):
- ЁЯФ╣ LLM (Large Language Models) рдЖрдзрд╛рд░рд┐рдд grammar correctionред
- ЁЯФ╣ AI-driven Parser Generation Tools рдЬреИрд╕реЗ ANTLR рдФрд░ PEGред
- ЁЯФ╣ Incremental Parsing IDEs (VS Code, IntelliJ) рдореЗрдВ рдЙрдкрдпреЛрдЧред
ЁЯУЩ рдирд┐рд╖реНрдХрд░реНрд╖:
Syntax Analysis рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреА рд╕рдВрд░рдЪрдирд╛ рд╕рдордЭрдиреЗ рдФрд░ Syntax Errors рдкрдХрдбрд╝рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЪрд░рдг рд╣реИред Context-Free Grammars Compiler рдХреЗ рд▓рд┐рдП рдПрдХ рдЖрдзрд╛рд░рднреВрдд рдирд┐рдпрдореЛрдВ рдХрд╛ рд╕реЗрдЯ рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВред 2025 рдореЗрдВ, AI рдФрд░ ML рдЖрдзрд╛рд░рд┐рдд рдЖрдзреБрдирд┐рдХ Parsers рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдФрд░ рднреА рддреЗрдЬрд╝, рдмреБрджреНрдзрд┐рдорд╛рди рдФрд░ рд╕рдЯреАрдХ рдмрдирд╛ рд░рд╣реЗ рд╣реИрдВред
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 тЖТ