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:

  1. рдкреНрд░рддреНрдпреЗрдХ non-terminal рдХреЗ FIRST set рдирд┐рдХрд╛рд▓реЗрдВред
  2. рдкреНрд░рддреНрдпреЗрдХ non-terminal рдХреЗ FOLLOW set рдирд┐рдХрд╛рд▓реЗрдВред
  3. Parsing Table рдмрдирд╛рдПрдВред
  4. 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-TerminalInput SymbolProduction
E(, idE тЖТ T E'
E'+E' тЖТ + T E'
E') , $E' тЖТ ╬╡
T(, idT тЖТ F T'
T'*T' тЖТ * F T'
T'+ , ) , $T' тЖТ ╬╡
F(F тЖТ (E)
FidF тЖТ 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 тЖТ