Grammar Transformations and Predictive Parsing | рд╡реНрдпрд╛рдХрд░рдг рд░реВрдкрд╛рдВрддрд░рдг рдПрд╡рдВ рдкреНрд░реЗрдбрд┐рдХреНрдЯрд┐рд╡ рдкрд╛рд░реНрд╕рд┐рдВрдЧ - Compiler Design Notes 2025
Grammar Transformations and Predictive Parsing | рд╡реНрдпрд╛рдХрд░рдг рд░реВрдкрд╛рдВрддрд░рдг рдПрд╡рдВ рдкреНрд░реЗрдбрд┐рдХреНрдЯрд┐рд╡ рдкрд╛рд░реНрд╕рд┐рдВрдЧ - Compiler Design Notes 2025
рд╡реНрдпрд╛рдХрд░рдг рд░реВрдкрд╛рдВрддрд░рдг рдФрд░ рдкреНрд░реЗрдбрд┐рдХреНрдЯрд┐рд╡ рдкрд╛рд░реНрд╕рд┐рдВрдЧ (Grammar Transformations & Predictive Parsing)
рдХрдВрдкрд╛рдЗрд▓рд░ рдХреЗ Syntax Analysis рдЪрд░рдг рдореЗрдВ, рд╡реНрдпрд╛рдХрд░рдг (Grammar) рдХреЛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд░реВрдкрд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рд╡рд╣ рдЖрд╕рд╛рдиреА рд╕реЗ рдкрд╛рд░реНрд╕ (Parse) рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗред рдпрджрд┐ рдХрд┐рд╕реА Grammar рдореЗрдВ Left Recursion рдпрд╛ Ambiguity рд╣реЛ, рддреЛ рдЙрд╕реЗ Transform рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рддрд╛рдХрд┐ рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдмрд┐рдирд╛ Backtracking рдХреЗ рдХреА рдЬрд╛ рд╕рдХреЗред рдЗрд╕рдХреЗ рдмрд╛рдж Predictive Parsing (LL(1) Parsing) рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рд╕рдмрд╕реЗ рддреЗрдЬрд╝ рдФрд░ рдкреНрд░рднрд╛рд╡реА Top-Down Parsing рддрдХрдиреАрдХ рд╣реИред
ЁЯУШ Grammar Transformation рдХреНрдпрд╛ рд╣реИ?
Grammar Transformation рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп Grammar рдХреЛ рдЗрд╕ рд░реВрдк рдореЗрдВ рдмрджрд▓рдирд╛ рд╣реИ рдХрд┐ Parser рдЙрд╕реЗ рдЖрд╕рд╛рдиреА рд╕реЗ process рдХрд░ рд╕рдХреЗред рдпрд╣ рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рджреЛ рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
- 1я╕ПтГг Left Recursion рдХреЛ рд╣рдЯрд╛рдирд╛
- 2я╕ПтГг Left Factoring рдХрд░рдирд╛
тЪЩя╕П Left Recursion Removal (рдмрд╛рдПрдБ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рд╣рдЯрд╛рдирд╛)
Left Recursion рддрдм рд╣реЛрддреА рд╣реИ рдЬрдм рдХреЛрдИ non-terminal рд╕реНрд╡рдпрдВ рдХреЛ рдЕрдкрдиреА production рдХреЗ рдмрд╛рдПрдБ рдУрд░ reference рдХрд░рддрд╛ рд╣реИред рдпрд╣ Recursive Descent Parser рдореЗрдВ infinite recursion рдХрд╛ рдХрд╛рд░рдг рдмрдирддреА рд╣реИред
рдЙрджрд╛рд╣рд░рдг:
E тЖТ E + T | T
рдпрд╣ Left Recursive Grammar рд╣реИ рдХреНрдпреЛрдВрдХрд┐ E тЖТ E + T рдЕрдкрдиреЗ рдЖрдк рдХреЛ рдлрд┐рд░ рд╕реЗ reference рдХрд░ рд░рд╣рд╛ рд╣реИред рдЗрд╕реЗ рд╣рдЯрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдо рдЗрд╕реЗ рдирд┐рдореНрди рдкреНрд░рдХрд╛рд░ рд╕реЗ transform рдХрд░рддреЗ рд╣реИрдВ:
Transformation:
E тЖТ T E' E' тЖТ + T E' | ╬╡
рдЕрдм рдпрд╣ grammar Left Recursion рд╕реЗ рдореБрдХреНрдд рд╣реИ рдФрд░ Predictive Parsing рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рд╣реИред
ЁЯзй Left Factoring (рд▓реЗрдлреНрдЯ рдлреИрдХреНрдЯреЛрд░рд┐рдВрдЧ)
рдЬрдм рдХрд┐рд╕реА grammar рдореЗрдВ ambiguity рд╣реЛрддреА рд╣реИ рдпрд╛ рдЬрдм рджреЛ рдпрд╛ рдЕрдзрд┐рдХ productions рдХреА рд╢реБрд░реБрдЖрдд рд╕рдорд╛рди рд╣реЛрддреА рд╣реИ, рддреЛ parser рдХреЛ рдирд┐рд░реНрдгрдп рд▓реЗрдиреЗ рдореЗрдВ рдХрдард┐рдирд╛рдИ рд╣реЛрддреА рд╣реИ рдХрд┐ рдХреМрди рд╕рд╛ rule рд▓рд╛рдЧреВ рдХрд░рдирд╛ рд╣реИред рдЗрд╕реЗ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП Left Factoring рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдЙрджрд╛рд╣рд░рдг:
S тЖТ if E then S else S | if E then S
рдпрд╣рд╛рдБ ambiguity рд╣реИред рдЗрд╕реЗ left factoring рджреНрд╡рд╛рд░рд╛ рдареАрдХ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
Transformation:
S тЖТ if E then S S' S' тЖТ else S | ╬╡
ЁЯУЧ Predictive Parsing рдХреНрдпрд╛ рд╣реИ?
Predictive Parsing рдПрдХ non-backtracking parsing рддрдХрдиреАрдХ рд╣реИ рдЬреЛ grammar rules рдФрд░ lookahead symbol рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдирд┐рд░реНрдгрдп рд▓реЗрддреА рд╣реИред рдЗрд╕реЗ LL(1) Parsing рднреА рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред
- ЁЯФ╣ L тЖТ Input рдХреЛ Left рд╕реЗ рдкрдврд╝рдирд╛ред
- ЁЯФ╣ L тЖТ Leftmost derivation рдмрдирд╛рдирд╛ред
- ЁЯФ╣ 1 тЖТ рдПрдХ lookahead symbol рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ред
ЁЯзо LL(1) Parsing Table Construction:
Predictive Parser FIRST рдФрд░ FOLLOW sets рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ Parsing Table рдмрдирд╛рддрд╛ рд╣реИред
Algorithm:
- рдкреНрд░рддреНрдпреЗрдХ non-terminal рдХреЗ FIRST set рдирд┐рдХрд╛рд▓реЗрдВред
- рдкреНрд░рддреНрдпреЗрдХ non-terminal рдХреЗ FOLLOW set рдирд┐рдХрд╛рд▓реЗрдВред
- Parsing Table рдмрдирд╛рдПрдВред
- Parsing рдХреЗ рджреМрд░рд╛рди stack рдФрд░ input рдХреА рддреБрд▓рдирд╛ рдХрд░реЗрдВред
ЁЯУК Example Grammar:
E тЖТ T E' E' тЖТ + T E' | ╬╡ T тЖТ F T' T' тЖТ * F T' | ╬╡ F тЖТ (E) | id
FIRST Sets:
FIRST(E) = ( , id FIRST(E') = + , ╬╡ FIRST(T) = ( , id FIRST(T') = * , ╬╡ FIRST(F) = ( , id
FOLLOW Sets:
FOLLOW(E) = ) , $ FOLLOW(E') = ) , $ FOLLOW(T) = + , ) , $ FOLLOW(T') = + , ) , $ FOLLOW(F) = * , + , ) , $
ЁЯУШ LL(1) Parsing Table (Simplified):
| Non-Terminal | Input Symbol | Production |
|---|---|---|
| E | (, id | E тЖТ T E' |
| E' | + | E' тЖТ + T E' |
| E' | ) , $ | E' тЖТ ╬╡ |
| T | (, id | T тЖТ F T' |
| T' | * | T' тЖТ * F T' |
| T' | + , ) , $ | T' тЖТ ╬╡ |
| F | ( | F тЖТ (E) |
| F | id | F тЖТ id |
ЁЯУЧ Predictive Parsing Algorithm (Stack-Based):
1. Initialize stack with $S 2. Read next input symbol 3. If top of stack = input тЖТ pop and advance 4. Else if top is non-terminal тЖТ replace using parsing table entry 5. Else error 6. Repeat until stack empty and input = $
ЁЯУШ рдЙрджрд╛рд╣рд░рдг (Example Parsing):
Input: id + id * id
Derivation Steps:
Stack | Input | Action ----------------------------------------- $E | id + id * id$ | E тЖТ T E' $E' T | id + id * id$ | T тЖТ F T' $E' T' F | id + id * id$ | F тЖТ id ... тЬЕ Successfully Parsed
ЁЯЪА рдЖрдзреБрдирд┐рдХ рджреГрд╖реНрдЯрд┐рдХреЛрдг (Predictive Parsing 2025 рдореЗрдВ):
- ЁЯФ╣ AI-driven Parser Generators (ANTLR, LLGen)ред
- ЁЯФ╣ Dynamic LL(k) Parsing with adaptive lookaheadред
- ЁЯФ╣ Cloud-based Parsing Tools for language designред
ЁЯУЩ рдирд┐рд╖реНрдХрд░реНрд╖:
Grammar Transformations рдФрд░ Predictive Parsing Compiler Design рдореЗрдВ рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИрдВред Left Recursion рдФрд░ Ambiguity рдХреЛ рджреВрд░ рдХрд░рдХреЗ рд╣рдо Grammar рдХреЛ LL(1) Parser рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред 2025 рдореЗрдВ Predictive Parsing AI рдФрд░ Cloud 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 тЖТ