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):
| Step | Stack | Input | Action |
|---|---|---|---|
| 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 тЖТ