Bottom-Up Parsing and Operator Precedence Parsing | рдмреЙрдЯрдо-рдЕрдк рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдФрд░ рдСрдкрд░реЗрдЯрд░ рдкреНрд░реАрд╕реАрдбреЗрдВрд╕ рдкрд╛рд░реНрд╕рд┐рдВрдЧ - Compiler Design Notes 2025

Bottom-Up Parsing and Operator Precedence Parsing | рдмреЙрдЯрдо-рдЕрдк рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдФрд░ рдСрдкрд░реЗрдЯрд░ рдкреНрд░реАрд╕реАрдбреЗрдВрд╕ рдкрд╛рд░реНрд╕рд┐рдВрдЧ - Compiler Design Notes 2025


рдмреЙрдЯрдо-рдЕрдк рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдФрд░ рдСрдкрд░реЗрдЯрд░ рдкреНрд░реАрд╕реАрдбреЗрдВрд╕ рдкрд╛рд░реНрд╕рд┐рдВрдЧ (Bottom-Up Parsing and Operator Precedence Parsing)

Syntax Analysis рдореЗрдВ рджреЛ рдкреНрд░рдореБрдЦ рдкрд╛рд░реНрд╕рд┐рдВрдЧ рддрдХрдиреАрдХреЗрдВ рд╣реЛрддреА рд╣реИрдВ тАФ Top-Down Parsing рдФрд░ Bottom-Up Parsingред рдЬрд╣рд╛рдБ Top-Down Parsing рдкрд╛рд░реНрд╕ рдЯреНрд░реА рдХреЛ рдКрдкрд░ рд╕реЗ рдиреАрдЪреЗ рдмрдирд╛рддреА рд╣реИ, рд╡рд╣реАрдВ Bottom-Up Parsing leaves рд╕реЗ рд╢реБрд░реВ рд╣реЛрдХрд░ root рдХреА рдУрд░ рдмрдврд╝рддреА рд╣реИред рдпрд╣ рддрдХрдиреАрдХ рд╕рдмрд╕реЗ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рдФрд░ рдЖрдорддреМрд░ рдкрд░ рдкреНрд░рдпреЛрдЧ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рд╡рд┐рдзрд┐ рд╣реИред

ЁЯУШ Bottom-Up Parsing рдХреНрдпрд╛ рд╣реИ?

Bottom-Up Parsing рд╡рд╣ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ input string рдХреЛ grammar rules рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдзреАрд░реЗ-рдзреАрд░реЗ reduce рдХрд░рддреЗ рд╣реБрдП start symbol рдореЗрдВ рдмрджрд▓рд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ Shift-Reduce Parsing рднреА рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред

рдореБрдЦреНрдп рд╕рд┐рджреНрдзрд╛рдВрдд:

  • Parsing process leaves рд╕реЗ root рдХреА рдУрд░ рдЪрд▓рддрд╛ рд╣реИред
  • Input рдХреЛ symbols рдХреЗ рд╕рдореВрд╣ рдореЗрдВ divide рдХрд░рдХреЗ reductions рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред
  • Parse Tree рдХреЛ рдзреАрд░реЗ-рдзреАрд░реЗ рдКрдкрд░ рдХреА рдУрд░ build рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

тЪЩя╕П Shift-Reduce Parsing:

Shift-Reduce Parser рд╕рдмрд╕реЗ рд╕рд╛рдорд╛рдиреНрдп Bottom-Up Parser рд╣реИред рдпрд╣ input string рдХреЛ stack рдФрд░ input buffer рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ parse рдХрд░рддрд╛ рд╣реИред рдЪрд╛рд░ рдореБрдЦреНрдп рдХреНрд░рд┐рдпрд╛рдПрдБ рд╣реЛрддреА рд╣реИрдВ:

  • ЁЯФ╣ Shift: Input symbol рдХреЛ stack рдкрд░ push рдХрд░рдирд╛ред
  • ЁЯФ╣ Reduce: Stack рдХреЗ symbols рдХреЛ grammar рдХреЗ production rule рд╕реЗ match рдХрд░рдХреЗ non-terminal рдореЗрдВ рдмрджрд▓рдирд╛ред
  • ЁЯФ╣ Accept: рдЬрдм stack рдореЗрдВ рдХреЗрд╡рд▓ start symbol рд░рд╣ рдЬрд╛рдП рдФрд░ input рд╕рдорд╛рдкреНрдд рд╣реЛ рдЬрд╛рдПред
  • ЁЯФ╣ Error: рдХреЛрдИ valid reduction рд╕рдВрднрд╡ рди рд╣реЛред

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

Grammar:

E тЖТ E + T | T
T тЖТ T * F | F
F тЖТ (E) | id

Input: id + id * id

Parsing Table (Simplified):

StepStackInputAction
1$id + id * id$Shift
2$ id+ id * id$Reduce F тЖТ id
3$ F+ id * id$Reduce T тЖТ F
4$ T+ id * id$Reduce E тЖТ T
5$ E+ id * id$Shift
6$ E +id * id$Shift
7$ E + id* id$Reduce F тЖТ id
8$ E + F* id$Reduce T тЖТ F
9$ E + T* id$Shift
10$ E + T *id$Shift
11$ E + T * id$Reduce F тЖТ id
12$ E + T * F$Reduce T тЖТ T * F
13$ E + T$Reduce E тЖТ E + T
14$ E$Accept тЬЕ

ЁЯзй Handle Pruning (Handle Concept):

Handle input string рдХрд╛ рд╡рд╣ рднрд╛рдЧ рд╣реЛрддрд╛ рд╣реИ рдЬрд┐рд╕реЗ grammar рдХреЗ production rule рд╕реЗ replace рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред Shift-Reduce Parsing рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рд╣рд░ рдЪрд░рдг рдореЗрдВ рд╕рд╣реА handle рдХреЛ рдкрд╣рдЪрд╛рдирдирд╛ рдФрд░ reduce рдХрд░рдирд╛ рд╣реЛрддрд╛ рд╣реИред

ЁЯУШ Handle Example:

E + E * E
тЖТ Handle: E * E тЖТ Reduced to T
тЖТ Handle: E + T тЖТ Reduced to E

тЪЩя╕П Operator Precedence Parsing:

Operator Precedence Parsing Bottom-Up Parsing рдХрд╛ рдПрдХ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╣реИ рдЬреЛ рдЙрди grammars рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИ рдЬрд┐рдирдореЗрдВ operators (+, -, *, /) рдХреА precedence рдФрд░ associativity рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рд╣реЛрддреА рд╣реИред

ЁЯУШ Operator Precedence Grammar:

рдРрд╕реА grammar рдЬрд┐рд╕рдореЗрдВ:

  • рдХреЛрдИ ╬╡-productions рди рд╣реЛрдВред
  • рдХреЛрдИ рджреЛ adjacent non-terminals рди рд╣реЛрдВред

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

E тЖТ E + E | E * E | (E) | id

ЁЯУК Operator Precedence Table:

Operator+*()id$
+><<><>
*>><><>
(<<<=<
)>> > >
id>> > >
$<<< <

ЁЯУЧ Parsing Example (Operator Precedence):

Input: id + id * id

Stack       | Input         | Action
-----------------------------------------
$ id        | + id * id $   | Shift
$ id +      | id * id $     | Shift
$ id + id   | * id $        | Reduce E тЖТ id
$ E +       | * id $        | Shift
$ E + *     | id $          | Shift
$ E + * id  | $             | Reduce E тЖТ id
$ E + E * E | $             | Reduce E тЖТ E + E * E
Accept тЬЕ

ЁЯЪА рдЖрдзреБрдирд┐рдХ рдЙрдкрдпреЛрдЧ (Bottom-Up Parsing in 2025):

  • ЁЯФ╣ LR(1) Parser Generators рдЬреИрд╕реЗ YACC, Bisonред
  • ЁЯФ╣ Machine Learning рдЖрдзрд╛рд░рд┐рдд Error Recoveryред
  • ЁЯФ╣ Cloud Compiler Tools рдореЗрдВ optimized parsing enginesред

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

Bottom-Up Parsing рд╕рдмрд╕реЗ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА parsing рддрдХрдиреАрдХ рд╣реИ рдЬреЛ large-scale compilers рдореЗрдВ рдкреНрд░рдпреЛрдЧ рд╣реЛрддреА рд╣реИред Operator Precedence Parsing arithmetic expressions рдХреЗ рд▓рд┐рдП рддреЗрдЬрд╝ рдФрд░ рдкреНрд░рднрд╛рд╡реА рд╡рд┐рдзрд┐ рд╣реИред 2025 рдореЗрдВ, AI-рд╕рдХреНрд╖рдо parser generators рдиреЗ рдЗрди рддрдХрдиреАрдХреЛрдВ рдХреЛ рдФрд░ рдЕрдзрд┐рдХ рд╕реНрдорд╛рд░реНрдЯ рд╡ error-tolerant рдмрдирд╛ рджрд┐рдпрд╛ рд╣реИред

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 тЖТ